14

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

这是我目前的路线:

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

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

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

4

2 回答 2

27

通过设置'prefix' => 'admin'你告诉 CakePHP 你想admin为那个路由使用前缀 of;基本上意味着您要使用名称以 . 为前缀的控制器操作和视图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'));

其次,它提供了与 CakePHP 1.2 中管理路由的工作方式的向后兼容性(上例的最后一行是在 1.2 中如何创建管理路由链接)。'admin' => true因此,从 1.2 迁移到 1.3 的开发人员可以通过在路由中保留标志(并添加标志)来避免在整个应用程序中更改链接'prefix' => 'admin'

最后,通过使用命名参数设置这样的自定义标志并在您的应用程序中使用它而不是通过确切的字符串引用您的路由意味着您可以防止自己在将前缀更改为其他内容时更改链接(例如adminto administratoror edit)...虽然这有点争议,因为您需要重命名所有admin_*控制器操作和视图。:)

于 2010-07-02T09:48:02.377 回答
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));
于 2010-09-26T11:45:30.067 回答