cakephp pages_controller расширяется вместо перезаписи, это возможно? - PullRequest
0 голосов
/ 03 ноября 2011

Мне нужно добавить новые функции в "/cake/libs/controller/pages_controller.php", но я не хочу менять его напрямую, потому что это часть торта ядра ядра, поэтому я сделал, чтобы скопировать "pages_controller".php "into" app / controllers / ", а затем я добавил новые функции, но я получаю некоторые ошибки, такие как" Экран действий не определен в контроллере PagesController ".

Примечания:

  • / cake / libs / controller / pages_controller.php действительно имеет функцию display ()
  • / app / controllers / pages_controller.php не имеет display ()

Что такоепроблема?почему я получаю эту ошибку?

это /app/controllers/pages_controller.php:

<?php
class PagesController extends AppController {
    var $name = 'Pages';
    var $helpers = array('Html', 'Session');
    var $uses = array();

    function display_no_layout() {
        $this->autoLayout = false; // new line
        $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));
    }
}

My /app/config/routers.php:

Router::connect('home/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/successfully', array('controller' => 'pages', 'action' => 'display_no_layout', 'successfully'));

Ответы [ 2 ]

4 голосов
/ 03 ноября 2011

При создании

/app/controllers/pages_controller.php

it переопределяет

/cake/libs/controller/pages_controller.php

Так что display() должен быть в вашем PagesController, если вы направляетесь к нему. Вы, вероятно, хотите сохранить скопированный display() и написать что-то вроде

function display_no_layout() {
    $this->autoLayout = false;
    $this->display();
}
0 голосов
/ 03 ноября 2011

Возможно, ваше приложение ищет действие display() из-за этой строки в app/config/routes.php:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

Вы пытаетесь получить доступ к действию в контроллере страниц, но торт ищет действие display().

Редактировать: После просмотра PagesController единственной возможной причиной ошибки является routes.php файл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...