gpt4 book ai didi

php - 学说 2 验证

转载 作者:可可西里 更新时间:2023-11-01 13:23:26 27 4
gpt4 key购买 nike

我在验证方面遇到问题。在 Doctrine 1 中,我使用了这个:

if ($model->isValid()) {
$model->save();
} else {
$errorStack = $model->getErrorStack();
...
}

在 $errorStack 中,我得到了列名和错误消息。但是在 Doctrine 2 中我可以只使用它:

实体

/**
* @PrePersist @PreUpdate
*/
public function validate()
{
if ($this->name == null)) {
throw new \Exception("Name can't be null");
}
}

Controller :

try {
$user = new \User();
//$user->setName('name');
$user->setCity('London');
$this->_entityManager->persist($user);
$this->_entityManager->flush();
} catch(Exception $e) {
error_log($e->getMessage());
}

但是我有两个问题:

  • 我不知道是哪一栏?
  • 我不想手动检查唯一性

如果我从实体中跳过 validate() 将捕获唯一性(从这个 error.log)

Unique violation: 7 ERROR:  duplicate key value violates unique constraint "person_email_uniq"

但是例如用户保存了 2 条记录,第一个是错误的,但第二个是有效的,在第一次保存后 EntityManager 将关闭并且我无法保存第二个(好的)记录,因为“EntityManager 已关闭” .

哪个是这个问题的最佳解决方案?

最佳答案

在 D2 中有几种验证方法: - 与您在帖子中描述的一个实体相关的业务逻辑 - 基于听众的验证,检查http://www.doctrine-project.org/docs/orm/2.0/en/reference/events.html#preupdate , ValidCreditCardListener 示例 - 基于第三方库的验证,这里描述了类似的东西: Zend_Validate_Db_RecordExists with Doctrine 2?Zend_Validate: Db_NoRecordExists with Doctrine如果您使用特定的框架来呈现表单,您可以将验证集成到其中。

我在实体中对与一个实体相关的业务逻辑使用了验证:

/**
* @PrePersist @PreUpdate
*/
public function validate()
{
$this->errors = array();
if ($this->name == null)) {
$this->errors['name'][] = 'Something wrong';
}
if (0 < count($errors)) {
throw new Exception('There are errors');
}
}

public function getErrors()
{
return $this->errors;
}

和监听器验证强制执行一些规则,例如唯一性,因为在我的应用程序中,实体不仅可以基于表单创建。

关于php - 学说 2 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6082815/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com