他のすべてのコントローラを拡張する抽象ベースコントローラを構築しようとしています。これまでのところ、私のようなものがあります:サブクラスを介して抽象クラスのプロパティにアクセスできません
Call to a member function set() on a non-object in C:\xampp\htdocs\program\core\controllers\admin.controller.php on line 44
私はメインコントローラ(すなわちUserControllerで)で$ユーザーと$ビューのプロパティを置く場合:
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();
}
}
}
を私が手の問題は、私はこのようなエラーが出ています、すべてうまく動作します。しかし、私はこれらのオブジェクトを一度(基本コントローラーで)一度設定し、すべてのコントローラーに$this->view = new View;
を追加する必要はありません。
固定:私のコンストラクタをオーバーライドして、抽象クラスでparent :: __ construct()を呼び出すことができないと考えました。
コンストラクタをここでは見られないようにオーバーライドしましたか?もしそうなら、parent :: __ construct()を呼び出すか? –
あなたのコードは私のテストケースで私のために働いています。 __constructorをオーバーライドしました。 –