我在app_controllers.php
文件中设置以下代码,以便在网站设置为OFFLINE(site_status = 0)时控制对网站的访问。
function beforeFilter(){
// Site Offline = 0 , Site Online = 1
if($this->Configuration->get_site_status() == 1){
// Allow access to the site to all users and perform all required
// beforeFilter code
}else{
...
// If site is OFFLINE but User is logged in allow access.
// Later I will need to change it to only allow admin access if logged in as I am still developing
// Everyone else will be denied access even if they are able to authenticate
if(!$this->Auth->user() == null){
$this->layout = 'default';
$this->Auth->allow('*');
}else{
$this->layout = 'offline';
$this->Auth->deny('*');
}
...
}
}
当请求的地址如下所示时,一切都很有效:
http://www.mydomain.com/articles
但是,当我有以下内容时,它无法正常工作
http://www.mydomain.com/admin/articles
它会阻止正确访问网站,但无法使用$this->layout = 'offline'
。它默认返回default
布局。
我需要做些什么来解决这个问题。
谢谢!
答案 0 :(得分:0)
嗯,首先看起来不合适的是:
(!$this->Auth->user() == null)
这看起来非常错误,可能会导致您的问题。我建议将其更改为:
(!is_null($this->Auth->user())
或
($this->Auth->user() !== NULL)
<强>编辑强>
First, check out the PHP logical operators。您正在向NOT
的返回值附加$this->Auth->user()
语句。因此,在用户登录后,您基本上会询问false
是否等于null
,当然这不是,也绝不会。{/ p>
Second, check out the PHP comparison operators。您不想检查$this->Auth->user()
的值是否等于值null
,您想要检查数据类型是否$this->Auth->user()的>等于类型 null
。简而言之,null
is a data type, not a value。如果您只需要在if语句中使用“=”,那么您可能希望使用相同的===
检查或相同的不检查!==
。
答案 1 :(得分:0)
您的if
条件看起来很奇怪。他们是:
If site is offline and user logged in
use default layout
otherwise
use offline layout and require authentication on all pages
即。当网站在线或用户未登录时,您正在使用离线布局。您确定这是您想要的吗?