Контроллер доступа к данным из элемента - PullRequest
1 голос
/ 16 марта 2010

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

Ответы [ 4 ]

2 голосов
/ 17 марта 2010

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

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

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

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

Если вам нужно выполнить дополнительную обработку данных, вы должны сделать это в самой модели либо с помощью обратного вызова Cakes afterFind, либо с помощью пользовательского метода в вашей модели Photo:

class Photo extends AppModel {

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

}

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

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

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

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

1 голос
/ 16 марта 2010

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

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

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

b.t.w, использование:

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

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

0 голосов
/ 17 марта 2010

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

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

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

0 голосов
/ 16 марта 2010

Почему бы вам просто не сделать это стандартным соглашением Cake для этого?

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

$ this-> set ('category', $ this-> Photos-> find (...));

...