如何终止CI框架的运行
我现在遇到一个问题,大致是这样的,比如我写了一个函数专为用来检测登录,并且放在了我扩展的类里面如下
function islogin(){$this->load->view("basic_tips");}
但是我的其他函数会吊用这个,比如在welcome里面
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()
$this->load->view("basic_tips");
exit();
这个理论上不属于CI的范畴,是PHP的知识。load view只是解析变量,然后包含一个文件而已。
system/libraries/Loader.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); //楼主看这里
}
非常荣幸能得到管理员的恢复,主要是当我适用exit();的时候页面就空白了 回复 3# benzene
不客气。
另外,我在二楼的回答是错误的!应该用return,而不是exit。因为exit是退出并停止当前脚本的工作,而return只是中止当前函数的执行。
实际情况是,不应该在加载一个view之后直接退出,因为此时CI还没有完成它的最终工作——输出视图。视图的输出由output库负责,而这一动作是在视图加载之后完成的。这也就不难解释为什么出现空白页,因为数据在buffer里面还没有被送到浏览器呢。
当局者迷,旁观者清。多站在高一点的角度看待问题。 刚好和我遇到的问题一样,手册中也并没有说明,我是自己做了一个叫 Auth 的 library ,加入了 autoload 里面,我在这个 Auth 的类里面检查用户身份,然后使用不同的 view 去显示,但是因为是 library ,不会阻止 controller 的调用,所以 controller 还是会去执行并且输出他自己的 view ,有没有办法可以在 library 里面就结束后面的 controller 的调用? 也就是说我想在 autoload 的 library 里面就终止后面的 controller 的运行,直接输出内容,不要走后面的流程了,如何做到?设置变量在 controller 里面检查当然是可以做到的,但我的 Auth 需要每个页面之前都会运行,必须先验证用户身份再决定用户是否有权访问或者让用户离开。
如果我的做法不是通常做法,请指教一个这种模式的通常做法,据我了解 hook 也无法控制后续流程不要进行,目前我看到的手册中都没有流程控制相关的概念,最好能深入说明下,谢谢 回复 6# sxpcrazy
不修改 CI 源码,你的需求无法实现, CI 没有这个流程,你看看 CI 的流程图就知道了。
页:
[1]