我正在使用PHP& amp;笨。 通常在我的控制器中,我将从Model接收的字符串值(例如字符串和int)传递给View以显示它们。
在某些情况下,我的Model返回类的对象,而不是文字值。 我知道我可以将对象传递给View并显示它们的值(通过调用视图中的相关方法),但我认为,在概念上它是错误的(也就是它的外观ODD)来使用对象并在View中调用它们的方法,而不是只打印文字。
Anway,我的问题是,如果控制器从对象获取/准备值并将它们传递给视图,或者它的确定将对象传递给视图并让View执行此任务。
答案 0 :(得分:0)
所以在"间谍"在其他PHP框架上:
Yii:http://www.yiiframework.com/doc/guide/1.1/en/form.table
Symfony:http://symfony.com/doc/current/quick_tour/the_view.html
我看到将对象(或对象数组)传递给查看并迭代它们是很常见的。 因为它有点困扰我传递对象(害怕有人会调用对象的方法,如更新或删除)
所以我继续搜索并找到了这篇文章:Laravel: object or other structures (array, json..) to the view?
@The_Alpha,建议传递一个对象的数组表示,只包含该类的属性,我相信,好主意
所以我将向Model基类添加一个新方法getArray(),它将返回该对象的数组表示。
pseoudo代码
class Model{
...
public function getArray(){
$array = array();
foreach($this as $key => $value) {
$array[$key] = $value;
}
return $array;
}
...
}
现在在我的控制器中我可以很容易地做到:
pseoudo代码
class MyController extends Controller{
...
public function action(){
$array = $this->model->getArray(); // fetch array representation of model
$this->view('myview',$array); // pass the array to view for rendering
}
...
}
帮助每个人的Thx
答案 1 :(得分:0)
在这种情况下"对象"只是一种数据结构的名称。特别是当您从查询数据库的模型中获得结果时 - 您可以选择是否将这些数据库结果作为"数组返回"或者"对象" 。
有时候你必须在视图中迭代数据。无论是数组还是对象都不是什么大问题。
如果你有一个控制器"准备数据"在某种程度上,你将有一个"脂肪"控制器。与模型准备数据=>薄控制器。
您希望控制器根据您获得的数据显示相应的视图。例如搜索 - 如果没有结果回来那么你会显示"没有结果请再试一次"视图。如果结果返回,那么您将把这些结果传递给可以显示的视图。
换句话说,您没有检查结果是否在视图代码中返回。如果您调用结果视图,则表明您已确认要显示有效结果。
控制器调用视图。视图可以调用其他视图。视图还可以包括对模型的调用,但这是不受欢迎的,因为它可能变得混乱并且更难调试。