1

そこで、PHP MVCフレームワークを作成し、適切なControllerクラスをインスタンス化して、引数を渡す定義済みメソッドを呼び出すことができるDispatcherクラスを用意しました。

Dispatcher内で、このコントローラーが存在するかどうかを確認し、メソッドが存在する場合、コントローラーまたはメソッドが存在しない場合はどうすればよいですか?

現時点では、404を出力するHTTPオブジェクトを返すだけです-ページが見つかりません。しかし、アプリケーション内からこのメッセージをカスタマイズする方法はありません。ディスパッチャーを編集せずに404メッセージをカスタマイズする方法をユーザーに提供したいと思います。

エラーが発生したときにインスタンス化され、Error404.htmlビューファイルをロードするエラーコントローラーを常に使用するための良い方法はありますか?したがって、ユーザーはこのビューファイルをアプリケーションの設計に合わせてカスタマイズできます。

これを達成する他の方法はありますか?そして、ディスパッチャからエラーを返し、そのMVCで作業している「ユーザー」または開発者が404やその他のメッセージを簡単にカスタマイズできるようにするための最良の方法は何でしょうか。

ありがとう!

4

2 に答える 2

2

私はあなたのAPIを知らないので、推測します。ディスパッチャが実際に使用されるときに、アプリケーションにブートストラップステージがあると仮定します。何かのようなもの:

$dispatcher->dispatch( $request );

次に、存在しないコントローラーまたはそれらのコントローラー内のメソッドにアクセスしようとする要求を処理するために、次のようなことを行うことができます。

try
{
    $dispatcher->dispatch( $request );
}
catch ( ClassNotFoundException $e )
{
    $dispatcher->dispatch( new Request('/error/404/controller'));
}
catch ( MethodNotFoundException $e )
{
    $dispatcher->dispatch( new Request('/error/404/method'));
}

ClassNotFoundExceptionクラスローダーによってスローできますが、ディスパッチャー自体が常にをスローする責任がありMethodNotFoundExceptionます。

method_exists()ディスパッチャで実行する前に、でコントローラに特定のメソッドがあるかどうかを確認できます。

PS私の謙虚な意見では、Dispatcher coneptは、WebアプリケーションのMVCに触発されたパターンではなく、イベント駆動型アーキテクチャに適しています。

于 2012-11-11T13:05:54.537 に答える
1

エラーコード(数値または文字列)を引数として受け取るエラーコントローラがあることをお勧めします。これにより、さまざまな種類のエラーを適切に処理し、必要に応じてスタックトレースを提供できます。この作業を500エラーに利用することもできます。

私の答えは、コントローラーがさまざまなアクションを返すことができ、各アクションが独自のテンプレートを持つことができるという前提に基づいています。

symfonyも同様の方法でエラーを処理しているようです。エラーごとに個別のモジュールとアクションがあります。

sfContext::getInstance()->getController()->forward(sfConfig::get('sf_error_404_m‌​odule'), sfConfig::get('sf_error_404_action'));
于 2012-11-11T12:53:56.967 に答える