Jadual Kandungan
Yii笔记---redirect重定向,yii---redirect
Rumah php教程 php手册 Yii笔记---redirect重定向,yii---redirect

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

Jun 13, 2016 am 09:08 AM
Ubah hala

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> }
Salin selepas log masuk

参数说明:

  @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>  ]] )
Salin selepas log masuk

关于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>     }
Salin selepas log masuk

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

  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>     }
Salin selepas log masuk

 

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

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

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

 

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah pengalihan nama domain php? Ringkasan beberapa kaedah pengalihan PHP Apakah pengalihan nama domain php? Ringkasan beberapa kaedah pengalihan PHP Mar 21, 2023 am 09:35 AM

Pengalihan nama domain PHP ialah teknologi rangkaian yang penting Ia adalah kaedah mengalihkan nama domain yang berbeza yang dilawati oleh pengguna ke nama domain utama yang sama. Ubah hala nama domain boleh menyelesaikan masalah seperti pengoptimuman SEO tapak web, promosi jenama dan akses pengguna, dan juga boleh menghalang penyalahgunaan nama domain berniat jahat. Dalam artikel ini, kami akan memperkenalkan kaedah dan prinsip khusus pengalihan nama domain PHP.

Fahami senario aplikasi biasa pengalihan halaman web dan fahami kod status HTTP 301 Fahami senario aplikasi biasa pengalihan halaman web dan fahami kod status HTTP 301 Feb 18, 2024 pm 08:41 PM

Kuasai maksud kod status HTTP 301: Senario aplikasi biasa pengalihan halaman web Dengan perkembangan pesat Internet, keperluan orang ramai untuk interaksi halaman web menjadi lebih tinggi dan lebih tinggi. Dalam bidang reka bentuk web, pengalihan halaman web adalah teknologi biasa dan penting, dilaksanakan melalui kod status HTTP 301. Artikel ini akan meneroka maksud kod status HTTP 301 dan senario aplikasi biasa dalam pengalihan halaman web. Kod status HTTP301 merujuk kepada ubah hala kekal (PermanentRedirect). Apabila pelayan menerima pelanggan

Tutorial ubah hala dalam PHP Tutorial ubah hala dalam PHP Sep 01, 2023 pm 05:53 PM

Ubah hala membolehkan anda mengubah hala penyemak imbas klien ke URL lain. Anda boleh menggunakannya semasa menukar domain, menukar struktur tapak web atau bertukar kepada HTTPS. Dalam artikel ini, saya akan menunjukkan kepada anda cara mengubah hala ke halaman lain menggunakan PHP. Saya akan menerangkan dengan tepat cara ubah hala PHP berfungsi dan menunjukkan kepada anda apa yang berlaku di sebalik tabir. Belajar PHP dengan Kursus Dalam Talian Percuma Jika anda ingin belajar PHP, lihat kursus dalam talian percuma Asas PHP kami! Asas PHP Jeremy McPeak 29 Oktober 2021 Bagaimanakah ubah hala asas berfungsi? Sebelum kita masuk ke butiran pengalihan PHP, mari kita lihat dengan pantas cara pengalihan HTTP sebenarnya berfungsi. Tengok gambar kat bawah ni. Mari kita fahami skrin di atas

Internet Explorer membuka Edge: Bagaimana untuk menghentikan pengalihan MS Edge Internet Explorer membuka Edge: Bagaimana untuk menghentikan pengalihan MS Edge Apr 14, 2023 pm 06:13 PM

Bukan rahsia lagi bahawa Internet Explorer telah lama tidak disukai, tetapi dengan ketibaan Windows 11, realiti muncul. Daripada kadangkala menggantikan IE pada masa hadapan, Edge kini menjadi penyemak imbas lalai dalam sistem pengendalian terkini Microsoft. Buat masa ini, anda masih boleh mendayakan Internet Explorer dalam Windows 11. Walau bagaimanapun, IE11 (versi terkini) sudah mempunyai tarikh persaraan rasmi, iaitu 15 Jun 2022, dan jam semakin berdetik. Dengan mengambil kira perkara ini, anda mungkin perasan bahawa Internet Explorer kadangkala membuka Edge, dan anda mungkin tidak menyukainya. Jadi mengapa ini berlaku? wujud

Ubah hala dalam PHP Ubah hala dalam PHP May 24, 2023 am 08:25 AM

Ubah hala ialah teknik yang sering digunakan dalam pembangunan web, yang membolehkan kami mengubah hala pengguna dari alamat URL semasa ke alamat URL lain. Dalam PHP, ubah hala dilaksanakan melalui fungsi header(). Fungsi header() boleh mengeluarkan maklumat pengepala HTTP, termasuk maklumat ubah hala. Kami boleh mengubah hala pengguna ke alamat URL lain dengan menggunakan fungsi header(), seperti yang ditunjukkan di bawah: header("Lokasi:http://www.exam

Mentafsir Kod Status HTTP 302: Penyelaman Mendalam ke Ubah Hala dan Lompatan Sementara Mentafsir Kod Status HTTP 302: Penyelaman Mendalam ke Ubah Hala dan Lompatan Sementara Dec 26, 2023 am 08:09 AM

Kod status HTTP ialah sejenis maklumat status yang dikembalikan oleh pelayan web kepada penyemak imbas Ia dinyatakan dalam bentuk tiga digit. Antaranya, kod status 302 mewakili ubah hala, juga dikenali sebagai lompat sementara. Artikel ini akan menganalisis secara mendalam kod status HTTP 302 dan membincangkan prinsip dan aplikasinya. 1. Gambaran Keseluruhan Pengalihan semula ialah konsep penting dalam protokol HTTP. Apabila penyemak imbas menghantar permintaan kepada pelayan, pelayan boleh mengembalikan kod status ubah hala untuk memberitahu penyemak imbas bahawa permintaan semasa perlu diubah hala, iaitu, alamat sumber yang diminta dipindahkan ke lokasi lain.

Contoh demonstrasi dan paparan kesan pengalihan nama domain PHP Contoh demonstrasi dan paparan kesan pengalihan nama domain PHP Mar 28, 2024 am 08:21 AM

Pengalihan nama domain PHP adalah salah satu teknologi yang biasa digunakan dalam pembangunan laman web Melalui pengalihan nama domain, pengguna secara automatik boleh melompat ke URL lain apabila melawati satu URL, dengan itu mencapai panduan trafik laman web, promosi jenama dan tujuan lain. Berikut akan menggunakan contoh khusus untuk menunjukkan kaedah pelaksanaan pengalihan nama domain PHP dan menunjukkan kesannya. Buat fail PHP ringkas bernama redirect.php dengan kod berikut:

Gabungan fungsi ubah hala Vue Router dan pengawal laluan Gabungan fungsi ubah hala Vue Router dan pengawal laluan Sep 15, 2023 pm 12:48 PM

VueRouter ialah pengurus penghalaan rasmi untuk Vue.js. Ia membolehkan kami membina aplikasi halaman tunggal (SPA) dengan mentakrifkan laluan, mencipta laluan bersarang dan menambah pengawal laluan. Dalam VueRouter, gabungan fungsi ubah hala dan pengawal laluan boleh mencapai kawalan penghalaan dan navigasi pengguna yang lebih fleksibel. Fungsi ubah hala membolehkan kami mengubah hala pengguna ke laluan tertentu yang lain apabila mereka mengakses satu laluan tertentu. Ini berguna apabila mengendalikan ralat input pengguna atau menyatukan lompatan penghalaan. Sebagai contoh, apabila

See all articles