CodeIgniter:从模型中更新MY_Controller中的公共变量

时间:2013-12-04 18:07:12

标签: php codeigniter this codeigniter-2

我正在使用 CodeIgniter 开展项目。我使用自定义MY_Controller扩展了CI的基本Controller类。 MY_Controller具有身份验证标志变量$auth = FALSE。在需要身份验证的页面上,我调用auth_model->runAuth()函数来运行检查,如果所有检查都通过,则此标志应更新为TRUE。出于某种原因,我无法直接从带有$auth的auth_model更新MY_Controller中的$this->auth = TRUE变量,但我必须先将检查结果传递回页面控制器,然后更新{{1} MY_Controller中的变量。任何想法如何直接从模型更新MY_Controller中的$auth标志而不通过控制器?非常感谢你提前!

1 个答案:

答案 0 :(得分:1)

您最好的选择是通过方法调用直接分配标志,如

$this->auth = $this->auth_model->runAuth();

在MY_Controller类中!方法runAuth()不需要进行大的改动:

而不是调用$auth = TRUEFALSE,只需返回true或false,如下所示:

public function runAuth()
{
    // do stuff
    return true; // or false depending on success.
}

希望有所帮助。否则你需要以某种方式引用MY_Controller对象。例如:

$this->auth_model->runAuth($this);

现在在您的方法中:

public function runAuth(MY_Controller $myctrl)
{
    // do stuff
    $myctrl->auth = true; // or false

}

另一种选择是使用静态字段:

class MY_Controller extends Controller
{
    public static $auth = false;
    // the other stuff
}

现在你可以在没有对象引用的情况下更新它:

public function runAuth()
{
    // do stuff
    MY_Controller::$auth = true;
}

在您的模型中,您可以像这样访问它:

if (static::$auth) echo "Boo Yeah!";