Как получить доступ к помощнику с контроллера в 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);
}
Однако, если помощник включает в себя некоторых других помощников, они не будут загружены, и помощник вызовет много ошибки.
Спасибо.
1 answers
Вы должны вручную создать помощников, используемых вашим помощником. Например, если ваш помощник использует HtmlHelper, вам нужно сделать что-то вроде:
App::import('Helper', 'Html');
$ParserHelper->Html = new HtmlHelper();