好吧,这是一个棘手的问题,我不确定它是否破坏了 MVC 模型。
我正在将一些数据加载到 Controller 中,这些数据是从模型中检索到的。我几乎在每个 Action 中都将这个对象传递给 View 。我正在处理来自助手的数据,并将该对象作为参数传递:
Controller :
$this->('section', $section);
helper :
<h3><?php echo $parser->section_name($section); ?></h3>
但是,我认为如果我可以将 $section
对象作为私有(private)变量传递到解析器帮助器中会更好。我可以在每个 View 的第一行这样做:
$parser->section_object = $section;
每个解析器方法看起来都像
function section_name(){
return $this->section_object['Section']['name'];
}
问题是:有没有办法从 Controller 自动执行此操作?因为 Controller 无法访问助手,我尝试从 Controller 创建助手并在那里设置局部变量:
function beforeFilter(){
$section = $this->Section->getOne();
App::import('Helper', 'Parser');
$ParserHelper = new ParserHelper();
$ParserHelper->section_object = $section;
$this->set('parser', $ParserHelper);
}
但是,如果helper包含一些其他的helper,它们将不会被加载并且helper会触发很多错误。
谢谢。
最佳答案
您必须手动创建您的助手所使用的助手。例如,如果您的助手使用 HtmlHelper,您必须执行如下操作:
App::import('Helper', 'Html');
$ParserHelper->Html = new HtmlHelper();
关于php - 如何从 CakePHP 中的 Controller 访问助手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6497975/