Phần khó khăn khi thực hiện việc này trong phạm vi ứng dụng ZF có thể là việc bảo trì của bạn sẽ ảnh hưởng đến chính ứng dụng đó. Vì vậy, nếu ứng dụng bị "hỏng" trong quá trình bảo trì, rủi ro là giải pháp "trong ứng dụng" có thể bị hỏng. Theo nghĩa đó, các phương pháp "bên ngoài" như sửa đổi .htaccess hoặc tinh chỉnh tệp public/index.php
có lẽ mạnh mẽ hơn.
Tuy nhiên, cách tiếp cận "trong ứng dụng" có thể sử dụng plugin trình điều khiển phía trước. Trong application/plugins/TimedMaintenance.php
:
class Application_Plugin_TimedMaintenance extends Zend_Controller_Plugin_Abstract
{
protected $start;
protected $end;
public function __construct($start, $end)
{
// Validation to ensure date formats are correct is
// left as an exercise for the reader. Ha! Always wanted
// to do that. ;-)
if ($start > $end){
throw new Exception('Start must precede end');
}
$this->start = $start;
$this->end = $end;
}
public function routeShutdown(Zend_Controller_Request_Abstract $request)
{
$now = date('Y-m-d H:i:s');
if ($this->start <= $now && $now <= $this->end){
$request->setModuleName('default')
->setControllerName('maintenance')
->setActionName('index');
}
}
}
Sau đó đăng ký các plugin trong application/Bootstrap.php
:
protected function _initPlugin()
{
$this->bootstrap('frontController');
$front = $this->getResource('frontController');
$start = '2012-01-15 05:00:00';
$end = '2012-01-15 06:00:00';
$plugin = new Application_Plugin_TimedMaintenance($start, $end);
$front->registerPlugin($plugin);
}
Trong thực tế, bạn có thể muốn đẩy thời gian bắt đầu/kết thúc lên đến config. Trong application/configs/application.ini
:
maintenance.enable = true
maintenance.start = "2012-01-15 05:00:00"
maintenance.end = "2012-01-15 06:00:00"
Sau đó, bạn có thể sửa đổi các đăng ký plugin để trông giống như:
protected function _initPlugin()
{
$this->bootstrap('frontController');
$front = $this->getResource('frontController');
$config = $this->config['maintenance'];
if ($config['enable']){
$start = $config['start'];
$end = $config['end'];
$plugin = new Application_Plugin_TimedMaintenance($start, $end);
$front->registerPlugin($plugin);
}
}
Bằng cách này, bạn có thể kích hoạt chế độ bảo trì đơn giản bằng cách chỉnh sửa các mục config.
Nguồn
2011-12-31 10:55:32
@Iznogood: Cảm ơn bạn đã chỉnh sửa. D'oh! ;-) –
Không có vấn đề gì xảy ra! :) – Iznogood