ZendFrameworkで強制的に404エラーにしてErrorController.phpに強制移動させる方法

ZendFrameworkは、コントローラーが無かったりアクションが無かったりした場合には、
自動でErrorController.phpを動かしてくれるが、
プログラム中で意図的に404などを出したい時がある。

例えばデータベースを検索してデータがヒットしなかったら、ページ無しとして404としたい場合。など。

そのような時は

http://blog.art-p.com/php/zendframework%E3%81%A7%E6%84%8F%E5%9B%B3%E7%9A%84%E3%81%AB%E3%82%A8%E3%83%A9%E3%83%BC%E5%87%A6%E7%90%86%E3%82%92%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E3%81%8D/

が参考になったので紹介。

自分が発生させたい場所で

throw new Exception('Not found',404);

みたいにして、後はErrorController.php内で

$errors = $this->_getParam('error_handler');
$exception = $errors->exception;
$code = $errors->exception->getCode();

switch( $errors->type)
{

みたいなところで、defaultのところで

//404コードがきたらアウトにする。
if( strcmp($code,'404')==0 )
{
$this->getResponse()->setRawHeader('HTTP/1.1 404 Not Found');
break;
}

にすればいいらしい。

参照サイトは $code == 404 にしてましたが、個人的に何となくstrcmpで比較。
なんでdefaultに書くのか?は参照先に書いてあるので、ぜひクリックを。



コメントをどうぞ