用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4257|回复: 6
收起左侧

[已解决] 如何终止CI框架的运行

[复制链接]
发表于 2010-3-15 22:36:46 | 显示全部楼层 |阅读模式
我现在遇到一个问题,大致是这样的,比如我写了一个函数专为用来检测登录,并且放在了我扩展的类里面
如下
PHP复制代码
function islogin(){$this->load->view("basic_tips");}
复制代码


但是我的其他函数会吊用这个,比如在welcome里面
PHP复制代码
 
class Welcome extends SDO_Controller {
 
        function Welcome()
        {
                parent::SDO_Controller();
                $this->data["currentPage"] = "home";
        }
       
        function index()
        {
                $this->islogin();
                $this->load->view('welcome_index',$this->data);
        }
}
 
复制代码


但是会显示2个界面,我想执行islogin后就输出islogin里面的模板,其他后面的不输出,我适用die()后没有任何内容了,所以不知道各位知道如何终止吗,排除适用if()
发表于 2010-3-15 22:53:33 | 显示全部楼层
PHP复制代码
 
$this->load->view("basic_tips");
exit();
 
复制代码


这个理论上不属于CI的范畴,是PHP的知识。load view只是解析变量,然后包含一个文件而已。

system/libraries/Loader.php加载视图的片断如下:

PHP复制代码
 
if ((bool) @ini_get('short_open_tag') === FALSE AND config_item('rewrite_short_tags') == TRUE)
{
        echo eval('?>'.preg_replace("/;*\s*\?>/", "; ?>", str_replace('<?=', '<?php echo ', file_get_contents($_ci_path))));
}
else
{
        include($_ci_path); //楼主看这里
}
复制代码
 楼主| 发表于 2010-3-16 11:15:25 | 显示全部楼层
非常荣幸能得到管理员的恢复,主要是当我适用exit();的时候页面就空白了
发表于 2010-3-16 19:33:01 | 显示全部楼层
回复 3# benzene

不客气。

另外,我在二楼的回答是错误的!应该用return,而不是exit。因为exit是退出并停止当前脚本的工作,而return只是中止当前函数的执行。

实际情况是,不应该在加载一个view之后直接退出,因为此时CI还没有完成它的最终工作——输出视图。视图的输出由output库负责,而这一动作是在视图加载之后完成的。这也就不难解释为什么出现空白页,因为数据在buffer里面还没有被送到浏览器呢。

当局者迷,旁观者清。多站在高一点的角度看待问题。
发表于 2011-3-18 17:01:25 | 显示全部楼层
刚好和我遇到的问题一样,手册中也并没有说明,我是自己做了一个叫 Auth 的 library ,加入了 autoload 里面,我在这个 Auth 的类里面检查用户身份,然后使用不同的 view 去显示,但是因为是 library ,不会阻止 controller 的调用,所以 controller 还是会去执行并且输出他自己的 view ,有没有办法可以在 library 里面就结束后面的 controller 的调用?
发表于 2011-3-18 17:10:33 | 显示全部楼层
也就是说我想在 autoload 的 library 里面就终止后面的 controller 的运行,直接输出内容,不要走后面的流程了,如何做到?设置变量在 controller 里面检查当然是可以做到的,但我的 Auth 需要每个页面之前都会运行,必须先验证用户身份再决定用户是否有权访问或者让用户离开。

如果我的做法不是通常做法,请指教一个这种模式的通常做法,据我了解 hook 也无法控制后续流程不要进行,目前我看到的手册中都没有流程控制相关的概念,最好能深入说明下,谢谢
发表于 2011-3-18 19:27:01 | 显示全部楼层
回复 6# sxpcrazy


    不修改 CI 源码,你的需求无法实现, CI 没有这个流程,你看看 CI 的流程图就知道了。

本版积分规则