#cakephp #model #navigation
#cakephp #Модель #навигация
Вопрос:
Название говорит само за себя. У меня будет навигация, которая выглядит следующим образом, и она динамически создается из базы данных.
<ul>
<li><a href='controller/view/1'>1</li>
<li><a href='controller/view/2'>2</li>
<li><a href='controller/view/3'>3</li>
</ul>
Она должна быть одинаковой на каждой странице (по странице, я имею в виду на каждом контроллере), за исключением активного. Я впервые в cakephp.
Это мой файл элементов:
<ul id="left-navigation">
<?php
App::import('Model','Godina');
$navigacija = $this->Godina->find('all');
foreach($navigacija as $nav){
echo '<li>' . $this->html->link($nav['Godina'] ['godina'],array('controller'=>'godina','action'=>'program',$nav['Godina']['godina'])
) . '</li>';
}
?>
И это ошибка, которую я получаю.
Fatal error: Call to a member function find() on a non-object in /Applications/MAMP/htdocs/cakephp/app/View/Elements/godineNavigacija.ctp on line 4
И поскольку мои знания о ядре cakephp довольно низки, это просто не работает.
Спасибо.
Комментарии:
1. Я не совсем уверен, что вы имеете в виду. Вы можете поместить навигацию в макет или использовать элементы. Что вы подразумеваете под «активным»?
Ответ №1:
App::import
просто загружает файл, как PHP include
, он не создает экземпляр объекта. So $this->Godina
не существует. Вы можете сделать это:
$Godina = ClassRegistry::init('Godina');
$Godina->find(...);
Для правильного разделения MVC вам не следует использовать модели в представлении. Вы можете извлекать и set
вводить данные AppController::beforeFilter
, поэтому он делает это на каждой странице, а затем выводит в представлении. В качестве альтернативы, посмотрите requestAction
.