Inhaltsverzeichnis
Yii笔记---redirect重定向,yii---redirect
Heim php教程 php手册 Yii笔记---redirect重定向,yii---redirect

Yii笔记---redirect重定向,yii---redirect

Jun 13, 2016 am 09:08 AM
重定向

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> }
Nach dem Login kopieren

参数说明:

  @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>  ]] )
Nach dem Login kopieren

关于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>     }
Nach dem Login kopieren

从这里可以看出来几种情况:

  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>     }
Nach dem Login kopieren

 

如果CController之中的redirect的$url参数不是数组,则会直接调用该函数,如果$url不是以'/'开头则会直接跳转,这种情况导致在模块中重定向失败,所以建议在调用CController.php之中redirect方法时都是用数组作为参数进行传递

从这可以看出redirect方法最终还是调用的php原生态的header函数

Yii::app()->end(); 直接调用的是php的exit()函数。

 

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist die Umleitung von PHP-Domainnamen? Zusammenfassung verschiedener Methoden der PHP-Umleitung Was ist die Umleitung von PHP-Domainnamen? Zusammenfassung verschiedener Methoden der PHP-Umleitung Mar 21, 2023 am 09:35 AM

Die Umleitung von PHP-Domänennamen ist eine wichtige Netzwerktechnologie. Dabei handelt es sich um eine Methode zur Umleitung verschiedener von Benutzern besuchter Domänennamen auf denselben Hauptdomänennamen. Die Umleitung von Domainnamen kann Probleme wie Website-SEO-Optimierung, Markenwerbung und Benutzerzugriff lösen und auch den Missbrauch bösartiger Domainnamen verhindern. In diesem Artikel stellen wir die spezifischen Methoden und Prinzipien der PHP-Domänennamenumleitung vor.

Verstehen Sie gängige Anwendungsszenarien der Webseitenumleitung und verstehen Sie den HTTP-301-Statuscode Verstehen Sie gängige Anwendungsszenarien der Webseitenumleitung und verstehen Sie den HTTP-301-Statuscode Feb 18, 2024 pm 08:41 PM

Verstehen Sie die Bedeutung des HTTP 301-Statuscodes: Häufige Anwendungsszenarien der Webseitenumleitung. Mit der rasanten Entwicklung des Internets werden die Anforderungen der Menschen an die Webseiteninteraktion immer höher. Im Bereich Webdesign ist die Webseitenumleitung eine gängige und wichtige Technologie, die über den HTTP-301-Statuscode implementiert wird. In diesem Artikel werden die Bedeutung des HTTP 301-Statuscodes und häufige Anwendungsszenarien bei der Webseitenumleitung untersucht. Der HTTP-Statuscode 301 bezieht sich auf eine permanente Weiterleitung (PermanentRedirect). Wenn der Server die des Clients empfängt

Internet Explorer öffnet Edge: So stoppen Sie die MS Edge-Umleitung Internet Explorer öffnet Edge: So stoppen Sie die MS Edge-Umleitung Apr 14, 2023 pm 06:13 PM

Es ist kein Geheimnis, dass der Internet Explorer schon lange in Ungnade gefallen ist, aber mit der Einführung von Windows 11 kommt die Realität. Anstatt in Zukunft manchmal den IE zu ersetzen, ist Edge jetzt der Standardbrowser im neuesten Betriebssystem von Microsoft. Vorerst können Sie den Internet Explorer noch in Windows 11 aktivieren. Allerdings hat IE11 (die neueste Version) bereits ein offizielles Ruhestandsdatum, nämlich den 15. Juni 2022, und die Uhr tickt. Vor diesem Hintergrund ist Ihnen vielleicht aufgefallen, dass Internet Explorer manchmal Edge öffnet, und es gefällt Ihnen möglicherweise nicht. Warum passiert das also? existieren

Redirect-Tutorial in PHP Redirect-Tutorial in PHP Sep 01, 2023 pm 05:53 PM

