私はちょうど今、Phalcon を使ってバタバタしていて、大きなプロジェクトを CodeIgniter から Phalcon や別のフレームワークに移植してから開発を続けることを考えているので、頭を悩ませようとしています。
ルーターを使用して 404 エラーを検出しようとしていますが、期待どおりに動作しません。index.php が定義されていない場合は、サイト インデックス コントローラーもフェッチする必要があるため、ルーター自体が機能$router->add("/"
しているようです。それをコメントアウトすると、home/ に移動すると 404 がスローされます。ただし、test などの存在しないコントローラー名を入力すると、「PhalconException: TestController ハンドラー クラスをロードできません」というエラーが表示されます。私の htaccess は Phalcon docs チュートリアルの通りです。
ブートストラップ (index.php) には、次のようなものがあります。
$di->set('router', function() {
require __DIR__ . '/../app/config/routes.php';
return $router;
});
そして、私のroutes.phpは次のようになります。
$router = new \Phalcon\Mvc\Router();
// default
$router->add("/", array(
'controller' => 'index',
'action' => 'index'
));
//Set 404 paths
$router->notFound(array(
"controller" => "group",
"action" => "index"
));
$router->handle();
return $router;
このサイトには、domain.com/group-name/ によって到達されるユーザーが送信したグループがあります。CI では、404 ルーティングを使用して、そのグループの検索をアクティブにするグループ コントローラーをロードしていました。見つかった場合はグループを表示し、見つからない場合は 404 ヘッダーを含む 404 ページをスローします。Phalcon でそれを行うためのより良い方法があるかもしれませんが、少なくとも私の notFound ルーティングが機能しない理由を知りたいです ;)
編集:これで何かが変わるかどうかはわかりませんが、すべてのメインコントローラーが拡張しているベースコントローラー「controllerBase」を使用しています。いくつかの変数と初期化関数、およびコントローラーから呼び出すことができる別の関数が含まれているだけです。これが notFound ルーティングに影響を与えるとは思わなかったでしょうが、とにかく言及した方がよいと思いました。