嗯,这是一个棘手的问题,我不确定它是不是打破了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);
}
但是,如果帮助程序包含其他一些帮助程序,则不会加载它们,并且帮助程序将触发大量错误。
感谢。
答案 0 :(得分:2)
您必须手动创建助手使用的帮助程序。例如,如果您的助手使用HtmlHelper,则必须执行以下操作:
App::import('Helper', 'Html');
$ParserHelper->Html = new HtmlHelper();