Как использовать find('all') в Views - CakePHP

Я много искал, но не смог найти, как использовать find('all') в представлениях, как это используется в Rails, но здесь я получаю сообщение об ошибке "Неопределенное свойство: View::$Menu [APP\Lib\ Cake\View\View.php, строка 804]» «Меню» — это модель, которую я использую для извлечения данных из таблицы меню.

Я использую приведенный ниже код в представлениях:

$this->set('test',$this->Menu->find('all'));
print_r($test);

person Praveen Kumar    schedule 12.04.2012    source источник
comment
получение даты в поле зрения является нарушением правил MVC. Пожалуйста, не делайте этого.   -  person thecodeparadox    schedule 12.04.2012
comment
Я знаю, но решить мою проблему я знаю только так, если есть другой способ, пожалуйста, помогите. Мне нужно отобразить все меню в таблице, у меня есть menu_id из другой таблицы, мне нужно преобразовать id в название меню.   -  person Praveen Kumar    schedule 12.04.2012
comment
Думаю мой пост решит вашу проблему   -  person thecodeparadox    schedule 12.04.2012
comment
Почему вы не можете получить данные в контроллере, как положено?   -  person deceze♦    schedule 12.04.2012
comment
Я бы несколько раз подумал, действительно ли вы не можете получить данные в действии контроллера, прежде чем прибегать к выборке данных в файле представления. Однако, если вам необходимо, я предлагаю использовать reqeustAction (Cake 2.0 API , Поваренная книга (1.3), не удалось найти страницу книги на 2.0) с правильным кешированием.   -  person Joep    schedule 12.04.2012


Ответы (4)


Внутри вашей модели меню создайте метод, например, getMenu(). В этом методе выполните find() и получите желаемые результаты. Измените результаты так, как вам нужно и нравится, в методе getMenu() и верните данные.

Если вам нужно это меню на каждой странице в AppController::beforeFilter() или beforeRender(), просто выполните

$this->set('menu', ClassRegistry::init('Menu')->getMenu());

Если вам это не нужно везде, вы можете лучше использовать requestAction, получая данные с помощью этого метода из Контроллер меню, который будет вызывать getMenu() из модели и возвращать данные. Установить его там, где вам нужно, было бы еще лучше, если вы используете requestAction, вы также, скорее всего, захотите его кэшировать.

person floriank    schedule 12.04.2012
comment
Не могли бы вы отметить ответ как правильный, если он работает для вас, пожалуйста? - person floriank; 12.04.2012
comment
@burzum: я проголосовал за это, потому что ты дал правильный совет и предложил мне - person chetanspeed511987; 13.04.2012

ПОПРОБУЙТЕ НЕ ПОЛУЧАТЬ ДАННЫЕ В ФАЙЛЕ ПРОСМОТРА. НАРУШЕНИЕ ПРАВИЛ MVC

попробуйте это в файле просмотра:

$menu = ClassRegistry::init('Menu');
pr($menu->find('all'));
person thecodeparadox    schedule 12.04.2012
comment
без НАРУШЕНИЯ ПРАВИЛА MVC, как сделать эту функциональность? - person chetanspeed511987; 12.04.2012
comment
Запросите в контроллере, а затем установите для просмотра. ИЛИ сделать запрос в функции beforeFilter AppController, сохранить результат в переменной, а затем использовать эту переменную. - person thecodeparadox; 12.04.2012

В AppHelper,

Сделайте функцию ниже

function getMenu()
{

    App::import('Model', 'Menu');
    $this->Menu= &new Menu();
$test  = array();
$test = $this->Menu->find('all');
return $test;
}

Используйте вышеуказанную функцию в представлении, например:

<?php

 $menu = $html->getMenu();
 print_r($menu);

 ?>
person chetanspeed511987    schedule 12.04.2012
comment
Я снова получаю сообщение об ошибке: Неустранимая ошибка: вызов функции-члена find() для не-объекта в AppHelper.php. Я добавил $this-›loadmodel('Menu') в AppHelper.php, но получаю сообщение об ошибке, что loadmodel не является объектом. - person Praveen Kumar; 12.04.2012
comment
Я проголосовал за него из-за того, что вы дали плохой совет и предложили нарушить MVC. - person floriank; 12.04.2012
comment
@burzum: Спасибо за все. Я понял - person chetanspeed511987; 12.04.2012
comment
@ chetanspeed511987 Спасибо за ваши усилия, чтобы ответить мне, очень полезно, что я не знал, что AppHelper может так много. - person Praveen Kumar; 12.04.2012

Cakephp не позволяет этого.

Сначала создайте ссылку (объект) вашей модели, используя ClassRegistry::init('Model'); А затем вызовите функцию поиска из объекта

$obj = ClassRegistry::init('Menu'); $test = $obj->find('all'); эхо ""; print_r ($ тест); `

Это сработает.

person Rahul Gautam    schedule 28.11.2014