Как получить доступ к помощнику с контроллера в CakePHP?


Ну, это сложный вопрос, и я не совсем уверен, что он не нарушает модель MVC.

Я загружаю некоторые данные в контроллер, полученные из модели. Я передаю этот объект в поле зрения почти в каждом действии. Я обрабатываю эти данные от помощника и передаю объект в качестве аргумента:

Контроллер:

$this->('section', $section);

Помощник:

<h3><?php echo $parser->section_name($section); ?></h3>

Однако я думаю, что было бы намного лучше, если бы я мог передать этот объект $section в качестве частной переменной внутри помощник по синтаксическому анализу. Я мог бы сделать это в первой строке каждого представления:

$parser->section_object = $section;

И каждый метод синтаксического анализа будет выглядеть примерно так

function section_name(){
   return $this->section_object['Section']['name'];
}

Вопрос в следующем: есть ли способ автоматизировать это с контроллера? Поскольку контроллер не может получить доступ к помощнику, я попытался создать помощника из контроллера и установить локальную переменную там:

function beforeFilter(){
    $section = $this->Section->getOne();
    App::import('Helper', 'Parser');
    $ParserHelper = new ParserHelper();
    $ParserHelper->section_object = $section;
    $this->set('parser', $ParserHelper);
}

Однако, если помощник включает в себя некоторых других помощников, они не будут загружены, и помощник вызовет много ошибки.

Спасибо.

Author: metrobalderas, 2011-06-27

1 answers

Вы должны вручную создать помощников, используемых вашим помощником. Например, если ваш помощник использует HtmlHelper, вам нужно сделать что-то вроде:

App::import('Helper', 'Html');
$ParserHelper->Html = new HtmlHelper();
 2
Author: dhofstet, 2011-06-28 06:16:29