thinkphp forward redirect 区别

news/2024/7/7 19:39:37 标签: redirect, module, action, url, class, api
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">

 

好久没有写thinkphp的东西了,因为最近不忙的时候就很懒,不懒的时候就很忙,之前看的教程也不记得多少了。

 

忽然间感觉只看教程貌似是不能解决啥问题的,还是得就着API来看源码,否则永远都是知其然而不知其所以然。

 

刚正在看Action.class.php,里面有两个函数都是执行跳转用的,一个是forward 一个是class="tags" href="/tags/REDIRECT.html" title=redirect>redirect。

 

那么二者到底有何区别呢?看了一下API,看了一下源码又翻了一下论坛,整理如下。

 

有不同意见的欢迎拍砖。

 

首先看代码注释,二者的描述是不相同的。

 

forward:执行某个Action操作(隐含跳转) 支持指定模块和延时执行

 

class="tags" href="/tags/REDIRECT.html" title=redirect>redirect:Action跳转(URL重定向) 支持指定模块和延时跳转

 

其次看代码组织,各抽取其中一部分,二者的行为是不同的。

 

forward:

 

        if(is_array($class="tags" href="/tags/ACTION.html" title=action>action)) {

            //通过类似 array(&$class="tags" href="/tags/MODULE.html" title=module>module,$class="tags" href="/tags/ACTION.html" title=action>action)的方式调用

            call_user_func($class="tags" href="/tags/ACTION.html" title=action>action);

        }else {

            if(empty($class="tags" href="/tags/MODULE.html" title=module>module)) {

                $class="tags" href="/tags/MODULE.html" title=module>module = defined('C_MODULE_NAME')?C_MODULE_NAME:MODULE_NAME;

            }

            if( MODULE_NAME!= $class="tags" href="/tags/MODULE.html" title=module>module) {

                $class =     A($class="tags" href="/tags/MODULE.html" title=module>module,$app);

                call_user_func(array(&$class,$class="tags" href="/tags/ACTION.html" title=action>action));

            }else {

                // 执行当前模块操作

                $this->{$class="tags" href="/tags/ACTION.html" title=action>action}();

            }

        }

class="tags" href="/tags/REDIRECT.html" title=redirect>redirect:

 

        if(empty($class="tags" href="/tags/MODULE.html" title=module>module)) {

            $class="tags" href="/tags/MODULE.html" title=module>module = defined('C_MODULE_NAME')?C_MODULE_NAME:MODULE_NAME;

        }

        $class="tags" href="/tags/URL.html" title=url>url    =   class="tags" href="/tags/URL.html" title=url>url($class="tags" href="/tags/ACTION.html" title=action>action,$class="tags" href="/tags/MODULE.html" title=module>module,$route,$app,$params);

        class="tags" href="/tags/REDIRECT.html" title=redirect>redirect($class="tags" href="/tags/URL.html" title=url>url,$delay,$msg);

forward是通过框架内部的ACTION和MODULE的调用,实现页面显示的是另一个你想要的内容。

 

class="tags" href="/tags/REDIRECT.html" title=redirect>redirect则是通过改变URL地址栏,直接跳转过去的。

 

最后,上论坛搜索,发现老大给出了一些指点,其说明如下:

 

可以把forward看成是隐含跳转,rediret是直接跳转。

 

class="tags" href="/tags/REDIRECT.html" title=redirect>redirect是会改变class="tags" href="/tags/URL.html" title=url>url ,跳过去执行另外的操作

 

forward只是隐含执行一个操作方法,class="tags" href="/tags/URL.html" title=url>url本身并不会跳转(这个其实不是绝对的,因为隐含执行的操作可能会有一个重定向的过程)

 

呵,这就更说明了我的观点了。貌似我的解释是对的。

 

以后用到的时候可以尝试一下,看二者具体的区别。

 

另外,搜了一下,有位兄弟已经给出了forward的用法,我就直接抄过来好了

 

原来 forward 是 Action基类的一个操作 Action::forward();

 

有4个参数, (1=目标操作, 2=目标模块,3=目标项目,4=是否结束,5=转前等待秒数)

 

实例:

 

比如 现有2个项目 myApp1 和 myApp2

 

目标: 从 myApp1项目的 Index模块index操作 (IndexAction::index()) 跳转到 myApp2的IndexAction::index()

 

在 myApp1 IndexAction::index() (即这个方法里)

 

{里面 $this->forward(‘index’,'Index’,'myApp2′,false, 5); }

 

注意 第2个参数的Index 的 i 是大写(表示模块)

 


http://www.niftyadmin.cn/n/1790694.html

相关文章

逆天程序员,6 天面试了 6 家硅谷顶级公司并拿下 6 份 Offer !

本文作者在去年的 6 天时间里,参加了 LinkedIn、Yelp、Apple、亚马逊、Facebook 和 Google 的面试,并拿下了 6 份 Offer。 以下为译文: 写在前面 原本我只是考虑换公司的可能性。我不想为了寻找完美的工作而飞来飞去,所以我知道我…

【视频开发】【计算机视觉】doppia编译之三:编译安装opencv库

这里我介绍2种方法 (1)利用别人写好的脚本编译,相对来说省力一点 上Github下载别人写好的脚本文件,网址 https://github.com/jayrambhia/Install-OpenCV 解压缩后,进入Ubuntu/2.4,有不同版本的OpenCV脚本文件。这里我们选择open…

ThinkPHP框架研究之一 基本函数 M和D的区别

最近在研究 TP 受益匪浅... 今天就从 基本函数 M和D开始 高手莫见笑..有不对的地方 望一起讨论 两个有共同点..都是实例化对象用的.. 但是 在使用时 两者却不一样...为什么?? 先看看代码 函数M function M($name , $class Model){static $_model array();if (!isset(…

ThinkPhp框架研究之二 魔术函数 __call

在看 TP框架的帮助文档的时候 看到一个很有意思的功能---字段的动态查询 官方是这么描述的 ThinkPHP提供了数据癿劢态查询方法,可以简化你癿查询代码,例如: $User->where(name"ThinkPHP")->find(); 可以简化为: …

canvas中的拖拽、缩放、旋转 (下) —— 代码实现

写在前面 本文首发于公众号:符合预期的CoyPandemo体验地址及代码在这里:请用手机或浏览器模拟手机访问 上一篇文章介绍了canvas中的拖拽、缩放、旋转中涉及到的数学知识。可以点击下面的链接查看。 canvas中的拖拽、缩放、旋转 (上) —— 数学知识准备。…

2017-06-28项目进展所思

这是我的第四篇博客~ 此刻回想起来这一天,感觉收获寥寥,同时感觉项目推进似乎加速度减小了,还好加速度仍为正。 其实回过头来想想,不管项目进展快还是慢,最重要的还是自己究竟有多少收获和成长。 朝最好的方…

PHP 控制电脑重启 关机

今天公司的任务.. 把全国大部分幼儿园抓来... 于是乎就写了个爬虫.... ...一下午了,马上要下班......数据还没有爬完.. 正愁...这可咋办... 一不小心在GOOGLE搜到了...PHP居然可以控制电脑关机重启....注销也有不过我没测试成功... 强 实在是强.... 不多说...贴代码 <?…

Nginx服务系列——静态资源web服务

传输 sendfile on | off;默认off(http\server\location\if in location) tcp_nopush on | off;默认off(http\server\location)sendfile开启的情况下&#xff0c;提高网络包的传输效率 tcp_nodelay on | off;默认on(http\server\location)keepalive连接下&#xff0c;提高网络传…