▶ 技術めも
Slim Framework
オフィシャルサイト
PHP micro framework "Slim"
Router
http://www.slimframework.com/docs/v3/objects/router.html
インストール
Composer インストール
curl -s https://getcomposer.org/installer | php
composer.json
オートロード設定と Twig テンプレートエンジンのインストール設定ファイル
{
"autoload": {
"psr-4": {"AppName\\": "src\\"}
},
"require": {
"slim/slim": "2.*",
"slim/views": "0.1.*",
"twig/twig" : "1.*"
}
}
Composer インストール
php composer.phar install
composer.lock ファイルと vendor ディレクトリが作成される。
ファイル配置
.htaccess
リクエストをフロントコントローラー(index.php)に集める
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
index.php
<?php
require __DIR__ . '/../vendor/autoload.php';
\Slim\Slim::registerAutoloader();
// During instantiation
$app = new \Slim\Slim([
'view' => new \Slim\Views\Twig(),
'templates.path' => __DIR__ . '/../templates',
'cache' => __DIR__ . '/../cache'
]);
$app->view()->parserExtensions = [
new \Slim\Views\TwigExtension()
];
// Default Routing
$app->map('/(:module)(/:action)(/:id1)(/:id2)(/:id3)(/:id4)', function ($module = 'top', $action = 'index', $id1 = null, $id2 = null, $id3 = null, $id4 = null) use ($app) {
$controllerName = '\\AppName\\Controller\\'.ucfirst($module);
$methodName = ucfirst($action);
if (method_exists($controllerName, $methodName) && is_callable([$controllerName, $methodName])) {
$controller = new $controllerName($app);
$controller->$methodName($id1, $id2, $id3, $id4);
} else {
$app->notFound();
}
})->via('GET', 'POST')->conditions([
'module' => '[a-z_0-9]+',
'action' => '[a-z_0-9]+',
'id1' => '\w+',
'id2' => '\w+',
'id3' => '\w+',
'id4' => '\w+'
]);
// 404
$app->notFound(function () use ($app) {
$app->render('404.twig');
$app->response()->setStatus(404);
return;
});
// 500
$app->error(function () use ($app) {
$app->render('500.twig');
$app->response()->setStatus(500);
return;
});
$app->run();
Controller Base (基底) class
ファイルパス
src/Controller/Base.php
<?php
namespace AppName\Controller;
class Base
{
protected $app = null;
public function __construct($app)
{
$this->app = $app;
}
}
トップページ Controller
ファイルパス
src/Controller/Top.php
index メソッドは、http://server/ で実行される
<?php
namespace AppName\Controller;
class Top extends Base
{
public function index()
{
$this->app->render("top.twig");
}
}
Hoge Controller
ファイルパス
src/Controller/Hoge.php
index メソッドは、http://server/hoge で実行される
edit メソッドは、http://server/hoge/edit で実行される
<?php
namespace AppName\Controller;
class Top extends Base
{
public function index()
{
$this->app->render("hoge/list.twig");
}
public function edit()
{
$this->app->render("hoge/edit.twig");
}
}
フォルダ・ファイル構成
cache フォルダはWebサーバ実行権限で書き込めるようにしてください。
chmod 777 cache
サービス公開
webフォルダをWebサーバーの公開フォルダに設定してください。
- Apache (httpd.conf)
DocumentRoot /web/slim_project/web
Tips
JSON 応答
$app->response->headers->set('Content-Type', 'application/json');
$app->response->setBody(json_encode($user));
$_POST
$fuga = $app->request->post('fuga');