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()函数。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP domain name redirection is an important network technology. It is a method of redirecting different domain names visited by users to the same main domain name. Domain name redirection can solve problems such as website SEO optimization, brand promotion, and user access, and can also prevent the abuse of malicious domain names. In this article, we will introduce the specific methods and principles of PHP domain name redirection.

Redirects allow you to redirect client browsers to different URLs. You can use it when switching domains, changing website structure, or switching to HTTPS. In this article, I will show you how to redirect to another page using PHP. I'll explain exactly how PHP redirects work and show you what's happening behind the scenes. Learn PHP with Free Online Courses If you want to learn PHP, check out our PHP Basics free online course! PHP Basics Jeremy McPeak October 29, 2021 How do basic redirects work? Before we get into the details of PHP redirection, let’s take a quick look at how HTTP redirection actually works. Take a look at the image below. Let us understand the above screen

Understand the meaning of HTTP 301 status code: common application scenarios of web page redirection. With the rapid development of the Internet, people's requirements for web page interaction are becoming higher and higher. In the field of web design, web page redirection is a common and important technology, implemented through the HTTP 301 status code. This article will explore the meaning of HTTP 301 status code and common application scenarios in web page redirection. HTTP301 status code refers to permanent redirect (PermanentRedirect). When the server receives the client's

It's no secret that Internet Explorer has fallen out of favor for a long time, but with the arrival of Windows 11, reality sets in. Rather than sometimes replacing IE in the future, Edge is now the default browser in Microsoft's latest operating system. For now, you can still enable Internet Explorer in Windows 11. However, IE11 (the latest version) already has an official retirement date, which is June 15, 2022, and the clock is ticking. With this in mind, you may have noticed that Internet Explorer sometimes opens Edge, and you may not like it. So why is this happening? exist

Redirect is a technique often used in web development, which allows us to redirect users from the current URL address to another URL address. In PHP, redirection is implemented through the header() function. The header() function can output HTTP header information, including redirection information. We can redirect the user to another URL address by using the header() function, as shown below: header("Location:http://www.exam

PHP domain name redirection is one of the commonly used technologies in website development. Through domain name redirection, users can automatically jump to another URL when visiting one URL, thereby achieving website traffic guidance, brand promotion and other purposes. The following will use a specific example to demonstrate the implementation method of PHP domain name redirection and show the effect. Create a simple PHP file named redirect.php with the following code:

HTTP status code is a kind of status information returned by the web server to the browser. It is expressed in the form of three digits. Among them, status code 302 represents redirection, also known as temporary jump. This article will deeply analyze HTTP status code 302 and discuss its principles and applications. 1. Overview Redirection is an important concept in the HTTP protocol. When the browser sends a request to the server, the server may return a redirection status code to notify the browser that the current request needs to be redirected, that is, the requested resource address is transferred to another location.

VueRouter is the official routing manager for Vue.js. It allows us to build single page applications (SPA) by defining routes, creating nested routes, and adding route guards. In VueRouter, the combination of redirection function and route guard can achieve more flexible routing control and user navigation. The redirection function allows us to redirect users to another specified path when they access one specified path. This is useful when handling user input errors or unifying routing jumps. For example, when
