您好我正在使用继承的控制器。这些是我的控制者:
-baseAdminController:
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class _BaseAdminController extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library('session');
$calledFunction= $this->router->fetch_method();
if ($calledFunction!= 'loginView' && $calledFunction!= 'doLogin') {
$this->checkSession();
}
}
public function checkSession() {
if ($this->session->userdata('loggedIn') == false) {
$this->load->view('admin/loginView');
}
}
}
我的派生管理控制器:
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class AdminController extends _BaseAdminController {
public function indexView() {
$this->load->view('admin/indexView');
}
}
当我要登录时,CodeIgniter向我展示了admin / loginView和admin / indexView。因为我在构建我的派生控制器时检查会话状态。如何阻止加载第二个视图?
提前感谢..
答案 0 :(得分:4)
要回答您的问题,您可以在 checkSession 方法中完成以下操作:
public function checkSession() {
if ($this->session->userdata('loggedIn') == false) {
echo $this->load->view('admin/loginView', array(), TRUE);
exit;
}
}
说明:如果将第三个参数传递为TRUE,它将返回该文件的内容。请阅读ellislab.com了解详情。
答案 1 :(得分:3)
我希望这与你的问题有关:
我最近想让一堆控制器扩展父控制器类(MY_Acl_Controller),检查当前登录用户是否应该访问每个方法(使用自行开发的ACL库)。检查将在MY_Acl_Controller的构造函数中启动,因此它将在每个请求上运行。
我想将Output类的输出设置为加载视图的结果,然后显示视图并退出,但由于此过程未在路由控制器方法中执行,因此我不能只调用$ this-&gt; load-&gt; view('errors / access_denied')然后从构造函数返回...然后CI将继续执行控制器代码。
所以我创建了一个MY_Output类,扩展了CI_Output,并在其中添加了一个公共函数display_with_exit():
public function display_with_exit()
{
$this->_display($this->final_output);
exit;
}
然后,在MY_Acl_Controller的构造函数中:
...
if(!$user_deserves_access)
{
$this->load->view('errors/access_denied');
$this->output->display_with_exit();
}
这可能对某人有用吗?
这种方法的优点是Output类的_display()函数可以根据任何正常响应发送您喜欢的所有HTTP头。
答案 2 :(得分:0)
避免exit;
/ function exit;
或die;
将终止执行,这是仅调试代码的更好做法。
尝试如下。
public function index(){
if($xx) return TRUE;
}