Phalconのルーティングを忘れないメモです。
- Phalcon3を前提。
基本
$router->add('/', ['controller' => 'home', 'action' => 'index']); // HTTPメソッドならなんでも
$router->addGet('/', ['controller' => 'home', 'action' => 'index']); // GETだけ
$router->addPost('/', ['controller' => 'home', 'action' => 'index']); // Postだけ
$router->add('/', ['controller' => 'home', 'action' => 'index'])->via(['POST', 'PUT']); // 個別指定
Short Syntax
$router->add('/', ['controller' => 'home', 'action' => 'index']); // これを
$router->add('/', 'home::index'); // こう書くことが出来る
別名つける
$router->add('/', 'home::index')->setName('home');
// $url->get(['for' => 'home']); // /
パラメータ埋め込み
$router->add('/users/{id}', 'user::show');
$router->add('/users/{id:[0-9]+}', 'user::show'); // 正規表現で制御
// 取得の際は
// $this->dispatcher->getParam('id');
// で取得
converter
dispatcherにわたす前に変換してくれるやつ、この場合はidというパラメータをModelの取得結果を返すように変更してる
$router->add('/products/{id}', 'products::show');
$router->convert('id', function($id) {
return Product::findFirstById($id);
});
ルーティングのグルーピング
class BlogRoutes extends \Phalcon\Mvc\Router\Group
{
public function initialize()
{
$this->setPaths(
[
'module' => 'blog',
'namespace' => 'Blog\Controllers',
]
);
// All the routes start with /blog
$this->setPrefix('/blog');
// Add a route to the group
$this->add('/save','blog::save');
}
}
$router->mount(new BlogRoutes()); // マウントしないと適用されないので注意
正直
PhalconのルーティングはLaravelに比べてあきらかにしょぼい。