【问题标题】:CakePHP 2.3 Plugin doesn't seem to extend appcontrollerCakePHP 2.3 插件似乎没有扩展 appcontroller
【发布时间】:2013-07-15 11:47:09
【问题描述】:

我创建了一个名为“IssueTracker”的插件,它位于app/Plugin/IssueTracker。我创建了一个名为Tickets 的控制器,可以通过www.example.com/issue_tracker/tickets/ 访问它。但是,仅适用于具有“管理员”等级的登录用户。

这并不是我所希望的,所以我在Plugin/IssueTracker/Controller/TicketsController.php 中添加了以下内容:

public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('index');
}

我希望通过这段代码(我在我的app/Controller/ 中的其他几个控制器中使用它,它将从我的AppController.php 文件继承。TicketsController.php 文件扩展了IssueTrackerAppController(像这样):

class TicketsController extends IssueTrackerAppController { 
//functions goes in here
}

在我的Plugin/Controller 文件夹中,我创建了文件IssueTrackerAppController,它扩展了AppController

在我的AppController.php 文件中,我已经定义'index''view' 是公共操作。但是,由于某种原因,它在我的插件中不起作用。

有什么需要我监督的吗?当我以未登录用户(访客)身份访问www.example.com/issue_tracker/tickets 时,它告诉我需要登录。如果我以用户而非管理员身份登录,Auth 组件将不允许我进入并显示登录表单。

应该有办法让Auth 在插件中工作,对吧?

编辑

下面是AppController.phpsn-p,我在其中配置了身份验证:

public $components = array(
        'Auth' => array(
            'loginAction' => array('controller' => 'users', 'action' => 'login', 'plugin' => false),
            'loginRedirect' => array('plugin' => false, 'controller' => 'ervaringen', 'action' => 'add'),
            'logoutRedirect' => array('plugin' => false, 'controller' => 'ervaringen', 'action' => 'index'),
            'authorize' => array('controller'),
            'flash' => array(
                'element' => 'error',
                'key' => 'auth',
                'params' => array(
                    'heading' => 'Waarschuwing!')
            ),
            'authError' => 'Je moet inloggen om deze inhoud te bekijken.',
        ),
        'Session',
        'DebugKit.Toolbar'
    ); 

【问题讨论】:

  • 您的IssueTrackerAppController 文件中有 beforeFilter 函数吗?如果是这样,您必须在其中添加另一个 parent::beforeFilter(); 调用
  • 是的,有。忘了提,但是那个人也打电话给parent::beforeFilter();
  • 你能用 beforeFilter 覆盖组件设置吗?
  • 我不明白你的评论。是“试试这个”还是“你能做到”?

标签: cakephp authentication plugins cakephp-2.3


【解决方案1】:

谜团解开了。

重新扫描插件中的所有代码后,我注意到项目中的一位同事使用了$variable = $this->requestAction(link/here/with/id/etc);,这导致了控制器功能。 beforeFilter() 不允许该特定功能,导致Auth 系统出现“功能被拒绝”。

我在插件的beforeFilter() 中的$this->Auth->allow('function'); 中添加了这个特殊功能,现在它可以工作了。

【讨论】:

  • 这看起来像是不当使用 requestAction 并遭受(部分)后果的典型例子。
  • 是的,我将开始重写那段代码,以便将其放入适当的模型中。
猜你喜欢
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 2020-12-30
  • 2021-02-04
相关资源
最近更新 更多