我将继续学习symfony,这次我想了解如何在存储请求发布数据之前正确验证它。我正在努力拥有尽可能小的控制器。我读过关于DTO的文章。(使用它来实现验证(。我还看到,我们可以使用实体注释来验证请求。示例:
use SymfonyComponentValidatorConstraints as Assert;
class Author
{
/**
* @AssertNotBlank
*/
private $name;
}
请给我一些如何在symfony rest api中验证传入请求数据的例子。作为一名Laravel开发人员,我可以说我们可以这样做:
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
// The blog post is valid...
}
或者我们可以使用TypeHinting:
public function store(StorePostRequest $request)
{
// The incoming request is valid...
// Retrieve the validated input data...
$validated = $request->validated();
}
我们如何在symfony中做到这一点,以节省瘦控制器的想法?
您可以在实体中使用Assert注释,并在控制器中使用ValidatorInterface:
public function store(Request $request, ValidatorInterface $validator): json {
$author = new Author();
$author->setName($request->get('name'));
// ... Hydrate $author properties ...
$errors = $validator->validate($author);
if (count($errors) > 0) {
$errorsString = (string) $errors;
return $this->json(['status' => 'error', 'message' => $errorsString]);
}
return $this->json(['status' => 'success', 'author' => $author);
}