java mvc能否调用php_将数据从MVC Controller传递到PHP中的View

对于我正在研究的一些项目,我有自己的手动PHP MVC框架 . 当我第一次创建框架时,它是在构建管理CMS的上下文中 . 因此,模型,视图和控制器之间存在非常好的一对一关系 . 数据库中有一行,它映射到单个模型 . 控制器加载模型并将其传递给要渲染的视图(例如进入编辑表单) . 很好,干净,容易 .

但是,现在我正在网站的前端工作,事情变得棘手了 . 页面并不总是单个模型的视图 . 它可能是一个包含20个用户的用户目录(每个用户模型) . 此外,可能存在关于请求的元数据,例如分页(当前页面,总页数,结果数量)和/或搜索查询 .

我的问题是,将所有这些数据传递给视图的最简洁方法是什么?

我正在考虑的一些选择:

Have the controller create an array and pass that to the view as a single parameter:

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

}

}

Create properties in the view class and have the controller populate them:

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();

}

}

Give the view some sort of generic HashMap or Collection object as a container which can hold any arbitrary number and name of data.

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();

}

}

我知道技术上任何一种都可以起作用,但我认为这是一个更好或更传统的选择 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值