php - cake php AppController 和继承

标签 php cakephp acl

在很多cakephp中的Acl组件的教程中 我得到了在 AppController 或所有其他继承 AppController 的 Controller 中添加组件的指令......

但问题是

var $components=array('Auth',Acl);

当我在 AppConroller 中使用以上行时,我无法使用 Auth 或 Acl 组件... 但是当我在所有子类中使用相同的代码时,它工作正常............

会有什么问题

这是我的应用程序 Controller

<?php
class AppController extends Controller {

     var $helpers = array('Html', 'Form', 'Session','CssMenu');
     var $components = array('Auth');

     function beforeFilter() {
        //Configure AuthComponent
        $this->Auth->authorize = 'actions';
        $this->Auth->authError = "Sorry, you are lacking access.";
        $this->Auth->userModel = 'Login';
}

}
?>

用户 Controller 代码

<?php
class userssController extends AppController{
    var $name="Logins";
    //var $components = array('Auth');
    var $layout='login';

    function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('*');
        $this->Auth->loginRedirect = array('controller' => 'homes', 'action' => 'index');
    }
}
?>

当我评论第 4 行时,这将是一个错误 取消评论它工作正常 提前致谢

我们将不胜感激。

最佳答案

我设法做到了这一点。我有一对共享一些方法的 Controller ,但应用程序中的其他 Controller 没有(也不能)使用这些方法,因为某些数据必须存在于模型中。此外,不应允许在 URL 中调用包含共享方法的 Controller ,这是一个额外的挑战。

  1. 在您的 Controller 文件夹中创建一个名为 shared_controller.php 的 Controller 。在其中定义一些共享方法,并确保它扩展了 AppController:

    class SharedController extends AppController {
    
  2. 我的子 Controller 正在扩展 AppController。改为改为扩展 SharedController。我无法让共享 Controller 自动加载,所以我在上面添加了一个 App::import:

    App::import('Controller', 'Shared');
    class SubController extends SharedController {
    
  3. 组件和助手必须手动合并到它们的父变量中;否则子类将覆盖它们。在每个子 Controller 中定义一个 __construct 方法,并在组件、助手和其他任何东西上调用 array_merge。最后调用父构造函数。注意:这不能在 beforeFilter 中完成

    function __construct(){
        $this->components = array_merge($this->components,array('Mycomponent'));
        parent::__construct();
    }
    
  4. 如果您调用 http://example.com/shared/method ,您可能会收到一条错误消息,提示您缺少数据库表或缺少 View 。我不需要直接调用 Shared 中的任何方法,所以我定义了一个只重定向到主页的路由:

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

希望对某人有所帮助!

关于php - cake php AppController 和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2635074/

相关文章:

symfony - Php (SF2) 页面未使用新代码更新

cakephp - Sublime Text 3(3103)停止突出显示.ctp文件

python - 使用 Posix 1e 在 Python 中检索默认 ACL

linux - 设置ACL权限后用户无法访问文件夹

php - 无法通过 HTTPS 获取 file_get_contents 或 cURL

javascript - 如何从谷歌地图链接中提取坐标(PHP 或 Javascript)

php - 具有 3 个不同用户表的私有(private)消息系统

security - 删除/更新安全身份 ACL Symfony2

php - Laravel : count(): Parameter must be an array or an object that implements Countable

cakephp - CakePHP 请求的生命周期是什么?