Как получить доступ к помощнику с контроллера в 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);
}

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

Спасибо.


person metrobalderas    schedule 27.06.2011    source источник
comment
Аналогичный вопрос: CAKEPHP - Как использовать вспомогательная функция в контроллере?   -  person Simon East    schedule 27.09.2016


Ответы (1)


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

App::import('Helper', 'Html');
$ParserHelper->Html = new HtmlHelper();
person dhofstet    schedule 28.06.2011