在我的应用程序中,我有一个 View
类。它被实例化并注入一个类似
$this->view->load('sometemplate')
然后在控制器外面我做
$view->render();
它做了我需要的东西,但最近我遇到了ViewHelpers
,我喜欢封装表示逻辑的想法。
问题是,我会有多个ViewHelpers
,我不希望我的单View
个人像
private $orderHelper;
private $feedbackHelper;
....
或
private $helpers = array();
为每个页面设置不同的View
是否有意义,例如
class Feedback extends View {
private $feedbackHelper;
}
还是有更好的方法来实现这个目标吗?
我想到的另一种方式是View
有一个HelperFactory
我可以用来从任何页面创建我需要的任何Helper
。
实施这些助手的最佳方法是什么?
感谢。
答案 0 :(得分:0)
作为外行人,我:
仅仅为了处理多个助手而创建不同的View类没有意义(不要不必要地重复自己)。
创建HelperFactory作为一种方法是没有意义的,因为如果你想动态地创建你的Helper Object ,你仍然必须传递或执行“new Helper”-statement对这种方法,不是吗?那么为什么不把它称为依赖注入,让你的控制器用一个或多个Helpers注入你的View ......
class Controller {
this->view->inject(new ViewHelper($args));
}
...让你的View put'em进入帮手[](为什么不呢?)......
class View {
private $helper;
public function inject($dependency) {
$key = lcfirst(get_class($dependency));
$this->helper[$key] = $dependency;
}
public function getHelper($key) {
return $this->helper[$key];
}
}
您的助手可以通过您的视图访问。
尽管如此,我也很好奇,别人怎么想。
超出此解决方案的一步可能是使用依赖注入容器。
这些是有趣且易于理解的链接: