我有自己的手工
PHP MVC框架,我正在开展的一些项目.当我第一次创建框架时,就是在构建管理CMS的上下文中.因此,模型,视图和控制器之间存在非常好的一对一关系.您在DB中有一行,映射到单个模型.控制器加载模型并将其传递到要渲染的视图(如编辑表单).漂亮,干净,容易.
然而,现在我正在网站的前端工作,事情变得很粘.页面并不总是单个模型的视图.它可能是一个具有20个用户(每个用户模型)的用户目录列表.此外,可能存在关于请求的元数据,例如分页(当前页面,总页面,结果数量)和/或搜索查询.
我的问题是,将这些数据传递给视图最干净的方法是什么?
我正在考虑的一些选择:
>让控制器创建一个数组,并将其作为一个参数传递给视图:
class UserController{
public function renderView(){
// assume there's some logic to create models, get pagination, etc.
$data = array()
$data['models'] = $models;
$data['currentPage'] = $current;
$data['totalPages'] = $total;
return $view->render($data);
}
}
class UserView{
public function render($data){
// render the data
}
}
>在视图类中创建属性,并使控制器填充它们:
class UserView{
public $models;
public $currentPage;
public $totalPages;
}
class UserController{
public function renderView(){
// assume there's some logic to create models, get pagination, etc.
$view = new UserView();
$view->models = $models;
$view->currentPage = $current;
$view->totalPages = $total;
return $view->render();
}
}
>将视图中的某种通用HashMap或Collection对象视为容器,可以容纳任意数量和数据名称.
class UserView{
public $collection = new Collection(); // works like a Java collection
}
class UserController{
public function renderView(){
// assume there's some logic to create models, get pagination, etc.
$view = new UserView();
$view->collection->add($models,'models');
$view->collection->add($currentPage,'currentPage');
return $view->render();
}
}
我知道技术上任何一个都可以工作,但我不确定最好的选择,或者如果有一个更好或更传统的选择,我失踪了.