【问题标题】:CakePHP - Routing Using 'admin_' PrefixCakePHP - 使用 'admin_' 前缀的路由
【发布时间】:2014-02-19 00:44:21
【问题描述】:

我目前正在使用 cake 的路由配置来设置管理员视图,这与非管理员用户的不同。我阅读了文档(蛋糕)的路由章节,偶然发现了前缀路由。我认为这是我需要使用的东西,来完成我需要的东西。所以我开始按照建议设置 config/core.php,并取消注释

Configure::write('Routing.prefixes', array('admin'));

然后,我在 routes.php 中添加了一条路由:

Router::connect('/admin', array('controller' => 'donors', 'action' => 'index', 'admin' => true));

据我了解,通过上述设置,我可以为管理员定义特定操作,名称如:admin_index 或 admin_view 等。

所以我的 AppController 有一个这样的组件集:

 public $components = array(
        'DebugKit.Toolbar',
        'Session',
        'Auth' => array(
            'loginRedirect' => array(  
                'controller' => 'donors',
                'action' => 'index'
            ),
            'authError' => 'Access Denied',
            'logoutRedirect' => array(  
                'controller' => 'users',
                'action' => 'login'
            ),
            'authorize' => array('Controller') 
        )
    ); 

因此,当非管理员用户登录时,他应该被重定向到“donors/index”,而当管理员登录时,我想将他重定向到“donors/admin_index”。我该怎么做?

我试过了:

public function beforeFilter(){        

        if(isset($this->params['admin'])){
            $this->layout = 'stafflayout';
            $this->Auth->loginRedirect = array(
                'controller'=>'donors',
                'action'=>'index',
                'prefix'=>'admin',
                'admin'=>true
            );
    }

在测试它的过程中,乍一看,我认为它有效。但是 URL 不会像 'donor/admin_index .. 那样改变,并且仍然被重定向到donor/index 或等效项,只是重定向到 /donors... 为什么这不起作用?

(第二个问题)同样在测试的过程中,我将Auth组件LoginRedirect的控制器和操作更改为

'控制器'=>'帖子'

和

'动作'=>'索引'

除了'donors'、'index'之外,当我登录时,我仍然被重定向到donors/index..是否应该将我重定向到'posts/index'

谁能帮我解决这两个问题?主要问题更重要!

【问题讨论】:

  • 对不起,先生。您(或任何其他有经验的用户是否愿意提供帮助)与其他初学者分享这些精美的文档,比如我,好吗?提前谢谢你。
  • 你去吧.. book.cakephp.org/3.0/en/development/routing.html#prefix-routing 要了解前缀路由在 cake 中的工作原理,请查看提供的文档

标签: php cakephp redirect


【解决方案1】:

代码没问题!

Router::connect('/admin', array('controller' => 'donors', 
'action' => 'index', 'admin' => true));

只要在 url 中写入 /admin,上述内容就会呈现 /donors/index 页面。

现在,如果您想添加 /donors/admin_index 之类的前缀,则必须再创建一条规则,例如:

    Router::connect('/donors/admin_index', array('controller' => 'donors', 
'action' => 'index', 'admin' => true));

在 beforeFilter 函数中

if(isset($this->params['admin'])){
            $this->layout = 'stafflayout';
            $this->Auth->loginRedirect = array(
                'controller'=>'donors',
                'action'=>'admin_index',
                'admin'=>true
            );

上面的代码会重定向到 /donors/admin_index 并且路由会渲染 /donors/index 页面

【讨论】:

  • 感谢您的回复。然后我一定是无知地误解了(假设)当将 admin cofig 键设置为 true 时,我告诉 cake 期待 admin_ 前缀!我的错!
  • 那么在这种情况下,当管理员登录时,我仍然会被重定向到捐助者/索引!似乎 $this->params['admin'] 没有以某种方式设置,因为该块没有被执行。我在 UsersController 中覆盖了 AppController 的 beforeFilter,但我正在调用 parent::beforeFilter,所以我认为它应该执行!对此有何想法?
  • 通过在 beforeFilter 中应用后跟 die 的 echo 来检查并查看输出
  • 这不是前缀路由在 CakePHP 中的工作方式。这本书有a section that describes how prefixes in the URL connect to controller actions。引用:"...访问 URL /admin/users/edit/5 将调用 UsersController 的方法 admin_edit,将 5 作为第一个参数传递。使用的视图文件将是 app/View/Users/admin_edit.ctp"
猜你喜欢
  • 2011-06-09
  • 2013-10-09
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 2011-01-03
  • 2017-05-12
  • 1970-01-01
相关资源
最近更新 更多