检查空值保存到多个表与ZF2

检查空值保存到多个表与ZF2

问题描述:

我使用ZF2和mysql的时候,但问题是平台无关的。我有一个数据传输对象Organization从html表单获取水分。 OrganizationMapper具有save方法,该方法(1)得到Organization作为参数和(2)一个填充一个接一个地对夫妇数据库表。检查空值保存到多个表与ZF2

假设第一个表格被填满,但第二个并不是因为Organization的其中一个属性没有设置(对列没有空限制)。用户遇到错误,但第一个表已经填满。如果他试图再次提交表单,但是这次填充了所有的html字段,所有表格都会被填满,但第一个表格中有一个未使用的行。

我怎么能避免这种情况?

我想到在0123per的映射器的save方法中检查empty值,但它看起来并不高雅。我知道ZF2中的InputFilter验证,但是这些验证用户在表单中的输入,当php代码与数据库通信时,它们不检查事情。

任何帮助?

最好的办法是启动它写入数据库之前验证所有数据。

我没有使用ZF2并且这种解决方案实际上是架构相关的,所以你需要检查ZF2文档。例如,在Yii中,您只需为模型的每个字段定义验证规则,因此您可以确保在开始将其保存到数据库之前包含所有数据,可能在Zend中可能有类似的情况。

请注意,验证并不意味着只检查空值,您可能需要验证不同的内容,例如:“电子邮件是正确的电子邮件,如[email protected]”,“名称不为空”,“名称长度大于3个字符“,”名称长度小于1000个字符“等。

对于Yii的它大致是这样的:

class Organization extends ActiveRecord { 
    ... 
    // here we define the validation rules 
    public function rules() { 
     return [ 
      // name is required 
      ['name', 'required'], 
      // check min/max length 
      ['name', 'string', 'min' => 3, 'max' => 12], 
      // check if email is valid 
      ['email', 'email'] 
     ]; 
    } 
} 

现在你可以做$organization->validate()以确保一切是正确的(也当你做$organization->save()规则将保存到数据库前要检查)。

还有一解决方案从不一致的数据保护方法是使用交易。如果您写入多个表格,无论如何您都需要它们,即使您验证了所有内容。意想不到的事情发生,所以它是更好地保护您节省这样的代码(伪代码):

$transaction->start(); 
try { 
    $table1->writeSomeData(); 
    $table2->writeMoreData(); 
    $transaction->commit(); 
} (catch Exception $e) { 
    $transaction->rollback(); 
} 

再次,检查你的框架文件,它可能支持这种以某种方式。