CakePHP 2.1.0: Как создать страницу «Вниз для обслуживания» - PullRequest
4 голосов
/ 13 марта 2012

Я пытаюсь реализовать что-то вроде Mark Story на странице "Down for Maintenance" , используя CakePHP 2.1.0.Я довольно близок к достижению этого, но я сталкиваюсь с двумя проблемами, с которыми я мог бы помочь.Прежде всего, вот весь соответствующий код (шесть файлов):

1) app / Config / bootstrap.php:

Configure::write('App.maintenance', true);

2) app / Config / core.php:

Configure::write('debug', 1);

...

Configure::write('Exception', array(
    'handler' => 'ErrorHandler::handleException',
    'renderer' => 'AppExceptionRenderer',
    'log' => true
));

3) app / Controller / AppController.php:

if (Configure::read('App.maintenance') == true) {
    App::uses('DownForMaintenanceException', 'Error/Exception');
    throw new DownForMaintenanceException(null);
}

4) app / Lib / Error / Exception / DownForMaintenanceException.php:

<?php
class DownForMaintenanceException extends CakeException {}

5) app / Lib / Error / AppExceptionRenderer.php:

<?php
App::uses('ExceptionRenderer', 'Error');

class AppExceptionRenderer extends ExceptionRenderer {
    function _outputMessage($template) {
        // Call the "beforeFilter" method so that the "Page Not Found" page will
        // know if the user is logged in or not and, therefore, show the links that
        // it is supposed to show.

        if (Configure::read('App.maintenance') == false)
        {
            $this->controller->beforeFilter();
        }

        parent::_outputMessage($template);
    }

    public function downForMaintenance() {
        $url = $this->controller->request->here();
        $code = 403;
        $this->controller->response->statusCode($code);
        $this->controller->set(array(
            'code' => $code,
            'url' => h($url),
            'isMobile' => $this->controller->RequestHandler->isMobile(),
            'logged_in' => false,
            'title_for_layout' => 'Down for Maintenance'
        ));
        $this->_outputMessage($this->template);
    }
}

6) app / View / Errors / down_for_maintenance.ctp:

<p>Down for Maintenance</p>

Теперь по двум вопросамЯ испытываю.Во-первых, этот код работает только тогда, когда отладка установлена ​​выше 1. Могу ли я что-нибудь с этим сделать?Означает ли это, что я поступаю неправильно?Вторая проблема заключается в том, что, хотя я устанавливаю переменные представления «isMobile» и «logged_in» на логические значения в методе «downForMaintenance», файл «app / View / Layouts / default.ctp»видит их как строк .Что я могу с этим поделать?

Спасибо!

Ответы [ 3 ]

16 голосов
/ 13 марта 2012

Вот краткая и простая страница обслуживания для cakephp

в общедоступном index.php

define('MAINTENANCE', 0); 
if(MAINTENANCE > 0 && $_SERVER['REMOTE_ADDR'] !='188.YOUR.IP.HERE')
{
require('maintenance.php'); die(); 
}

Затем просто измените MAINTENANCE = 1, когда вы хотите закрыть свой сайт, и он будетпо-прежнему можно просматривать из дома / офиса.

БОНУС: Работает со всеми версиями торта!

3 голосов
/ 21 октября 2015

Более элегантный способ - добавить маршрут, перекрывающий любой другой, в самый верх routes.php:

//Uncomment to set the site to "under construction"
Router::connect('/*', array('controller' => 'pages', 'action' => 'underConstruction'));

//any other route should be underneath 

Если вы хотите добавить какое-либо условие, вы также можете сделать это здесь:

define('MAINTENANCE', 0); 
if(MAINTENANCE > 0 && $_SERVER['REMOTE_ADDR'] !='188.YOUR.IP.HERE')
    Router::connect('/*', array('controller' => 'pages', 'action' => 'underConstruction'));
}
0 голосов
/ 15 июля 2014

Нам нужно будет создать собственный фильтр рассылки, CakePHP вас охватит.проверьте ссылку ниже

http://josediazgonzalez.com/2013/12/13/simple-application-maintenance-mode/

...