Yii笔记---redirect重定向,yii---redirect
Yii笔记---redirect重定向,yii---redirect
Yii的redirect方法在CControler与CHttpRequest之中都有被定义,CController中的redirect调用了CHttpRequest中的redirect方法。我们平常调用的是CControoler中的redirect方法
在framewok/web/CController中的定义
<span>1</span> <span>public</span> <span>function</span> redirect(<span>$url</span>,<span>$terminate</span>=<span>true</span>,<span>$statusCode</span>=302<span>) </span><span>2</span> <span>{ </span><span>3</span> <span>if</span>(<span>is_array</span>(<span>$url</span><span>)) </span><span>4</span> <span> { </span><span>5</span> <span>$route</span>=<span>isset</span>(<span>$url</span>[0]) ? <span>$url</span>[0] : ''<span>; </span><span>6</span> <span>$url</span>=<span>$this</span>->createUrl(<span>$route</span>,<span>array_splice</span>(<span>$url</span>,1<span>)); </span><span>7</span> <span> } </span><span>8</span> Yii::app()->getRequest()->redirect(<span>$url</span>,<span>$terminate</span>,<span>$statusCode</span><span>); </span><span>9</span> }
参数说明:
@url:指定浏览器跳转到的url链接,如果$url为数组,则数组的第一个元素是由控制器/方法【controller/action】组成,其余的部分被视为GET参数,name-value对并调用了createUrl方法生成url。如果是字符串 直接调用的framework/web/CHttpRequest.php中的redirect方法。
@terminate:调用redirect之后是否终止当前的应用。
@statusCode:表示HTTP的状态码,默认是302重定向
关于array_splice函数:把数组中的一部分去掉并用其它值取代,上面的array_splice($url,1)表示的是将$url数组的第一个元素去掉,获取到GET参数的值
<span>array</span> <span>array_splice</span> ( <span>array</span> &<span>$input</span> , int <span>$offset</span> [, int <span>$length</span> = 0 [, <span>mixed</span> <span>$replacement</span> ]] )
关于createUrl函数:这个函数和redirect一样在多处有定义,分别在CController.php和CurlManager.php之中。最终的定义在CurlManager.php之中。
下面是CController中的createURL的定义:
<span> 1</span> <span>public</span> <span>function</span> createUrl(<span>$route</span>,<span>$params</span>=<span>array</span>(),<span>$ampersand</span>='&'<span>) </span><span> 2</span> <span> { </span><span> 3</span> <span>if</span>(<span>$route</span>===''<span>) </span><span> 4</span> <span>$route</span>=<span>$this</span>->getId().'/'.<span>$this</span>->getAction()-><span>getId(); </span><span> 5</span> <span>elseif</span>(<span>strpos</span>(<span>$route</span>,'/')===<span>false</span><span>) </span><span> 6</span> <span>$route</span>=<span>$this</span>->getId().'/'.<span>$route</span><span>; </span><span> 7</span> <span>if</span>(<span>$route</span>[0]!=='/' && (<span>$module</span>=<span>$this</span>->getModule())!==<span>null</span><span>) </span><span> 8</span> <span>$route</span>=<span>$module</span>->getId().'/'.<span>$route</span><span>; </span><span> 9</span> <span>return</span> Yii::app()->createUrl(<span>trim</span>(<span>$route</span>,'/'),<span>$params</span>,<span>$ampersand</span><span>); </span><span>10</span> }
从这里可以看出来几种情况:
1、如果redirect没有带参数则$route为空的情况,会被定向到 当前控制器的当前方法 $route=$this->getId().'/'.$this->getAction()->getId();
2、如果$route中不带‘/’,例如 $this->render('index',array('post'=>$questions));只接了方法而没有控制器,程序会自动获取到当前的控制器方法ID
3、route中有‘/’字符,但是不在首位置,并且查找当前控制器是否位于模块之中;例如 $this->redirect(array('step/show','id'=>1)); 这种情况程序会自动判断是否是模块,我们在调用createUrl的时候就可以不用跟上模块的名称,如果在模块中调用主控制器中的方法时 我们可以在首字母处加上'/'字符。并且程序在最后都会去掉$route前后的/字符。
在framework/web/CHttpRequest.php中的定义
<span>1</span> <span>public</span> <span>function</span> redirect(<span>$url</span>,<span>$terminate</span>=<span>true</span>,<span>$statusCode</span>=302<span>) </span><span>2</span> <span> { </span><span>3</span> <span>if</span>(<span>strpos</span>(<span>$url</span>,'/')===0 && <span>strpos</span>(<span>$url</span>,'//')!==0<span>) </span><span>4</span> <span>$url</span>=<span>$this</span>->getHostInfo().<span>$url</span><span>; </span><span>5</span> <span>header</span>('Location: '.<span>$url</span>, <span>true</span>, <span>$statusCode</span><span>); </span><span>6</span> <span>if</span>(<span>$terminate</span><span>) </span><span>7</span> Yii::app()-><span>end</span><span>(); </span><span>8</span> }
如果CController之中的redirect的$url参数不是数组,则会直接调用该函数,如果$url不是以'/'开头则会直接跳转,这种情况导致在模块中重定向失败,所以建议在调用CController.php之中redirect方法时都是用数组作为参数进行传递
从这可以看出redirect方法最终还是调用的php原生态的header函数
Yii::app()->end(); 直接调用的是php的exit()函数。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP ドメイン名リダイレクトは重要なネットワーク テクノロジであり、ユーザーがアクセスした異なるドメイン名を同じメイン ドメイン名にリダイレクトする方法です。ドメイン名のリダイレクトは、Web サイトの SEO の最適化、ブランドのプロモーション、ユーザー アクセスなどの問題を解決し、悪意のあるドメイン名の悪用を防ぐこともできます。この記事では、PHPドメイン名リダイレクトの具体的な方法と原理を紹介します。

