我正在尝试为网站制作维护重定向页面,以便可以激活“维护/更新模式”,这将导致将每个页面请求重定向到“维护页面关闭”。我已将开关设置为使用 Configure::write() 编写的全局变量,并使用 Configure::read() 进行检查。
我遇到的问题是——当它处于离线模式时,如何重定向每个页面请求?我的第一个想法是 AppController 的 beforeFilter() 函数中的条件 $this->redirect(...) 。但这导致了“重定向循环”错误:
我的第二个想法是,也许(我是 CakePHP 的新手)这经常被调用,作为基类 Controller 的第一个过滤器,这个想法很愚蠢。我想我可以通过创建一个“MaintenanceFilter”来解决这个问题,该“MaintenanceFilter”检查相同变量的在线或离线状态以进行重定向。但是,CookBook 提到过滤器是 Cake 2.2 的新功能,而本网站使用 2.1。即使我给它优先级 1,过滤器似乎也不起作用。(在 app/Routing/Filter 中定义)。
App::uses('DispatcherFilter', 'Routing');
class MaintenanceFilter extends DispatcherFilter
{
public function beforeDispatch(CakeEvent $event)
{
if (strcmp(Configure::read('ServerStatus'), 'online') == 0)
{
$event->stopPropagation();
$dispatcher = new Dispatcher();
$dispatcher->dispatch(array('controller' => 'errors',
'action' => 'maintenance'));
}
}
}
然后我想也许我可以更一般地这样做,并使用 Router::connect('*', ...) 设置路由条件,将所有页面重定向到 /Errors/maintenance,条件服务器状态检查是:
Router::connect('*', array('controller' => 'Errors',
'action' => 'maintenance'));
我将它放在路由文件的顶部,以便首先处理它。正如您可能已经猜到的那样,没有任何页面被重定向到维护页面。
我在想我可以制作一个自定义异常处理程序并在服务器处于“离线模式”时引发异常,但是我将如何从处理程序的方法体内重定向到维护页面?
我必须遗漏一些关于 Cake 2.1 的特定内容,或者只是一般的 Cake/MVC。有人看到它可能是什么吗?