2010-03-16 4 views
1

У меня есть элемент для навигации на боковой панели, который вызывается из моего файла layouts/default.ctp, мне нужно получить доступ к некоторым данным о категориях из моего контроллера фотографий. Как мне это сделать?Данные Контроллера доступа от элемента

ответ

1

Вы можете просто считать ваш layous/default.ctp как обычный шаблон, и положить

<?php echo $this->element('your element'); ?> 

, где вам это нужно.

b.t.w, используйте:

$data = $this->requestAction('controller/action'); 

для доступа к данным

+0

Извините, может быть, я должен уточнить. Я использую element ('side_nav'); ?> в моих макетах/default.ctp Мне нужно получить этот элемент в 'elements/side_nav.ctp' для доступа к данным, полученным из контроллера Photos. – trobrock

+0

@ trobrock, вы пытались использовать: «$ data = $ this-> requestAction ('photos/someaction');" для получения данных в элементе? – Young

+0

У меня нет, я попробую. И жаль, что я неправильно прочитал ваш ответ – trobrock

-1

Почему бы вам не только сделать это стандартный торт конвенции для этого?

В контроллере,

$ this-> набор ('категории', $ this-> фотографии-> найти (...));

2

Будьте осторожны с requestAction, если вы не используете эффективное кэширование, это может действительно замедлить ваше приложение, поскольку он запускает новый цикл запросов каждый раз, когда вы его вызываете.

Ответ Тревиса Лелеу будет стандартным способом делать вещи. Но если вы должны импортировать данные (для переносимости или по любой причине) в элемент, тогда requestAction не подходит.

Поскольку вы не выполняете какую-либо бизнес-логику, которая должна находиться в контроллере, я настоятельно рекомендую вам импортировать и создавать экземпляр класса модели в виде одиночного элемента в свой элемент. Вы можете сделать это, используя ClassRegistry :: init();

$Photo = ClassRegistry::init('Photo'); 
$Photo->find('all'); 

Если вам нужно сделать какой-либо дополнительной обработки данных, которые вы должны сделать это в самой либо модели, используя Пирожные afterFind обратный вызов или сделать пользовательский метод в вашей модели Фото:

class Photo extends AppModel { 

    function customFind() { 
     $photos = $this->find('all'); 
     foreach ($photos as $photo) { 
      //processing code here... 
     } 
    } 

} 

Тогда звоните он в своей стихии:

$Photo = ClassRegistry::init('Photo'); 
$Photo->customFind(); 

в основном то, что я пытаюсь донести здесь является только ситуация, когда requestAction уместно, где вам нужно сделать что-то вроде Перенаправление ts или с использованием компонентов.

Если вы просто извлекаете и/или управляете данными, то оно принадлежит модели.

0

Вы можете отправить данные в свой элемент. Например, в вашем default.ctp:

<?php echo $this->element('side_nav', $your_data); ?> 

и в вашей side_nav.ctp вы можете обрабатывать эти данные.

Смежные вопросы