【问题标题】:Do I need multiple Views for multiple ViewHelpers?我是否需要多个 ViewHelper 的多个视图?
【发布时间】:2013-03-30 11:29:59
【问题描述】:

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    作为外行的我:

    仅仅为了处理多个 Helper 而创建不同的 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];
        }
    }
    

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

    不过我也很好奇,其他人是怎么想的。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      相关资源
      最近更新 更多