HTTP 301 ステータス コードの意味を理解する: Web ページ リダイレクトの一般的なアプリケーション シナリオ インターネットの急速な発展に伴い、Web ページの操作に対する人々の要求はますます高くなっています。 Web デザインの分野では、Web ページのリダイレクトは一般的かつ重要なテクノロジであり、HTTP 301 ステータス コードによって実装されます。この記事では、HTTP 301 ステータス コードの意味と、Web ページ リダイレクトにおける一般的なアプリケーション シナリオについて説明します。 HTTP301 ステータス コードは、永続的なリダイレクト (PermanentRedirect) を指します。サーバーがクライアントのメッセージを受信すると、

Internet Explorer が長い間人気がなくなってきたことは周知の事実ですが、Windows 11 の登場により現実が始まりました。 Edge は、将来的に IE を置き換えるのではなく、現在 Microsoft の最新オペレーティング システムのデフォルトのブラウザーとなっています。現時点では、引き続き Windows 11 で Internet Explorer を有効にすることができます。ただし、IE11 (最新バージョン) の正式な廃止日は 2022 年 6 月 15 日であり、時間は刻々と過ぎています。これを念頭に置くと、Internet Explorer が Edge を開くことがありますが、それが気に入らないことに気づいたかもしれません。では、なぜこのようなことが起こっているのでしょうか?存在する

リダイレクトを使用すると、クライアント ブラウザを別の URL にリダイレクトできます。ドメインの切り替え、Web サイトの構造の変更、または HTTPS への切り替え時に使用できます。この記事では、PHPを使用して別のページにリダイレクトする方法を紹介します。 PHP リダイレクトがどのように機能するかを正確に説明し、舞台裏で何が起こっているかを示します。無料のオンライン コースで PHP を学習する PHP を学習したい場合は、PHP の基礎の無料オンライン コースをチェックしてください。 PHP の基礎 Jeremy McPeak 2021 年 10 月 29 日 基本的なリダイレクトはどのように機能しますか? PHP リダイレクトの詳細に入る前に、HTTP リダイレクトが実際にどのように機能するかを簡単に見てみましょう。下の写真を見てください。上の画面を理解しましょう

リダイレクトは Web 開発でよく使用される手法で、ユーザーを現在の URL アドレスから別の URL アドレスにリダイレクトできます。 PHP では、リダイレクトは header() 関数を通じて実装されます。 header() 関数は、リダイレクト情報を含む HTTP ヘッダー情報を出力できます。以下に示すように、header() 関数を使用してユーザーを別の URL アドレスにリダイレクトできます。 header("Location:http://www.exam

PHP ドメイン名リダイレクトは、Web サイト開発でよく使用される技術の 1 つで、ユーザーが 1 つの URL にアクセスすると、自動的に別の URL にジャンプすることで、Web サイトのトラフィック誘導やブランド プロモーションなどを実現します。以下では、具体的な例を使用して、PHP ドメイン名リダイレクトの実装方法とその効果を示します。次のコードを使用して、redirect.php という名前の単純な PHP ファイルを作成します。

HTTPステータスコードとは、Webサーバーからブラウザに返されるステータス情報の一種で、3桁の数字で表されます。このうち、ステータス コード 302 はリダイレクト (一時ジャンプとも呼ばれます) を表します。この記事では、HTTP ステータス コード 302 を詳しく分析し、その原理と応用について説明します。 1. 概要 リダイレクトは、HTTP プロトコルにおける重要な概念です。ブラウザがサーバーにリクエストを送信すると、サーバーはリダイレクト ステータス コードを返し、現在のリクエストをリダイレクトする必要があること、つまり、リクエストされたリソース アドレスが別の場所に転送されることをブラウザに通知します。

VueRouter は、Vue.js の公式ルーティング マネージャーです。これにより、ルートの定義、ネストされたルートの作成、ルート ガードの追加によってシングル ページ アプリケーション (SPA) を構築できます。 VueRouterでは、リダイレクション機能とルートガードを組み合わせることで、より柔軟なルーティング制御とユーザーナビゲーションを実現します。リダイレクト機能を使用すると、ユーザーが 1 つの指定されたパスにアクセスしたときに、別の指定されたパスにユーザーをリダイレクトできます。これは、ユーザー入力エラーを処理したり、配線ジャンプを統合したりするときに役立ちます。たとえば、次のようなとき
