Добавление функции контроллера для «домашнего» представления в CakePHP - PullRequest
3 голосов
/ 18 марта 2012

При посещении сайта CakePHP по умолчанию вы переходите на страницу «home.ctp».

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

Я хочу добавить туда несколько элементов (например, сообщения в блоге), поэтому я подумал, что могу просто добавить это в класс PagesController ():

public function home() {
    $this->set('blogposts', $this->Blogpost->find('all'));
}

Но это не работает.

Итак: как правильно добавить что-то подобное на домашней странице (или любой другой странице)

Ответы [ 3 ]

11 голосов
/ 18 марта 2012

Предпочтительным вариантом является создание пользовательского маршрута для домашней страницы, но вы также можете переопределить функцию отображения PagesController

Опция 1: (Предпочтительный метод)

Router::connect('/', array('controller' => 'mycontroller', 'action' => 'myaction'));

Опция 2

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

Вариант 3:

class PagesController {
    function display()
    {
        // default controller code here
        // your custom code here
    }
}

Последний вариант использует requestAction в вашем представлении, но это не рекомендуется, так как имеет огромный недостаток производительности

Параметр4: (не рекомендуется)

$newsitems = $this->requestAction(array('controller' => 'newsitems', 'action' => 'getlatestnews', 'limit' => 10));
1 голос
/ 18 марта 2012

На самом деле, действие display, home - это параметр. Поэтому ваш основной метод на страницах контроллера должен вызывать display, а не home. После этого создайте display.ctp представление.

Справка:

0 голосов
/ 14 апреля 2015

Чтобы на самом деле ответить на оригинальный вопрос:

$this->loadModel('Blogpost');

В идеале модель должна называться

$this->loadModel('BlogPost');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...