маршрутизация cakephp - pages_controller / home.ctp ошибка только при отладке = 0 - PullRequest
8 голосов
/ 25 сентября 2010

Когда для отладки core.php установлено значение 1 или 2, и я перехожу к корню моего сайта cakephp, я получаю ожидаемый результат, обслуживаемая страница верна, т. Е. Действие PagesController default () -> home.ctp

Однако, если я изменяю отладку на 0, я получаю следующую ошибку:

Ошибка: запрошенный адрес '/' был не найден на этом сервере.

Мой файл router.php содержит:

    Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
/**
 * ...and connect the rest of 'Pages' controller's urls.
 */
    Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

Я попытался удалить все файлы кэша и удалить куки-файлы CAKE, и другие действия работают, как ожидается, при непосредственном посещении, например, / user, / groups и т. Д. Проблема возникает только при попадании в корень '/'.

Я использую cakephp 1.3.4 и ACL + Auth.

Редактировать ** Я включаю код для функции default () из pages_controller.php

/**
 * Displays a view
 *
 * @param mixed What page to display
 * @access public
 */
    function display() {

        $path = func_get_args();

        $count = count($path);
        if (!$count) {
            $this->redirect('/');
        }
        $page = $subpage = $title_for_layout = null;

        if (!empty($path[0])) {
            $page = $path[0];
        }
        if (!empty($path[1])) {
            $subpage = $path[1];
        }
        if (!empty($path[$count - 1])) {
            $title_for_layout = Inflector::humanize($path[$count - 1]);
        }
        $this->set(compact('page', 'subpage', 'title_for_layout'));
        $this->render(implode('/', $path));

    }

Ответы [ 3 ]

11 голосов
/ 27 сентября 2010

ОК, ответ так прост, что это стыдно: в home.ctp есть следующий код:

if (Configure::read() == 0):
    $this->cakeError('error404');
endif;

Configure :: read () по умолчанию read var debug - поэтому он выдает эту ошибку, еслиdebug установлен на 0.

Спасибо Бенджамину за то, что поставил меня на правильный путь.Торт замечательный и в то же время приводящий в бешенство, пока не освоишь основы!

4 голосов
/ 26 сентября 2010

imho, это поведение имеет смысл, когда вы переключаете отладку на 0, если ваше приложение запускается в производство (что-то подсказывает мне, что вы не хотите показывать страницу home в качестве страницы входа). Файл home.ctp, отображаемый контроллером страниц, находится в

./cake/libs/view/pages/home.ctp

вашей установки. Но если вы находитесь в производстве, вы хотите отобразить статические страницы из

./app/views/pages

директория, которая является задачей контроллера страниц. Этот каталог пуст в установке свежего торта.

1 голос
/ 29 ноября 2013

Я хотел бы обновить код для cakephp версии 2.4.3. как и в версии CakePHP выше код заменяется на

if (!Configure::read('debug')):
  throw new NotFoundException();
endif;

когда отладка установлена ​​в '0', она выдает исключение. Вы можете использовать приведенный ниже код для правильной работы:

if ((Configure::read('debug')==='')):
throw new NotFoundException();
endif;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...