Проверка платформы API не блокирует пользовательскую операцию - PullRequest
0 голосов
/ 04 августа 2020

Я создал специальную операцию и проверил столбцы. Требуется проверка. Проверка работает нормально и показывает сообщения об ошибках, но операция продолжает выполнение, что странно.

Мой код:

    <?php
   
    namespace App\Entity;
   /**
     * @ApiResource(
     *     collectionOperations={
     *          "add_voucher"={
     *                 "access_control"="is_granted('ROLE_COMMERCIAL')",
     *                 "method"="POST",
     *                 "path"="/vouchers/add-new",
     *                 "controller"=AddVoucherAction::class,
     *                 "security_post_denormalize_message"="Sorry, Only Commercials can Generate Vouchers",
     *                  "denormalization_context"={
     *                      "groups"={"add_new_voucher"}
     *               },
     *                  "validation_groups"={"Default", "add_voucher_validation"}
     *         },
     *          "get"={
     *               "method"="GET",
     *                "normalization_context"={
     *                      "groups"={"vouchers_list"}
     *                   },
     *                },
     *     },
     * )
     * @ApiFilter(SearchFilter::class, properties={"code": "start", "client.firstName":"start"})
     * @ORM\Entity(repositoryClass="App\Repository\VoucherRepository", repositoryClass=VoucherRepository::class)
     */
    class Voucher
    {
        /**
         * @ORM\Id()
         * @ORM\GeneratedValue()
         * @ORM\Column(type="integer")
         */
        private $id;
    
        /**
         * @Groups({"add_new_voucher", "vouchers_list"})
         * @ORM\Column(type="string", length=255, unique=true)
         */
        private $code;
    
        /**
         * @Groups({"vouchers_list","add_new_voucher"})
         * @ORM\Column(type="integer")
         */
        private $discount;
    
        /**
         * @Groups({"vouchers_list","add_new_voucher"})
         * @OneToOne(targetEntity="App\Entity\Client")
         * @Assert\Valid()
         * @JoinColumn(name="client_id", referencedColumnName="id")
         */
        private $client;
    }

Пользовательское действие:

public function __invoke(Request $request, Voucher $data)
    {
        $requestData = json_decode($request->getContent(), true);
        $request->request->replace(is_array($requestData) ? $requestData : array());
        $email = $request->request->get('email');
        if ($request->request->get('email') === null) {
            return new JsonResponse(
                [
                    "error" => "Empty Email",
                    "message" => "The email is required !"
                ]
                , Response::HTTP_BAD_REQUEST);
        }
        $firstName = $request->request->get('firstName');
        $lastName = $request->request->get('lastName');
        $phone = $request->request->get('phone');
        $user = $this->userRepository->findOneBy(['email' => $email]);
        if ($user) {
            return new JsonResponse(
                [
                    "error" => "User exist",
                    "message" => "This email is already used !"
                ]
                , Response::HTTP_BAD_REQUEST);
        }
        // User Creation
        $user = new Client();
        $user->setEmail($email);
        $user->setFirstname($firstName);
        $user->setLastname($lastName);
        $user->setPhone($phone);
        $this->entityManager->persist($user);
        $this->entityManager->flush();
        // Other code here not important
        return $user;
    }

В первый раз, когда я отправляю метод публикации, я получаю ошибки проверки правильно, но во второй раз с теми же данными я получаю сообщение Это электронное письмо уже используется!

...