Podstępna część robienia tego w aplikacji ZF polega na tym, że prawdopodobnie konserwacja wpłynie na samą aplikację. Jeśli więc aplikacja zostanie "zerwana" podczas konserwacji, istnieje ryzyko, że rozwiązanie "w aplikacji" może również ulec uszkodzeniu. W tym sensie "zewnętrzne" podejścia, takie jak modyfikowanie .htaccess lub poprawianie pliku public/index.php
, są prawdopodobnie bardziej niezawodne.
Jednak metoda "w aplikacji" może korzystać z wtyczki kontrolera frontowego. W 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');
}
}
}
Następnie zarejestrować wtyczkę w 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);
}
W praktyce, może chcesz przesunąć razy start/end do konfiguracji. W application/configs/application.ini
:
maintenance.enable = true
maintenance.start = "2012-01-15 05:00:00"
maintenance.end = "2012-01-15 06:00:00"
Następnie można zmodyfikować rejestrację wtyczki wyglądać:
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);
}
}
W ten sposób, można włączyć tryb konserwacji po prostu edytując wpis konfiguracyjny.
@Iznogood: Dzięki za edycję. D'oh! ;-) –
Nie dzieje się problemów! :) – Iznogood