0

在我的应用程序中,我有 View堂课。它被实例化并注入到执行类似操作的控制器中

$this->view->load('sometemplate')

然后在稍后阶段在控制器之外

$view->render();

它可以满足我的需要,但最近我遇到了ViewHelpers,我喜欢封装表示逻辑的想法。

问题是我会有多个ViewHelpers,我不希望我的单View人像

private $orderHelper;
private $feedbackHelper;
....

或者

private $helpers = array();

View为每个页面设置不同的页面是否有意义

class Feedback extends View {
    private $feedbackHelper;
}

还是有更好的方法来实现这一目标?

我在想的另一种方式是ViewHelperFactory我可以使用它来Helper从任何页面创建我需要的任何内容。

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

谢谢。

4

1 回答 1

0

作为外行,我是:

仅仅为了处理多个 Helpers 而创建不同的 View 类是没有意义的(不要不必要地重复自己)。

创建一个 HelperFactory 作为一个方法没有意义,因为如果你想动态地创建你的 Helper 对象,你仍然必须传递或执行一个“新的 Helper”语句给这个方法,不是吗?那么为什么不将其称为依赖注入并让您的控制器使用一个或多个 Helpers 注入您的 View...

class Controller {
    this->view->inject(new ViewHelper($args));
}

...并让您的 View 将它们放在 helper[] 中(为什么不呢?)...

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

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

尽管如此,我也很好奇,其他人对此有何看法。

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

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

于 2013-05-24T12:10:29.777 回答