Phalconでマルチモジュールのルーティング

2014年 6月22日 PHP Phalcon

Phalconのマルチモジュールプロジェクトで、frontendとbackendのモジュールがあるとします。
frontendはhttp://localhost/phalcon-multiple-module/、backendはhttp://localhost/phalcon-multiple-module/admin でアクセスできるようにルーティングします。

frontend側はsetDefaultModule()(名前空間を使う場合はsetDefaultNamespace()も)するだけでシングルモジュールと同じルーティングになりますが、backend側も同じルールのルーティングを適用しようとした場合、ちょっと面倒くさいです。

PhalconのルーティングはPhalcon\Mvc\Routerのaddメソッドで追加していきます。



/adminでアクセスした場合

/adminでアクセスした場合はIndexControllerのindexActionにルーティングします。
/admin/でアクセスした場合のルーティングも必要になります。

php
$router->add( '/admin', array(
    'namespace' => 'Multiple\Backend\Controllers' ,
    'module' => 'backend',
    'controller' => 'index' ,
    'action' => 'index'
));
 
 
$router->add( '/admin/', array(
    'namespace' => 'Multiple\Backend\Controllers' ,
    'module' => 'backend',
    'controller' => 'index' ,
    'action' => 'index'
));

/admin/indexでアクセスした場合

コントローラーはプレイスフォルダーを使用します。
actionはindexにルーティングします。

php
$router->add( '/admin/:controller', array (
    'namespace' => 'Multiple\Backend\Controllers' ,
    'module' => 'backend',
    'controller' => 1,
    'action' => 'index',
));
 
 
$router->add( '/admin/:controller/', array (
    'namespace' => 'Multiple\Backend\Controllers' ,
    'module' => 'backend',
    'controller' => 1,
    'action' => 'index',
));

/admin/index/indexでアクセスした場合

コントローラー、アクション共にプレイスフォルダーを使用します。

php
$router->add( '/admin/:controller/:action', array (
    'namespace' => 'Multiple\Backend\Controllers' ,
    'module' => 'backend',
    'controller' => 1,
    'action' => 2,
));
 
$router->add( '/admin/:controller/:action/', array (
    'namespace' => 'Multiple\Backend\Controllers' ,
    'module' => 'backend',
    'controller' => 1,
    'action' => 2,
));

パラメーター付きでアクセスした場合

/admin/index/index/param1のようにアクセスした場合です。
この場合、次の記述だけで/admin/index/index/param1/でもアクセスできました‥

php
$router->add('/admin/:controller/:action/:params',array(
    'namespace' => 'Multiple\Backend\Controllers',
    'module' => 'backend',
    'controller' => 1,
    'action' => 2,
    'params' => 3,
));

最終的にRouterの設定は次のようになりました。

php
// config/routes.php
 
$router = new Phalcon\Mvc\Router();
 
$router->setDefaultModule("frontend");
$router->setDefaultNamespace("Multiple\Frontend\Controllers");
 
$router->add( '/admin', array(
    'namespace' => 'Multiple\Backend\Controllers' ,
    'module' => 'backend',
    'controller' => 'index' ,
    'action' => 'index'
));
 
 
$router->add( '/admin/', array(
    'namespace' => 'Multiple\Backend\Controllers' ,
    'module' => 'backend',
    'controller' => 'index' ,
    'action' => 'index'
));
 
 
$router->add( '/admin/:controller', array (
    'namespace' => 'Multiple\Backend\Controllers' ,
    'module' => 'backend',
    'controller' => 1,
    'action' => 'index',
));
 
 
$router->add( '/admin/:controller/', array (
    'namespace' => 'Multiple\Backend\Controllers' ,
    'module' => 'backend',
    'controller' => 1,
    'action' => 'index',
));
 
 
$router->add( '/admin/:controller/:action', array (
    'namespace' => 'Multiple\Backend\Controllers' ,
    'module' => 'backend',
    'controller' => 1,
    'action' => 2,
));
 
$router->add( '/admin/:controller/:action/', array (
    'namespace' => 'Multiple\Backend\Controllers' ,
    'module' => 'backend',
    'controller' => 1,
    'action' => 2,
));
 
$router->add('/admin/:controller/:action/:params',array(
    'namespace' => 'Multiple\Backend\Controllers',
    'module' => 'backend',
    'controller' => 1,
    'action' => 2,
    'params' => 3,
));
 
return $router;

githubにソースを置きました。



前へ 次へ