Как получить доступ к помощнику из контроллера в CakePHP? - PullRequest
4 голосов
/ 27 июня 2011

Ну, это сложно, и я не совсем уверен, что это не сломает модель 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);
}

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

Спасибо.

1 Ответ

2 голосов
/ 28 июня 2011

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

App::import('Helper', 'Html');
$ParserHelper->Html = new HtmlHelper();
...