2011-07-14 21 views
8

私はサイレックス使って何かをしようとしてるの提供(symfonyのルーティングコンポーネントを使用しています - その答えは、同様のSymfonyに適用してもよい)Silex/Symfonyにおけるルーティング。デフォルトルート

私はルーティングを提供するために、レガシーアプリケーションにサイレックスを追加していのが、ファイルをロードするための既存のアプリケーションのデフォルト実装を尊重する必要があります(ファイルシステムからURLを指定するだけです)。

編集:明確化のため 一連のブートストラッピング呼び出しが行われた後に、既存のファイルが親テンプレート内のインクルードとしてファイルシステムからロードされます。

私が見つけたのは、従来のページと一致するように定義されたルートがない場合、Silexは例外をスローしています。

レガシーページを処理するためのデフォルト(フォールバック)メカニズムを提供する方法が本当に必要ですが、私のパターンはURL全体(1つのフラグメントだけではない)に一致する必要があります。

これは可能ですか?

// Include Silex for routing  
require_once(CLASS_PATH . 'Silex/silex.phar'); 

// Init Silex 
$app = new Silex\Application(); 

    // route for new code 
    // matches for new restful interface (like /category/add/mynewcategory) 

    $app->match('/category/{action}/{name}/', function($action, $name){ 
     //do RESTFUL things 
    }); 

    // route for legacy code (If I leave this out then Silex 
    // throws an exception beacuse it hasn't matched any routes 

    $app->match('{match_the_entire_url_including_slashes}', function($match_the_entire_url_including_slashes){ 
     //do legacy stuff 
    }); 

    $app->run(); 

これは一般的な使用例である必要があります。私は、レガシーコードと一緒にRESTfulなインターフェースを持っている方法を提供しようとしている(負荷/myfolder/mysubfolder/my_php_script.php)

+1

を答えを見つけ、URLはすでにapacheのハンドル上の既存Fi回線を書き換えるべきではありませんあなたのindex.phpファイルにURLをマッピングせずに奇妙に聞こえる... – mpm

+0

@camusいいえ、アプリケーションのブートストラップ(セキュリティ、データベース接続など)のために、フロントコントローラを通してアプリケーションのすべての要求をルーティングする必要があったためです。編集:私は質問に明確化を追加しました – calumbrodie

答えて

4

は、あなたがそのようなもので、エラー処理を使用することができます。

use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpKernel\Exception\HttpException; 
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 

$app->error(function (\Exception $e) use ($app) { 
if ($e instanceof NotFoundHttpException) { 
     return new Response('The requested page could not be found. '.$app['request']->getRequestUri(), 404); 
    } 
    $code = ($e instanceof HttpException) ? $e->getStatusCode() : 500; 
    return new Response('We are sorry, but something went terribly wrong.', $code); 
}); 
+0

こんにちはチャールズ、問題は、エラーが処理されていないということではなく、最初に投げられていたということでした。私は私の問題の解決策を見つけました。あなたのご意見ありがとうございます。 – calumbrodie

関連する問題