スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SlimとMandangoを使ってみた

気軽にphpのアプリを作りたかったので軽量フレームワークとMongoDBを組み合わせてみました。
フレームワークはSlimで、ODMにMandangoを使いました。
ライブラリはcomposer経由でインストールしています。

■準備
mkdir slim-test
cd slim-test
vi composer.json
{
"require": {
"slim/slim": "2.*",
"mandango/mondator": "dev-master",
"mandango/mandango": "dev-master"
}
}

php composer.phar install

本来はmondatorは自動で入るはずなんですが、入らなかったので明示しました。

■モデル作成
vi models.php
<?php
require "./vendor/autoload.php";

// start Mondator
use Mandango\Mondator\Mondator;

$modelDir = './lib/Model';
$mondator = new Mondator();

// assign the config classes
$mondator->setConfigClasses(array(
'Model\Article' => array(
'fields' => array(
'title' => 'string',
'content' => 'string',
),
),
));

// assign extensions
$mondator->setExtensions(array(
new Mandango\Extension\Core(array(
'metadata_factory_class' => 'Model\Mapping\Metadata',
'metadata_factory_output' => $modelDir.'/Mapping',
'default_output' => $modelDir,
)),
));

// process
$mondator->process();

php models.php

■web構築
mkdir public
vi public/index.php
<?php
// 生成したモデルをローダに設定する
$loader = require "../vendor/autoload.php";
$loader->add('Model', '../lib');
$loader->register();

use Mandango\Cache\FilesystemCache;
use Mandango\Connection;
use Mandango\Mandango;
use Model\Mapping\Metadata;

$metadataFactory = new Metadata();
$cache = new FilesystemCache('/tmp/cache');
$mandango = new Mandango($metadataFactory, $cache);
$connection = new Connection('mongodb://localhost:27017', 'test');
$mandango->setConnection('my_connection', $connection);
$mandango->setDefaultConnectionName('my_connection');

$app = new \Slim\Slim(array(
"debug" => true,
"templates.path" => "../templates"
));

$app->get("/", function () use ($app, $mandango) {
$articleRepository = $mandango->getRepository('Model\Article');
$query = $articleRepository->createQuery();
$list = $query->all();
$app->render("index.php", ['list' => $list]);
});

$app->post("/add/", function () use ($app, $mandango) {
$req = $app->request();
$title = $req->post("title");
$content = $req->post("content");
$article = $mandango->create('Model\Article');
$article->setTitle($title);
$article->setContent($content);
$article->save();
$app->redirect('/');
});

$app->run();

mkdir templates
vi templates/index.php
<!DOCTYPE html>
<html>
<head>
<title>記事</title>
<meta charset="UTF-8">
</head>
<body>
<h1>記事一覧</h1>
<table>
<tr>
<td>タイトル</td>
<td>内容</td>
</tr>
<?php foreach ($list as $line) { ?>
<tr>
<td><?php echo htmlspecialchars($line->getTitle(), ENT_QUOTES, 'UTF-8'); ?></td>
<td><?php echo htmlspecialchars($line->getContent(), ENT_QUOTES, 'UTF-8'); ?></td>
</tr>
<?php }?>
</table>
<p>記事登録</p>
<form action="/add/" method="POST">
<input type="text" name="title" value=""/>
<br/>
<textarea name="content"></textarea>
<br/>
<input type="submit" name="submit" value="submit"/>
</form>
</body>
</html>

■実行
cd public
php -S localhost:8888
http://localhost:8888
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。