0

在我的 MVC 中,我使用数组使用模型中的数据填充表单。我正在使用 PDO 并获取关联数组,这提供了一个可用于填充视图的字段数组。

当用户请求新记录时,数组为空,除非我在使用前明确测试每个变量的值,否则脚本会因索引不存在而崩溃。

我以前的方法是,对于新记录,设置一个空数组并将其传递给视图。这对于简单的表单来说很好,但是当视图需要使用 10-15 个变量时,这有点乏味。

这样做的首选方法是什么?我的视图应该在使用前测试每个字段,还是应该创建空数组。如果是这样,应该在控制器或模型中创建空数组吗?


例如,如果用户想要编辑现有记录,控制器将 ID 号传递给模型并要求它提供记录的当前值数组。

控制器将此数组传递给视图,然后视图将值合并到一个表单中以进行编辑。

相反,当控制器收到记录的请求时,它知道向模型询问记录是没有意义的,因为它是新的。它不能只调用视图,因为传递的数组不包含表单所需的键。

我目前的方法是初始化一个空键数组,但这似乎很乏味、浪费时间并且容易出错,因为如果模型发生变化则需要对其进行维护。

例如:

$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;

ETC

一定有更好的方法?

4

2 回答 2

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;where是具有 Code、Description、Image、Judges 等属性$myModelInstance的实例或任何类。Entry

然后在视图中,使用类似$entry->Description

于 2013-01-06T23:39:09.573 回答
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()并将其放在代码的模型部分中。

于 2013-01-06T22:32:03.817 回答