路由:'admin'=> true vs'prefix'=>'在CakePHP中的管理员

Rob*_*Rob 14 routing routes cakephp cakephp-1.3

嗨,我在CakePHP中设置管理路由.

这是我目前的路线:

Router::connect('/admin/:controller/:action/*', array('admin' => true, 'prefix' => 'admin', 'controller' => 'pages', 'action' => 'display', 'home'));
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我不明白'admin'=> true和'prefix'=>'admin'之间的区别是什么.

当我省略时'prefix' => 'admin',路由器将不会使用admin_index,而只是使用index.那有什么意义'admin' => true呢?

dei*_*zel 27

通过设置'prefix' => 'admin'你告诉CakePHP你想要使用admin该路由的前缀; 基本上意味着您要使用名称前缀的控制器操作和视图admin_.这部分你已经知道了,事情可能会正常工作.

虽然时创建路由,传递到第二个参数的任何数组键不是由CakePHP的认可(即不是你平常controller,action,plugin,prefix东西)的匹配路由请求期间设置为命名参数.

'admin' => true因此,在这种情况下,添加只是一个命名参数,但它具有优势.首先,它可以使代码更简洁.

/* Determine if a request came through admin routing */
// without:
if ($this->params['prefix'] == 'admin') {}
// with:
if ($this->params['admin']) {}

/* Create a link that is reverse-routed to an admin prefixed route */
// without:
$html->link('...', array('prefix' => 'admin', 'controller' => 'users'));
// with:
$html->link('...', array('admin' => true, 'controller' => 'users'));
Run Code Online (Sandbox Code Playgroud)

其次,它提供向后兼容性与CakePHP的1.2的方式管理路由的工作(从上面的例子中的最后一行是你将如何在1.2取得了管理路由链接).因此,开发从1.2到1.3迁移可以防止具有通过保持改变整个应用程序链接'admin' => true标志在他们的路线(并添加'prefix' => 'admin'一个).

最后,通过一个名为参数设置的自定义标记像这样在你的应用程序中使用它,而不是由一个确切的字符串引用您的路线意味着你防止你不必改变链接,如果您更改前缀别的东西(比如从adminadministratoredit)......虽然这是有点一个有争议的问题,因为你将需要重新命名所有的admin_*控制器动作和视图.:)