技術めも

Slim Framework

オフィシャルサイト

PHP micro framework "Slim"

http://www.slimframework.com/

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');