(Symfony 4) Как я могу получить базовый URI моего проекта (http://www.yourwebsite.com/) из неконтроллерного класса? - PullRequest
0 голосов
/ 27 февраля 2019

Как я могу получить "http://www.yourwebsite.com" из моего класса репозитория в Symfony 4?

Причина, по которой мне нужно это сделать, заключается в том, что я использую сервис изображений Liip, который возвращаетвесь URL, и мне нужен только URL относительно корня, поэтому я должен удалить "http://www.yourwebsite.com" из возвращенного пути.

Я использовал KernelInterface, и он возвращает только путь изв вашей машине (то есть var / www / ... в вашей машине).

Я пытался внедрить объект запроса http Foundation, чтобы я мог вызвать метод getPathInfo (), вот что я имею в своем классе репозитория:

use Symfony\Component\HttpFoundation\Request;

class PhotoRepository extends ServiceEntityRepository
{ 
    /**
     * @var Request
     */
    protected $request;

    public function __construct(Request $request){
        $this->request = $request;
    }

Но я просто получаю ошибкуCannot autowire service "App\Repository\PhotoRepository": argument "$request" of method "__construct()" references class "Symfony\Component\HttpFoundation\Request" but no such service exists.

Вот что я имею в разделе «services» в моих services.yaml:

App\Repository\PhotoRepository:
    arguments:
        - Symfony\Component\HttpFoundation\Request  

Вот полный путь к моему сгенерированному файлу:

"http://www.mywebsite.com/media/cache/my_thumb/tmp/phpNbEjUt"

Мне нужно разобрать, получить <a href="http://www.mywebsite.com" rel="nofollow noreferrer">http://www.mywebsite.com</a> и просто получить /media/cache/my_thumb/tmp/phpNbEjUt с пути.

1 Ответ

0 голосов
/ 27 февраля 2019

Как уже писал Cerad в комментариях, вы можете добавить Symfony\Component\HttpFoundation\RequestStack:

App\Repository\PhotoRepository:
    arguments:
        - Symfony\Component\HttpFoundation\RequestStack
        - Doctrine\Common\Persistence\ManagerRegistry

Ваш конструктор для PhotoRepository будет выглядеть примерно так:

class PhotoRepository extends ServiceEntityRepository
{ 
    /**
     * @var RequestStack
     */
    protected $requestStack;

    public function __construct(RequestStack $requestStack, ManagerRegistry $managerRegistry)
    {
        parent::__construct($managerRegistry, Photo::class);

        $this->requestStack = $requestStack;
    }

    ...
}

Вы можетезатем определите текущий URL, используя что-то вроде этого:

private function getCurrentUrl(): string
{
    $request = $this->requestStack->getCurrentRequest();

    return $request->getBaseUrl(); // or possibly getUri()
}
...