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

时间:2010-06-30 18:30:46

标签: cakephp routing routes cakephp-1.3

您好我正在CakePHP中设置管理路由。

这是我目前的路线:

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

它工作正常,但我不明白'admin'=>之间的区别是的,'prefix'=> 'admin'是。

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

2 个答案:

答案 0 :(得分:27)

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

在创建路径时,任何传递到第二个参数的数组键都无法被CakePHP识别(即不是通常的controlleractionplugin,{{1在匹配该路由的请求期间,将其设置为命名参数。

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

'admin' => true

其次,它提供了向后兼容管理路由在CakePHP 1.2中的工作方式(上例中的最后一行是如何在1.2中创建管理路由链接)。因此,开发人员从1.2迁移到1.3可以防止在整个应用程序中更改链接,方法是在其路由中保留/* 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')); 标记(并添加'admin' => true一个)。

最后,通过使用命名参数设置这样的自定义标志并在您的应用程序中使用它而不是通过精确字符串引用您的路由意味着如果您将前缀更改为其他内容,则无法更改链接(例如从'prefix' => 'admin'adminadministrator)...虽然这有点没什么意义,因为您需要重命名所有edit控制器操作和视图。 :)

答案 1 :(得分:4)

// Go into a prefixed route.
echo $html->link('Manage posts', array('manager' => true, 'controller' => 'posts', 'action' => 'add'));

// leave a prefix
echo $html->link('View Post', array('manager' => false, 'controller' => 'posts', 'action' => 'view', 5));