Проверка пользовательского контроллера не работает Api-платформа

#php #api #symfony #validation #api-platform.com

#php #API #symfony #проверка #api-platform.com

Вопрос:

Здравствуйте, я пытаюсь проверить проверку сущности пользователя, но только одно свойство с запросом ИСПРАВЛЕНИЯ, но я получаю Cannot validate values of type "NULL" automatically. Please provide a constraint.

Я получаю тот же результат, даже если удаляю Default из validation_groups

ваша помощь очень ценится.

Приложение Сущность Пользователь

      /**
         * @ORMEntity(repositoryClass="AppRepositoryUserRepository")
         * @ApiResource(
         *     itemOperations={
         *          "get",
         *          "put" = {
         *              "method" = "PUT",
         *              "security"="(is_granted('ROLE_ADMIN') and object.getAssociation() == user.getAssociation())",
         *              "security_message"="Only Admin or the owner can edit this field",
         *              "denormalization_context"={"groups"={"user:update"}, "disable_type_enforcement"=true},
         *              "validation_groups"={"Default", "user_update"}
         *          },
         *          "patch_add_new_member_to_pay" = {
         *              "method" = "PATCH",
         *              "path" = "/users/{id}/addNewMemberToPay",
         *              "controller" = PayingMembershipForOthersController::class,
         *              "denormalization_context" = {"groups" = {"add_new_member_to_pay"}},
         *              "validation_groups" = {"Default", "add_new_member_to_pay"}
         *          }
         *      },
         *     collectionOperations={
         *          "get",
         *          "post" = {
         *               "method" = "POST",
         *               "security"="is_granted('ROLE_ADMIN')",
         *               "denormalization_context"={"groups"={"user:create"}, "disable_type_enforcement"=true},
         *               "validation_groups"={"Default", "user_create"}
         *          },
         *      },
         *      normalizationContext={"groups"={"user:read"}}
         * )
         */

    
    class User {
       /**
         * @ORMId()
         * @ORMGeneratedValue()
         * @ORMColumn(type="integer")
         *
         * @Groups({"user:read"})
         */
        private ?int $id = null;

       /**
         * @ORMColumn(type="string", length=100)
         * @AssertNotBlank(groups={"user_create", "user_update"})
         * @AssertRegex(pattern="/d/", match=false, message="Your name should not contain numbers")
         * @Groups({"user:read", "user:create", "user:update"})
         */
        private ?string $fullname;
    
       /**
         * @Groups({"add_new_member_to_pay"})
         * @AssertNotNull(groups={"add_new_member_to_pay"})
         */
        private ?string $payForNewMember = null;
        
        ...getters and setters
   }

   
  

App Controller PayingMembershipForOthersController

 namespace AppController;

use ApiPlatformCoreValidatorValidatorInterface;
use AppEntityUser;
use SymfonyComponentHttpFoundationRequest;

class PayingMembershipForOthersController
{

    private ValidatorInterface $validator;

    public function __construct(ValidatorInterface $validator)
    {
        $this->validator = $validator;
    }

    public function __invoke(User $data, Request $request)
    {
        $this->validator->validate($data);
    }

}
  

поэтому по назначению я установил {"payForNewMember": ""} проверку пустого значения, чтобы не показывать список нарушений

Ответ №1:

Ваш пользовательский контроллер должен вернуть пользователя или ответ.

 class PayingMembershipForOthersController
{

    private ValidatorInterface $validator;

    public function __construct(ValidatorInterface $validator)
    {
        $this->validator = $validator;
    }

    public function __invoke(User $data)
    {
        $this->validator->validate($data);
        return $data;
    }

}
  

Комментарии:

1. Можем ли мы вернуть статус 204 (нулевой ответ)?

2. я думаю, вам просто нужно установить для параметра «read» значение false для вашего объекта / ресурса api