CakePHP: настройка переменной для домашней страницы - PullRequest
3 голосов
/ 10 января 2012

После добавления этого в конец моей display функции внутри app/controllers/pages_controller.php,

    // grab all message lists
    $this->loadModel('MessageList');
    $this->set('messageLists', $this->MessageList->find('all'));

Я пытаюсь получить к ней доступ в app/views/pages/home.ctp, как

<?php
        foreach($messageLists as $messageList) {
            print_r($messageList);
        }
    ?>

Но яполучите предупреждение

Notice (8): Undefined variable: messageLists [APP\views\pages\home.ctp, line 9]

Мой app/config/routes.php имеет:

/**
 * Here, we are connecting '/' (base path) to controller called 'Pages',
 * its action called 'display', and we pass a param to select the view file
 * to use (in this case, /app/views/pages/home.ctp)...
 */
    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'));

Что мне нужно изменить, чтобы я мог получить доступ к $messageLists на своей домашней странице?Спасибо!

Ответы [ 2 ]

5 голосов
/ 10 января 2012

В самом конце вашего метода display ()?Что ж, это не сработает, потому что он вызывает render () перед этим и таким образом рендерит страницу, прежде чем вы установите для нее переменные представления.Поэтому переместите вызов set () перед вызовом render ().

Также еще один совет: ваша реализация не очень хорошо выполнена, за исключением того, что вы хотите вызывать дополнительные запросы на каждой странице, которые даже не должны отображатьmessages.

Похоже, вы новичок в CakePHP, поэтому я предлагаю вам посмотреть requestAction () в руководстве и узнать, как работают элементы в представлениях.Это позволит вам отображать список сообщений, используя элемент в любом файле представления, используя элемент и действие запроса, например, для Messages / getListForUser.

3 голосов
/ 10 января 2012

Это должно работать. Убедитесь, что вы устанавливаете переменную перед вызовом $this->render(). Это вызов рендеринга, который останавливает выполнение кода контроллера и отображает представление в браузере. Так что просто переместите это:

// grab all message lists
    $this->loadModel('MessageList');
    $this->set('messageLists', $this->MessageList->find('all'));

до вызова $this->render(), и он будет работать.

...