#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