在我的MVC中,我使用数组使用模型中的数据填充表单。我正在使用PDO和获取关联数组,这给出了一个可用于填充视图的字段数组。
当用户请求新记录时,该数组为空,除非我在使用前明确测试每个变量的值,否则脚本会因不存在的索引而失效。
对于新记录,我之前的方法是设置一个空数组并将其传递给视图。这对于简单的表单很好,但是当视图需要使用10-15个变量时,这有点单调乏味。
这样做的首选方法是什么? 我的视图应该在使用前测试每个字段,还是应该创建空数组。如果是这样,是否应在控制器或模型中创建空数组?
例如,如果用户想要编辑现有记录,控制器会将ID号传递给模型,并要求其提供记录的当前值数组。
控制器将此数组传递给视图,然后将值合并到表单中进行编辑。
相反,当控制器收到 new 记录的请求时,它知道向模型询问记录是没有意义的,因为它是新记录。它不能只调用视图,因为传递的数组不包含表单所需的键。
我目前的做法是初始化一个空键数组,但这似乎很乏味,浪费时间并容易出错,因为如果模型发生变化需要维护它。
例如:
$this->view->class['Code']=NULL;
$this->view->class['Description']=NULL;
$this->view->class['Image']=NULL;
$this->view->class['Judge']=NULL;
$this->view->class['Entries']=NULL;
$this->view->class['Absentees']=NULL;
等
必须有更好的方法吗?
答案 0 :(得分:0)
在我看来,设置propper默认值是一个模型问题。
想象一下这样的课程:
class Car {
protected $color;
protected $vendor;
public function __construct($color, $vendor) {
$this->color = $color;
$this->vendor = $vendor;
}
public static function getDefault() {
return new Car('unknown', 'unknown');
}
}
然而。你告诉过你使用数组。你会发现类似的数组方式。我建议编写一个像getDefaultWhatever()
这样的函数,并将其放在 model 部分代码中。
答案 1 :(得分:0)
对于糟糕的MVC设计,这是一种创可贴,但你可以使用这样的功能,
function idx(&$array, $index = 0, $default = null) {
return isset($array[$index]) ? $array[$index] : $default
}
在视图中,如果您正常,$class['Description']
您现在可以使用idx($class, 'Description')
您不必单独传递模型的每个属性。相反,只需传递整个模型对象并从视图中访问它。例如:
$this->view->entry = $myModelInstance;
其中$myModelInstance
是Entry
的实例或任何类具有代码,描述,图像,裁判等属性。
然后在视图中使用类似$entry->Description