4

ページをロードするときに常に呼び出される CakePHP の関数を使用する方法を知りたいですか?

この例でより多くの精度:

メインページがあります: index.ctp 別のページがあります: profil.ctp

私が望むのは、profil.ctp にアクセスしようとすると、ログに記録されていない場合、自動的に index.ctp ページにリダイレクトされることです。

私がすでに行ったこと:

ユーザーコントローラー:

function index() {
    if (!empty($this->data))
        $this->Session->write(array('User' => array('connected' => true)));
}

プロファイルコントローラー:

function index() {
  if (!$this->Session->read('connected'))
    $this->redirect(array('controller' => 'users', 'action' => 'index'));
}

問題は、このコードを各ページ、およびすべてのコントローラーの各機能に追加したくないことです。

何か案は ?

よろしく。

4

2 に答える 2

10

コードをAppController.phpsbeforeFilter()に入れます

他のコントローラーでを使用する場合は、beforeFilter必ずparent他のコードの前に呼び出してください。

public function beforeFilter() {
    parent::beforeFilter();
    // your other code
}

各コントローラーで、beforeFilter()が呼び出され、AppController(親)がトリガーされますbeforeFilter()

于 2012-12-11T17:13:54.180 に答える
3

コードをAppController beforeFilter()

AppController:

public function beforeFilter()
{
  //call your code here
}

beforeFilter()特定のコントローラーでアクションが呼び出されるたびに実行する必要がある特定のコードを実行する必要がある場合にのみ、コントローラーで関数をオーバーライドします。

いくつかの例:

ユーザーコントローラー:

UsersController extends AppController
{
  public function beforeFilter()
  {
    parent::beforeFilter();

    //add some code here that must be run before each UsersController's action
  }

  ...

}

ログコントローラー:

LogsController のアクションを使用する前に特定のコードを呼び出す必要がない場合は、beforeFilter()関数を追加しないでください。オブジェクトの継承により、AppControllerbeforeFilter()が使用されます。

LogsController extends AppController
{
  //no need for a beforeFilter() here ! 
  //AppController's beforeFilter() will be used automatically

  ...

}
于 2012-12-11T18:14:50.620 に答える