Как использовать проверку Symfony с данными json - PullRequest
0 голосов
/ 17 июня 2020

Когда я использую Symfony v5.1 массив проверки коллекции, я получил странный ответ.

Это мой код

   $constraint = new Assert\Collection([
        'email' => new Assert\Email(),
        'password' => new Assert\Length(['min' => 60]),
    ]);

    $violations = $validator->validate($request->request->all() , $constraint);

    foreach($violations as $violation)
    {
        $errors[] = [$violation->getPropertyPath() => $violation->getMessage()];
    }

    dd($errors);

, и это результат, который я получил :

 array:5 [
  0 => array:1 [
    "[password]" => "This value is too short. It should have 60 characters or more."
  ]
  1 => array:1 [
    "[name]" => "This field was not expected."
  ]
  2 => array:1 [
    "[phone_number]" => "This field was not expected."
  ]
  3 => array:1 [
    "[username]" => "This field was not expected."
  ]
  4 => array:1 [
    "[role_id]" => "This field was not expected."
  ]
]

, поэтому мне интересно, почему имя входа меняет местами в array [] [name], так что я что-то сделал не так?

И почему Symfony ориентирован на сущность validation, а не на request как Laravel фреймворк?

1 Ответ

0 голосов
/ 21 июня 2020

Я нашел действительно пакет, реализующий то, что мне нужно, он просто работает как Laravel и так легко проверяет запрос https://github.com/fesor/request-objects, но он не работает на Symfony 5, поэтому я его обновил для совместимости с v5 с некоторыми изменениями https://github.com/TheGeekyM/symfony-object-request-validation.

вы просто вызываете запрос в управляемом

namespace App\Controlles;

public function registerUserAction(RegisterUserRequest $request)
{
    // Do Stuff! The data is already validated!
}

, и это запрос с проверками

use Fesor\RequestObject\RequestObject;
use Symfony\Component\Validator\Constraints as Assert;

class RegisterUserRequest extends RequestObject
{
    public function rules()
    {
        return new Assert\Collection([
            'email' => new Assert\Email(['message' => 'Please fill in valid email']),
            'password' => new Assert\Length(['min' => 4, 'minMessage' => 'Password is to short']),
            'first_name' => new Assert\NotNull(['message' => 'Please provide your first name']),
            'last_name' => new Assert\NotNull(['message' => 'Please provide your last name'])
        ]);
    }
}

и все, наслаждайтесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...