多个ViewHelpers需要多个视图吗?

时间:2013-03-30 11:30:00

标签: php model-view-controller view view-helpers

在我的应用程序中,我有一个 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

实施这些助手的最佳方法是什么?

感谢。

1 个答案:

答案 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];
    }
}

您的助手可以通过您的视图访问。

尽管如此,我也很好奇,别人怎么想。

超出此解决方案的一步可能是使用依赖注入容器

这些是有趣且易于理解的链接