Mit Weiterleitungen können Sie Client-Browser auf andere URLs umleiten. Sie können es verwenden, wenn Sie die Domain wechseln, die Website-Struktur ändern oder auf HTTPS umsteigen. In diesem Artikel zeige ich Ihnen, wie Sie mit PHP auf eine andere Seite umleiten. Ich erkläre Ihnen genau, wie PHP-Weiterleitungen funktionieren und zeige Ihnen, was sich hinter den Kulissen abspielt. Lernen Sie PHP mit kostenlosen Online-Kursen Wenn Sie PHP lernen möchten, schauen Sie sich unseren kostenlosen Online-Kurs PHP Basics an! PHP-Grundlagen Jeremy McPeak 29. Oktober 2021 Wie funktionieren grundlegende Weiterleitungen? Bevor wir auf die Details der PHP-Umleitung eingehen, werfen wir einen kurzen Blick darauf, wie die HTTP-Umleitung tatsächlich funktioniert. Schauen Sie sich das Bild unten an. Lassen Sie uns den obigen Bildschirm verstehen

Weiterleitung in PHP Weiterleitung in PHP May 24, 2023 am 08:25 AM

Redirect ist eine in der Webentwicklung häufig verwendete Technik, die es uns ermöglicht, Benutzer von der aktuellen URL-Adresse zu einer anderen URL-Adresse umzuleiten. In PHP wird die Umleitung über die Funktion header() implementiert. Die Funktion header() kann HTTP-Header-Informationen ausgeben, einschließlich Umleitungsinformationen. Mit der Funktion header() können wir den Benutzer zu einer anderen URL-Adresse umleiten, wie unten gezeigt: header("Location:http://www.exam

Beispieldemonstration und Effektanzeige für die Umleitung von PHP-Domänennamen Beispieldemonstration und Effektanzeige für die Umleitung von PHP-Domänennamen Mar 28, 2024 am 08:21 AM

Die Umleitung von PHP-Domänennamen ist eine der am häufigsten verwendeten Technologien bei der Website-Entwicklung. Durch die Umleitung von Domainnamen können Benutzer beim Besuch einer URL automatisch zu einer anderen URL springen und so den Website-Verkehr steuern, Markenwerbung betreiben und andere Zwecke erfüllen. Im Folgenden wird anhand eines konkreten Beispiels die Implementierungsmethode der PHP-Domänennamenumleitung demonstriert und die Auswirkung gezeigt. Erstellen Sie eine einfache PHP-Datei mit dem Namen „redirect.php“ mit dem folgenden Code:

Interpretieren des HTTP-Statuscodes 302: Ein tiefer Einblick in Weiterleitungen und temporäre Sprünge Interpretieren des HTTP-Statuscodes 302: Ein tiefer Einblick in Weiterleitungen und temporäre Sprünge Dec 26, 2023 am 08:09 AM

Der HTTP-Statuscode ist eine Art Statusinformation, die vom Webserver an den Browser zurückgegeben wird. Er wird in Form von drei Ziffern ausgedrückt. Unter diesen stellt der Statuscode 302 eine Umleitung dar, die auch als temporärer Sprung bezeichnet wird. In diesem Artikel wird der HTTP-Statuscode 302 eingehend analysiert und seine Prinzipien und Anwendungen erläutert. 1. Übersicht Umleitung ist ein wichtiges Konzept im HTTP-Protokoll. Wenn der Browser eine Anfrage an den Server sendet, gibt der Server möglicherweise einen Umleitungsstatuscode zurück, um den Browser darüber zu informieren, dass die aktuelle Anfrage umgeleitet werden muss, dh die angeforderte Ressourcenadresse wird an einen anderen Ort übertragen.

Kombination aus Vue Router-Umleitungsfunktion und Route Guard Kombination aus Vue Router-Umleitungsfunktion und Route Guard Sep 15, 2023 pm 12:48 PM

VueRouter ist der offizielle Routing-Manager für Vue.js. Es ermöglicht uns, Single-Page-Anwendungen (SPA) zu erstellen, indem wir Routen definieren, verschachtelte Routen erstellen und Routenwächter hinzufügen. In VueRouter kann durch die Kombination aus Umleitungsfunktion und Routenschutz eine flexiblere Routingsteuerung und Benutzernavigation erreicht werden. Mit der Umleitungsfunktion können wir Benutzer auf einen anderen angegebenen Pfad umleiten, wenn sie auf einen angegebenen Pfad zugreifen. Dies ist nützlich, wenn Benutzereingabefehler behandelt oder Routing-Sprünge vereinheitlicht werden. Zum Beispiel wann

See all articles