タイトル募集中3.0

しがないITソルジャーの雑記。

ErrorController

とりあえずやり方はわかった.
でも,Viewについての理解が中途半端なのでうまく表示できない.
出来たらまとめる.

とりあえず

Zend_Controller_Plugin_ErrorHandlerの項を参考に,一番簡単な記述の↓を使います.

<?
//index.php
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Controller/Plugin/ErrorHandler.php';

$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Zend_Controller_Plugin_ErrorHandler());

Zend_Controller_Front::run('./application/controllers');
?>

MVC での例外にある,__call(マジックメソッド?)を使ってもいいだけど,まだ理解してないのでパス(また今度勉強します).

ErrorControllerはサンプルを参考に

<?
require_once 'Zend/Controller/Action.php';

class ErrorController extends Zend_Controller_Action
{        
    public function indexAction() {
        
    }
    
    public function errorAction()
    {
        $this->_helper->viewRenderer->setNoRender();
        $errors = $this->_getParam('error_handler');
        
        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                // 404 エラー -- コントローラあるいはアクションが見つかりません
                $this->getResponse()->setRawHeader('HTTP/1.1 404 Not Found');
                
                $content = "not found.";
                break;
            default:
                // アプリケーションのエラー
                $content = "error.";
                break;
        }
        // 前回の内容を消去します
        $this->getResponse()->clearBody();
        $this->getResponse()->setBody($content);
    }
}
?>

こんな感じに.わざわざviewのファイル作るほど内容がないので(1行しかない),レスポンスオブジェクトを使って出力してやります.
自動レンダリングをONにしてるとindex.phtmlやerror.phtmlを表示してしまうので「$this->_helper->viewRenderer->setNoRender();」を追加して自動レンダリングをOFFにします(これでこのアクションでだけOFFになる).

とりあずこれで.詳しくは追々勉強しよう.