zend-blog-3-backend
48 строк · 1.2 Кб
1<?php
2
3namespace App\ArgumentResolver;
4
5use App\Entity\Post;
6use App\Repository\PostRepository;
7use Symfony\Component\HttpFoundation\Request;
8use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface;
9use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
10
11class PostValueResolver implements ArgumentValueResolverInterface
12{
13/**
14* @var PostRepository
15*/
16private $repository;
17
18public function __construct(PostRepository $repository)
19{
20$this->repository = $repository;
21}
22
23/**
24* @param Request $request
25* @param ArgumentMetadata $argument
26*
27* @return bool
28*/
29public function supports(Request $request, ArgumentMetadata $argument)
30{
31if (Post::class !== $argument->getType()) {
32return false;
33}
34
35return $request->attributes->has('slug');
36}
37
38/**
39* @param Request $request
40* @param ArgumentMetadata $argument
41*
42* @return \Generator
43*/
44public function resolve(Request $request, ArgumentMetadata $argument)
45{
46yield $this->repository->findOneBy(['url' => $request->attributes->get('slug')]);
47}
48}
49