Tôi đang làm việc trong một nhóm mà người dùng tạo "sự đồng ý" bằng biểu mẫu và tôi đang cố gắng kiểm tra xem người dùng vẫn có "tín dụng" hay không. Vì vậy, tôi đã tạo trình xác thực tùy chỉnh truy vấn các giao dịch trong quá khứ và đưa ra lỗi nếu tín dụng không đủ.Xác thực Symfony
Vấn đề của tôi là nếu người dùng gửi ngày có định dạng sai trong trường "ngày" (tức là 32-13-20122 24:05) Symfony vẫn cố chạy xác thực tùy chỉnh của tôi và tôi nhận được tất cả các loại lỗi (vì $comision->getDate()
là null
và không phải là đối tượng DateTime hợp lệ).
Tôi nhận được lỗi này:
clone method called on non-object
Tôi cũng có thể kiểm tra xem giá trị của $comision->getDate()
là một datetime hợp lệ trong validator tùy chỉnh của tôi, nhưng có vẻ như với tôi rằng nó nên không cần thiết kể từ khi tôi thêm này quy tắc trong thuộc tính ngày.
Đây là thực thể của tôi (giản thể)
/**
* @MyValidation\TotalHours()
*/
class Comision
{
/**
* @ORM\Column(type="datetime")
* @Assert\DateTime()
* @Assert\NotNull()
*/
protected $date;
/**
* @ORM\Column(type="decimal", nullable=false, scale=1)
* @Assert\NotBlank()
*/
protected $hours;
...
lớp mẫu My ...
class NewComisionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('date', DateTimeType::class, array(
'widget' => 'single_text',
'label' => 'Starting date and time',
'format' => 'dd/MM/yyyy HH:mm'
))
->add('hours', ChoiceType::class, array(
'label'=> 'How many hours',
'choices' => array(
'1:00' => 1,
'1:30' => 1.5,
'2:00' => 2,
'2:30' => 2.5,
'3:00' => 3
)
))
...
Và validator cutom của tôi để kiểm tra comisions qua để tìm thấy nếu người dùng vẫn có "tín dụng"
public function validate($comision, Constraint $constraint)
{
$from = clone $comision->getDate();
$from->modify('first day of this month');
$to = clone $comision->getDate();
$to->modify('last day of this month');
$credit = $this->em->getRepository("ComisionsBundle:Comision")->comisionsByDate($comision,$from, $to);
...
Tại sao bạn không thêm xác thực cho ngày? https://symfony.com/doc/current/reference/constraints/Date.html Hoặc có thể trong trình xác thực tùy chỉnh – kunicmarko20
Tôi đã làm (tôi đang chỉnh sửa câu hỏi của mình để thêm nó) nhưng nó không có hiệu lực. Dường như nó chạy tất cả các quy tắc xác nhận ngay cả khi không có datetime hợp lệ sau khi chuyển đổi dữ liệu. –