如何解决CakePHP-为站点创建脱机/在线功能
|| =======================================编辑========= ========================== 根据查尔斯的建议,我基于Charles代码使用以下代码完成了离线/在线功能:<?php
Class AppController extends Controller{
// prevents unauthorized access
public $components = array(\'Auth\');
// the name of the model storing site_offline boolean
public $uses = array(\'Configuration\');
// callback invoked before every controller action
public function beforeFilter() {
// returns your site_offline status assuming 0 is offline
if ($this->Configuration->get_site_status() == 1) {
$this->Auth->allow(\'*\');
}else {
if(($this->Configuration->get_site_status() == 0) and (!$this->Auth->user() == null)){
// I set it up like this for now to allow access to any authenticated user,//but later will change it to only allow admins access thru a login form
$this->Auth->allow(\'*\');
}else{
//If site is offline and user is not authenticated,sent them to
// the a screen using the OFFLINE layout and provide a screen for login.
$this->layout = \'offline\';
$this->setFlash(\'Maintenance Mode. Check back shortly.\');
$this->Auth->deny(\'*\');
}
}
}
}
?>
然后,我使用jQuery隐藏了我的登录表单。管理员单击该消息以显示登录表单。这是为了防止任何登录试用。
===========================结束编辑==================== ======================
我想知道在CakePHP中创建“网站离线/在线”功能的最佳方法是什么。基本上,我希望允许管理员关闭是否已注册的每个人对该网站的访问。离线页面应具有登录访问权限,只有管理员可以登录。
我的想法是创建某种仪表板控制器,一旦管理员登录,他/她将被重定向到该仪表板,从那里他可以访问其他控制器操作(admin_edit等)。此信息中心和所有管理员操作(admin_delete等)均应使用管理员布局。
这是一个好方法吗?对于离线/在线功能,我是否应该创建一个带有site_offline字段的设置表,该字段可以打开或关闭?在app_controller中的什么位置,在允许或不允许访问该网站之前,应使用什么代码进行检查?
非常感谢你的帮助,
解决方法
如果您打算将site_offline布尔值保存在数据库表中,则应该可以通过AppController和Auth组件中的回调轻松实现此目的。
<?php
AppController extends Object {
// prevents unauthorized access
public $components = array(\'Auth\');
// the name of the model storing site_offline boolean
public $uses = array(\'NameOfModel\');
// callback invoked before every controller action
public function beforeFilter() {
// returns your site_offline status assuming 0 is offline
if ($this->NameOfModel->get_status() === 0) {
$this->Auth->deny(\'*\');
} else {
$this->Auth->allow(\'*\');
}
}
}
我一直很喜欢DashboardsController用于管理功能的想法。这实际上是我使用的类的确切名称,并且是相同的基本思想。
, 首先在core.config中添加一个配置
/*
* This is the site maintenance
* The built in defaults are:
*
* - \'1\' - Site works
* - \'0\' - site down for maintenance.
*/
Configure::write(\'Site.status\',1);
在AppController中,您将在beforeRender函数中对其进行检查
if (Configure::read(\'Site.status\') == 0) {
$this->layout = \'maintenance\';
$this->set(\'title_for_layout\',__(\'Site_down_for_maintenance_title\'));
} else {
// do something
}
我在这里从维护中加载单独的布局,以便让我添加所需的任何布局
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。