我阅读了教程,发现要使用“admin”前缀,你可以取消注释:
Configure::write('Routing.prefixes', array('admin'));
config / core.php文件。
我做到了,我的管理路由工作得很好 - / admin / users / add命中了我的users_controller中的admin_add()函数。
问题是 - 它也改变了我的正常链接 - 即。我的“LOGOUT”按钮现在尝试转到/ admin / users / logout而不是/ users / logout。我知道我可以添加'admin'=> false,但我不想为我网站中的每个链接都这样做。
有没有办法让它只有'admin'=> true或/ admin / ...才能转到管理员,而不是所有其他链接?
答案 0 :(得分:4)
扩展用户Abba Bryant的编辑,看看如何在烹饪书中创建帮助:http://book.cakephp.org/view/1097/Creating-Helpers
如果必须在所有链接上手动禁用路由是一件烦恼(对我来说就是这样!),你可以创建一个新助手MyCustomUrlHelper
(名称不必那么长),并让它使用核心UrlHelper为您生成URL。
class MyCustomUrlHelper extends AppHelper {
public $helpers = array('Html');
function url($controller, $action, $params ,$routing = false, $plugin = false) {
//Example only, the params you send could be anything
$opts = array(
'controller' => $controller,
'action' => $action
//....
);
}
//another option
function url($params) {
//Example only, the params you send could be anything
$opts = array(
'controller' => $params['controller'],
'action' => $params['action']
//....
)
}
//just fill up $opts array with the parameters that core URL helper
//expects. This allows you to specify your own app specific defaults
return $this->Html->url($opts); //finally just use the normal url helper
}
基本上你可以根据需要将其设为详细或简洁。它只是实际URL帮助程序的包装类,它将从内部完成工作。这允许您提供适用于您的特定应用程序的默认值。这也允许您在一个地方进行更改,并更新整个应用程序的路由。
您还可以检查传递的$ opts数组是否为字符串。这样你就可以拥有两全其美。
答案 1 :(得分:3)
确保你使用你在HtmlHelper :: link调用中处理它的前缀路由
<?php
...
echo $html->link( array(
'controller' => 'users',
'action' => 'logout',
'plugin' => false,
'admin' => false,
));
...
?>
**编辑** 您可以扩展AppHelper中的url函数以检查传递的数组,并将Routing.prefixes键设置为false(如果它们尚未在url调用中设置)。
然后,您需要每次在管理链接中指定前缀。
答案 2 :(得分:1)
HtmlHelper接受两种提供URL的方式:它可以是Cake相对URL或URL参数数组。
如果您使用网址参数,默认情况下,如果您未指定'admin'=&gt;假参数如果您正在执行管理操作,HtmlHelper会自动为“admin”操作前缀。
恕我直言,摆脱这个参数的最简单方法是使用Cake相对URL作为字符串。
<?php
//instead of using
//echo $this->Html->link(__('logout', true), array('controller' => 'users', 'action' => 'logout'));
//use
echo $this->Html->link(__('logout', true), '/users/logout');
亲切的问候,
尼科
答案 3 :(得分:0)
本周我遇到了这个问题,这段代码似乎解决了这个问题。让我知道它是否对你不起作用,我可以试着找出我做了什么让它发挥作用。
$this->Auth->autoRedirect = false;
$this->Auth->loginAction = array(Configure::read('Routing.admin') => false, 'controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array(Configure::read('Routing.admin') => false, 'controller' => 'users', 'action' => 'logout');
$this->Auth->loginRedirect = array(Configure::read('Routing.admin') => false, 'controller' => 'users', 'action' => 'welcome');
这真令人沮丧,所以我很乐意帮忙。
答案 4 :(得分:0)
我迟到了,但我有一个非常好的答案:
您可以通过创建AppHelper类来覆盖默认行为。创建app / app_helper.php并粘贴以下内容:
<?php
class AppHelper extends Helper{
function url($url = null, $full = false) {
if(is_array($url) && !isset($url['admin'])){
$url['admin'] = false;
}
return parent::url($url, $full);
}
}
?>
除非在调用link()或url()时指定,否则admin将设置为false。