使用$this->var或$data['var']访问View对象中的数据


Access data in my View object using $this->var or $data['var']

嘿,在我的View类中,当我加载我的视图文件和render()后,我应该像这样访问我的数据:

$this->model;

或像:

$this->data['model'];

或在render()方法中,在我包含视图文件之前有如下内容:

$model = $this->data['model'];
// and then in my view file I can access the data by just calling it locally
$model->getSomething();

从我的视图文件?

这三种方式工作,但我开始认为像$this->data['model'];这样的东西是从视图文件中访问数据的正确方法。

哪条路是正确的?

谢谢。

在正确实现的MVC中,视图不是哑模板。它是一个类的实例,能够从模型层请求数据。模型不是类或实例。它是一个层(MVC由两层组成:表示层和模型层)。

MVC设计模式中的视图负责所有的UI逻辑。这意味着它们(如果需要的话)从多个模板创建响应。在其他情况下,唯一的响应可能是一个HTTP位置头。

基本上当你的视图实例需要一些东西时,它会这样做:

$library = $this->serviceFactory('Library');
$details = $library->getCurrentBookDetails();
$someTemplate->assign('title', $details['title']);
$someTemplate->assign('content', $details['content']);

在这种情况下,服务工厂在当前视图和控制器之间共享,并确保仅实例化Library服务的单个实例。从而为两个实例提供了与模型层的相同状态交互的能力。