2012-04-28 9 views
0

他のすべてのコントローラを拡張する抽象ベースコントローラを構築しようとしています。これまでのところ、私のようなものがあります:サブクラスを介して抽象クラスのプロパティにアクセスできません

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()を呼び出すことができないと考えました。

+0

コンストラクタをここでは見られないようにオーバーライドしましたか?もしそうなら、parent :: __ construct()を呼び出すか? –

+0

あなたのコードは私のテストケースで私のために働いています。 __constructorをオーバーライドしました。 –

答えて

0

あなたがしようとしているのはうまくいくはずです。 UserControllerにコンストラクタを隠蔽していないことを確認してください。コンストラクタがある場合は、親コンストラクタを呼び出す必要があります。

それ以外の場合は、$this->viewがリセットされているかどうかを確認するデバッグを行います。

0

あなたのコードは私に適しています。 UserController__construct()メソッドをオーバーライドしているか、またはフィールドをViewオブジェクト以外で上書きしています。

このフォームに記載されている内容は機能します。