5

コントローラーを使用してページのカスタム uri ルーティングを行いますが、現在はうまく機能しています。

これは、PHPTAL をテンプレート エンジンとして使用するコントローラーの簡易バージョンです。

public function index()
{
    $this->tal->display('index');
}

public function view($url)
{       
    $this->loadView($url);
}   

private function loadView($url) 
{

   if (file_exists(ROOTPATH . 'webroot/' . $url . '/index.html')) 
   {
       $this->tal->display($url . '/index');
   } 
   else 
   {  
       show_404();
   }
}

問題

最近、ページ コントローラーにアクセスするたびに、次のエラーがログに表示されることに気付きました。

ERROR - 2013-02-06 10:58:23 --> 404 Page Not Found -->

ページが期待どおりに表示され、404ヘッダーがまったくなく、ネットワークパネルが404ステータスを表示しないため、これは奇妙だと思いました.

show_404()私は最終的に、メソッドで呼び出されているヘルパー メソッドにこれを絞り込みましたloadView()。その行を削除すると、エラーがログ ファイルに完全に表示されなくなります。

この §show_404()§ は、ビュー ファイルが見つからない場合にのみ実行する必要があります。その場合、404 エラー ページを表示する必要があります。ただし、メソッドが呼び出されるかどうかに関係なく、メソッドのロギング部分は、ページ コントローラーへのすべての呼び出しで実行されているようにloadView()見えます。

ブラウザーでビューにアクセスするindex()と、すべて正常に動作しているように見え、正しいビュー ファイルが読み込まれ、エラーはありません。ただし、loadView()メソッドから 404 エラー メッセージがログに記録されます。メソッドはメソッドloadView()から呼び出されてindex()いませんが、ログ ファイルにその出力が存在することは、メソッドが実行されていることを示しているようです。

4

1 に答える 1

6

のデフォルトの動作は、呼び出されたときにログ エントリshow_404を挿入することです。これを無効にするための 2 つ目のオプション パラメータがあるため、ログに記録せずに 404 ページを表示するだけの場合は、次のように呼び出します。

show_404('', false);

-->最初のパラメーターは、ログの の後に追加される文字列であるため、これも空のままにしておくことができます。

_loadView関数が呼び出される理由については、次のとおりです。

を含まない URL を使用している場合index.php(empty $config['index_page'])、Web サーバー サーバーが見つけられない (具体的な書き換えルールに依存する) すべての静的アセット (画像、js、css など) が php スクリプトに渡され、おそらくそこで 404 エラーを生成します。

于 2013-02-06T07:23:49.113 に答える