嘿,在我的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
服务的单个实例。从而为两个实例提供了与模型层的相同状态交互的能力。