关于Codeigniter上的全局变量

时间:2015-05-19 02:01:12

标签: javascript php codeigniter oop

我意识到OOP编程中的全局变量(你可以在整个模型 - 视图 - 控制器事物中访问)听起来很懒惰,但我对Codeigniter来说相对较新并且目前正在使用它仅作为原型。 我打算制定结构合理的OOP,但现在我还没有足够的时间这么做。 所以,对于那些得到" butthurt"的人来说,我感到非常抱歉。看到这个愚蠢的问题被问了好几千次。

无论如何,我的想法是总是显示$ err_msg的警告,如果这个$ err_msg变量被填充,例如$err_msg = "You don't have the permission to access this page!"。然后我在我的控制器上有一个模板视图,如下所示:

function view_template($current_view, $data){
    $this->load->view('header');
    $this->load->view($current_view, $data);
}
function home(){
    $this->view_template('Home','');
}

现在我要在header.php上显示警告:

//keep in mind that I do change this variable according to how I use the global variable
//so if I were to use $GLOBALS['err_msg'], these $err_msg will change to $GLOBALS['err_msg']
if($err_msg != ""){
    echo '<script language="javascript">';
    echo 'alert("'.$err_msg.'")';
    echo '</script>';
    $err_msg = "";
}

我一直在讨论我在constants.php上设置的全局变量,例如:

$GLOBALS['err_msg'] = "";

define('err_msg','');

然而,这只有在我直接调用控制器上的函数来查看页面时才有效,例如:

$GLOBALS['err_msg'] = "You don't have the permission to access this page!";
$this->home();

但不是

$GLOBALS['err_msg'] = "You don't have the permission to access this page!";
redirect('SomeController/home', 'refresh');

如果是提交表单页面,不使用重定向将会很危险,因为如果刷新该页面,它将再次提交。更不用说页面URL会很难看。

我也在控制器上尝试了一些使用全局变量或普通变量的方法,并将其传递给标题,但如果我使用重定向,那也是不行的,因为重定向会直接重新调用控制器(抱歉,我可以& #39;我真的解释了这一点,但我确实理解为什么这不起作用。

基本上我的控制器会检查尝试访问此页面的用户是否满足访问此页面的所有条件。如果他没有通过,他将重定向到另一个有警报的页面。这也有时适用于提交表单页面,因此如果用户确实提交但仍未满足条件,他仍将被重定向。

那么你们认为最好的方法是什么?请随意批评我的代码并抱歉我的英文不好。

1 个答案:

答案 0 :(得分:0)

创建自己的core_controller,然后在自己的控制器中扩展类控制器,然后在那里创建全局变量。如果你熟悉jQuery&#34; ajax&#34;然后你应该使用的是。为了更安全的目的,它可以让您更快地响应网站。

例如:

class Mycontroller extends CI_Controller
{

}

class Mycontroller extends mycorecontroller {

}

您应该将核心控制器放在application-&gt;核心中。