我正在尝试构建一个扩展所有其他控制器的抽象基本控制器。到目前为止,我有类似的东西:
abstract class BaseController {
protected $view;
protected $user;
public function __construct() {
$this->view = new View; //So a view is accessible to subclasses via $this->view->set();
$this->user = new User; //So I can check $this->user->hasPermission('is_admin');
}
abstract function index();
}
class UserController extends BaseController {
public function index() {}
public function login() {
if($this->user->isLoggedin()) {
redirect to my account
}
else {
$this->view->set('page_title', "User Login");
$this->view->set('sidebar', $sidebar); //contains sidebar HTML
$this->view->set('content', $content); //build main page HTML
$this->view->render();
}
}
}
我得到的问题是我得到这样的错误:
Call to a member function set() on a non-object in C:\xampp\htdocs\program\core\controllers\admin.controller.php on line 44
如果我将$ user和$ views属性放在主控制器(即UserController)中,一切正常。但我只想设置一次这些对象(在基本控制器中)而不必在我的所有控制器中添加$this->view = new View;
。
FIXED:我覆盖了我的构造函数,我认为你不能在抽象类上调用parent :: __ construct()。
答案 0 :(得分:0)
你要做的事情应该有效。确保您没有在UserController
中掩盖构造函数。 (即,如果它有构造函数,则需要调用其父构造函数。)
否则,请进行一些调试以查看重置$this->view
的位置。
答案 1 :(得分:0)
您的代码适合我。您要么覆盖__construct()
中的UserController
方法,要么使用view
对象以外的其他字段覆盖View
字段。
您在此表单中所拥有的内容是可行的。