php – 使用自定义验证约束检查数据库中是否存在条目
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 使用自定义验证约束检查数据库中是否存在条目,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3114字,纯文字阅读大概需要5分钟。
内容图文
![php – 使用自定义验证约束检查数据库中是否存在条目](/upload/InfoBanner/zyjiaocheng/902/c81f3ad8cf264c1ca3e9daaf29e6b2c0.jpg)
所以在我的Symfony应用程序中,我有一个名为Post的实体.
我的帖子实体具有以下属性:
post_start,post_end等等.
实体:
/**
* @ORM\Entity
* @ORM\Table(name="post")
*/
class Post
{
/**
* @var int
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var DateType
* @ORM\Column(type="date")
*/
private $post_start;
/**
* @var DateType
* @ORM\Column(type="date")
* @Assert\GreaterThanOrEqual(propertyPath="post_start")
*/
private $post_end;
.....
}
FORMTYPE:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add(
'post_start',
DateType::class,
[
'widget' => 'single_text',
'format' => 'dd.MM.yyyy',
'required' => true,
'attr' => [
'class' => 'form-control input-inline datepicker',
'data-provide' => 'datepicker',
'data-date-format' => 'dd.mm.yyyy',
]
]
);
$builder->add(
'post_end',
DateType::class,
[
'widget' => 'single_text',
'format' => 'dd.MM.yyyy',
'required' => true,
'attr' => [
'class' => 'form-control input-inline datepicker',
'data-provide' => 'datepicker',
'data-date-format' => 'dd.mm.yyyy'
]
]
);
$builder->add('submit', SubmitType::class, [
'label' => 'save post',
'attr' => array('class' => 'btn btn-success')
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Post::class
]);
}
当我提交表单时,我想检查数据库是否已经有一个具有相同startdate和enddate的条目以及来自同一用户的cource.
1. If YES -> Show error message
2. If NO -> Create post request.
当条目已经存在,但它来自不同的用户时,请继续创建帖子.
我想用自定义验证器约束来做到这一点.但接下来发生的事情我必须以某种方式比较数据
ContainsEqualDate:
/**
* @Annotation
*/
class ContainsEqualDate extends Constraint
{
public $message = 'Post request is already exists.';
public function getTargets()
{
return self::CLASS_CONSTRAINT;
}
}
ContainsEqualDateValidator:
class ContainsEqualDateValidator extends ConstraintValidator
{
/**
* @var ORMUserRepository
*/
private $userRepository;
/**
* @var ORMPostRepository
*/
private $postRepository;
/**
* @param ORMUserRepository $userRepository
* @param ORMPostRepository $postRepository
*/
public function __construct(ORMUserRepository $userRepository, ORMPostRepository $postRepository)
{
$this->userRepository = $userRepository;
$this->postRepository = $postRepository;
}
/**
* Checks if the passed value is valid.
*
* @param mixed $value The value that should be validated
* @param Constraint $constraint The constraint for the validation
*/
public function validate($value, Constraint $constraint)
{
$userId = $this->getUser();
$postExists = $this->postRepository->findBy(array(
'post_start' => $value,
'app_user_id' => $userId
));
}
/**
* @return User
*/
private function getUser(): User
{
return $this->storage->getToken()->getUser();
}
}
}
解决方法:
@Max Trui,您还没有提到数据库中的User和Post实体是如何相关的.
如果您在Post Entity中有UserId,则可以执行以下操作.
$userId = $this->userRepository->getUser()->getId();
$entryExists = ($this->postRepository->findBy(array('post_start' => $value, 'user_id' => $userId)) == null) ? true : false;
您可以使用动态fieldname值(post_start或post_end)替换’post_start’,您可以从调用验证器的位置提供该值.
如果要同时检查两个日期,请在验证程序中提供这两个值.
内容总结
以上是互联网集市为您收集整理的php – 使用自定义验证约束检查数据库中是否存在条目全部内容,希望文章能够帮你解决php – 使用自定义验证约束检查数据库中是否存在条目所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。