2017-11-15 13 views
1

私はmvcプロジェクトを楽しみながら仕事をしています。 かなりのURLはすでに動作していますが、404ページに訪問者を送信するためのコードでは良い方法が見つからないため、探しているページが存在しない場合に備えてください。pretty urlを使用して404ページにリダイレクト

class Route 
{ 
     private $_uri = array(); 
     private $_method = array(); 

    /* 
    * Builds a collection of internal URL's to look for 
    * @param type $uri 
    */ 
    public function add($uri, $method = null) 
    { 
     $this->_uri[] = '/' . trim($uri, '/'); 

     if($method != null){ 
      $this->_method[] = $method; 
     } 
    } 

    public function submit() 
    { 

     $uriGetParam = isset($_GET['uri']) ? '/' . $_GET['uri'] : '/'; 

     foreach($this->_uri as $key => $value){ 
      if(preg_match("#^$value$#",$uriGetParam)){ 
       if(is_string($this->_method[$key])){ 
        $useMethod = $this->_method[$key]; 
        new $useMethod(); 
       } 
       else{ 
        call_user_func($this->_method[$key]); 
       } 
      } 
     } 
    } 

} 

答えて

0

私は徹底的にあなたのコードを解析しませんでした(私はできなかった、わからない何をして追加している例ルート/方法である - >追加)が、解決策は、私には、単純なようだ:

public function submit() 
{ 

    $uriGetParam = isset($_GET['uri']) ? '/' . $_GET['uri'] : '/'; 
    $routeFound = false; 
    foreach($this->_uri as $key => $value){ 
     if(preg_match("#^$value$#",$uriGetParam)){ 
      if(is_string($this->_method[$key])){ 
       $routeFound = true; 
       $useMethod = $this->_method[$key]; 
       new $useMethod(); 
      } 
      else{ 
       $routeFound = true; 
       call_user_func($this->_method[$key]); 
      } 
     } 
    } 
    if(!$routeFound){ 
     http_response_code(404); 
     echo 'ooooh, not found'; 
     //or: 
     include('404.php'); 
     die(); 
    } 
} 

ps 'http_response_code(404);' あなたが始まるのコードを置くことができます:

https://secure.php.net/manual/en/function.http-response-code.php

編集:http_response_codeは、組み込み関数であります別の関数に渡して呼び出してください。

+0

このメソッドは基本的にコントローラの名前で、新しい$ useMethodはページをレンダリングする特定のコントローラを呼び出します。 404ページに組み込まれたphp関数を使用する必要がありますか、それとも関数なしでもできますか? –

+0

@JornReedああ、遅れて申し訳ありません。いいえ、あなたはその機能を必要としません、あなたは単にヘッダー機能を使用することができますが、マニュアルの最初のコメントを参照してください:http://php.net/manual/en/function.header.php#92305 – konrados

+0

ありがとう!私のこのプロジェクトについてあなたのスカイプを得ることができますか? –

関連する問題