Yii のリダイレクト メソッドは、CControler と CHttpRequest の両方で定義されています。CController のリダイレクトは、CHttpRequest のリダイレクト メソッドを呼び出します。私たちが通常呼んでいるのは、CControoler のリダイレクト メソッドです
framewok/web/CController での定義 リーリー
パラメータの説明:
@url: ブラウザがジャンプする URL リンクを指定します。 $url が配列の場合、配列の最初の要素はコントローラー/メソッド [コントローラー/アクション] で構成され、残りの部分は GET パラメーターとみなされます。 name と value のペアを指定し、createUrl メソッドを呼び出して URL を生成します。
文字列の場合は、framework/web/CHttpRequest.php のリダイレクト メソッドを直接呼び出します。
@terminate: リダイレクト呼び出し後に現在のアプリケーションを終了するかどうか。@statusCode: HTTPステータスコードを示します。デフォルトは302リダイレクトです
array_splice 関数について:
配列の一部を削除して他の値に置き換える 上記の array_splice($url,1) は、$url 配列の最初の要素を削除し、GET パラメーターの値を取得することを意味します。 リーリー
createUrl 関数について: この関数は、CController.php と CurlManager.php のリダイレクトなどの多くの場所でそれぞれ定義されています。最終的な定義は CurlManager.php にあります。
CController での createURL の定義は次のとおりです:
リーリー
ここからいくつかの状況を確認できます:
1. リダイレクトがパラメーターをとらず、$route が空の場合、現在のコントローラーの現在のメソッドにリダイレクトされます $route=$this->getId().'/'.$this->getAction( ) ->getId();
2. $route に '/' がない場合、例えば $this->render('index',array('post'=>$questions)); の場合、プログラムはコントローラーなしでメソッドを接続するだけです。現在のコントローラーのメソッド ID を自動的に取得します
3. ルートに「/」文字がありますが、最初の位置になく、現在のコントローラーがモジュール内にあるかどうかを確認します。たとえば $this->redirect(array('step/show') ,'id'=>1 )); この場合、createUrl でメソッドを呼び出す場合、プログラムはモジュールかどうかを自動的に判断します。モジュールのメインコントローラーに最初の文字「/」文字を追加できます。
そして、プログラムは最後に $route の前後の / 文字を削除します。
framework/web/CHttpRequest.php の定義
リーリー
CController のリダイレクトの $url パラメーターが配列でない場合、$url が '/' で始まらない場合、関数は直接呼び出されます。この状況では、モジュール内でリダイレクトが失敗します。そこでお勧めします CController.phpでリダイレクトメソッドを呼び出す際、パラメータとして
arrayが渡されます これから、リダイレクト メソッドが最終的に PHP ネイティブ ヘッダー関数を呼び出すことがわかります
Yii::app()->end(); は、php の exit() 関数を直接呼び出します。http://www.bkjia.com/PHPjc/976449.html