強引にaction名がマルチバイトなURLにアクセス⇒500エラー
routing.ymlはデフォルトのままで、
http://hostname/mymodule/%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92
とかに無理やりアクセスすると変なエラーがでます。
No suitable nodes are available to serve your request.(500エラー)
とか
Fatal error: Maximum function nesting level of '100' reached, aborting! in /usr/share/php/symfony/debug/sfWebDebug.class.php on line 89
とか・・・
調べてみると、action名がマルチバイトという異常系のときに、action_name が空にされた状態のままaction実行まで流れてきてて、sfActions->execute() が再帰的に実行されている現象が確認できました。
500エラーでもいいような気がするのですが、該当するactionが無いということでの404にしたかったので、filterをつくって404を出力するようにしました。
<?php /** * action名が変な場合404にするfilter * * @package yoshihi6 * @subpackage contents-lib * @author yoshihi6 * @version SVN: $Id: $ */ class validateActionNameFilter extends sfFilter { public function execute( $filter_chain ) { // get the context $context = $this->getContext(); // get the current action information $moduleName = $context->getModuleName(); $actionName = $context->getActionName(); if( $actionName === '' ){ throw new sfError404Exception(); }else{ $filter_chain->execute(); } } }
クラス命名があまりよろしくないかも・・・考えておきます。