コントローラに initialize()メソッド が存在すればアクションの前に、finalize()メソッド が存在すればアクションの後に実行されます。つまりアクションの前処理・後処理をここで行うことができます。
class Index_Controller_MyController extends Sabel_Controller_Page
{
public function initialize()
{
// このコントローラ内のアクションの実行前に実行される
}
...
}
initialize()メソッド内でレスポンスオブジェクトの状態を 4xx や 5xx などの失敗系のステータスに変更した場合アクションの実行はスキップされます。なお、initialize()メソッド内でリダイレクトした場合も同様に、アクションの実行はスキップされます。
class Index_Controller_MyController extends Sabel_Controller_Page
{
public function initialize()
{
$this->response->getStatus()->setCode(Sabel_Response::FORBIDDEN);
}
public function myAction()
{
// 実行されない
}
}
finalize()メソッドはレスポンスの状態に関わらず常に呼び出されるため、それを調べる必要があるかもしれません。
class Index_Controller_MyController extends Sabel_Controller_Page
{
...
public function finalize()
{
// リダイレクトされていれば何もしない
if ($this->response->isRedirected()) return;
// 失敗系のステータスになってたら何もしない
if ($this->response->isFailure()) return;
// 後処理コード
...
}
}