CakePHP - / admin /的管理路由,但不是所有其他的(设置默认管理员假的方式?)

时间:2011-04-05 15:04:05

标签: php cakephp cakephp-1.3

我阅读了教程,发现要使用“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 / ...才能转到管理员,而不是所有其他链接?

5 个答案:

答案 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。