【Phalcon】404ページの実装

multi-module での 存在しないルーティング (404)は
dispatcher でエラーになるので、
Router に関係なく処理が止まってしまう。


以下のようにエラーを eventManager で補足して
任意の Controller/Action に飛ばしてあげる。

<?php

$di['dispatcher'] = function() {

	$eventsManager = new \Phalcon\Events\Manager();
	$eventsManager->attach('dispatch:beforeException', function($event, $dispatcher, $exception) {
	    switch ($exception->getCode()) {
	        case \Phalcon\Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
	        case \Phalcon\Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
				//任意の飛び先を指定
	            $dispatcher->forward(array(
	                'namespace' => 'Dir_project\Admin\Controllers',
	                'module'=>'admin',
	                'controller'=>'index',
	                'action'=>'show404'
	            ));
	            return false;
	    }
	});
	
	//Dispatcherの基本動作を設定
	$dispatcher = new \Phalcon\Mvc\Dispatcher();
	$dispatcher->setEventsManager($eventsManager);
	$dispatcher->setDefaultNamespace('Modules\Admin\Controllers');
	
	return $dispatcher;
};

multi-module のルーティング設定については以下を見るといいかも。
http://d.hatena.ne.jp/pospome/20140630/1404130343