在很多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 ,这是一个额外的挑战。
在您的 Controller 文件夹中创建一个名为 shared_controller.php 的 Controller 。在其中定义一些共享方法,并确保它扩展了 AppController:
class SharedController extends AppController {
我的子 Controller 正在扩展 AppController。改为改为扩展 SharedController。我无法让共享 Controller 自动加载,所以我在上面添加了一个 App::import:
App::import('Controller', 'Shared'); class SubController extends SharedController {
组件和助手必须手动合并到它们的父变量中;否则子类将覆盖它们。在每个子 Controller 中定义一个 __construct 方法,并在组件、助手和其他任何东西上调用 array_merge。最后调用父构造函数。注意:这不能在 beforeFilter 中完成
function __construct(){ $this->components = array_merge($this->components,array('Mycomponent')); parent::__construct(); }
如果您调用 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/