我正在尝试弄清楚如何在Zend Framework中设置一个暂停/“维护时”页面,以便在我升级数据库或其他东西时不希望任何人使用该网站。我希望有一个静态HTML页面,并将所有流量重定向到该页面。
我宁愿不使用.htaccess,也希望通过bootstrap文件来实现。
有什么想法吗?
感谢。
答案 0 :(得分:2)
我通过创建一个插件来完成此操作,该插件每次请求页面时都会检查请求的有效性。
在“preDispatch()”中执行插件期间,您可以从配置中分析一个变量,它将当前状态保持为活动状态/维护状态,并让请求流向原始目标或将其重定向到为此目的登陆页面。
代码示例
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
// get your user and your config
if( $config->suspended && $user->role()->name != "admin"){
$request
->setModuleName( 'default' )
->setControllerName( 'index' )
->setActionName( 'suspended' )
->setDispatched(true)
;
}
}
答案 1 :(得分:2)
我已经将Apache设置为首先显示index.html而不是index.php(它引导ZF)。只要你没有在任何地方直接链接到/index.php,你就可以直接放入index.html文件,它会优先显示ZF网站。
另一种方法是在配置.ini文件中输入一个条目,并在阅读完配置后立即:
if ($config->maintenance) {
readfile(APPLICATION . '/../public/maintenance.html');
exit;
}
您可能还想在其中为特定的IP地址(您自己的)添加另一张支票,这样即使其他所有人都被阻止,您也可以接受。
答案 2 :(得分:1)
您可以检查配置文件中的maintenance_mode
开关,并将引导程序中的每个请求重定向到静态html维护页面。
答案 3 :(得分:1)
我有一篇博客文章,演示了如何执行此操作。 Setting up a maintenance page with Zend Framework
答案 4 :(得分:0)
我会使用dispatchLoopShutdown()
的插件,并根据配置设置,我会将请求重定向到您想要的任何控制器。
答案 5 :(得分:0)
我将所有这些建议都放在了Zend 1.12的TEE上。我用Google搜索了一下。尝试使用application.ini,使用Zend_Loader_PluginLoader使用zend_loader_autoloader_resource()设置插件路径。这些都没有为我工作。我最后写了一篇.htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/maintenance\.php$
RewriteRule ^(.*)$ /maintenance.php [R=503,L]
这就是为什么Zend是最糟糕的框架。关于如何做一些简单的事情的大量不同选择,官方文档是非常模糊和不清楚的,没有人完全理解或可以解释正确的方式做任何事情所以我最终浪费了一小时的时间来正确地做事。