Я имел similar issue, но с использованием Symfony 3. Хотя ускользал в предыдущем ответе, это было немного сложно, чтобы выяснить, как именно можно было бы использовать request_stack
для достижения тех же вещей, как scope: request
.
В случае на этот вопрос, это будет выглядеть примерно так:
services.yml конфигурации
services:
myservice:
class: My\MyBundle\MyService
arguments:
- '@request_stack'
- '@router'
А Класс MyService
<?php
namespace My\MyBundle;
use Symfony\Component\Routing\RequestContext;
class MyService {
private $requestStack;
private $router;
public function __construct($requestStack, $router) {
$this->requestStack = $requestStack;
$this->router = $router;
}
public doThing() {
$context = new RequestContext();
$context->fromRequest($this->requestStack->getCurrentRequest());
$this->router->setContext($context);
// of course, the die is an example
die($this->router->generate('BackoffUserBundle.Profile.edit'));
}
}
Примечание: Доступ к RequestStack в конструктор advised against, поскольку он может попытаться получить к нему доступ до обработки запроса по ядру. Поэтому при попытке получить объект запроса из RequestStack он может вернуть значение null.
Не могли бы вы вставить код, в котором вы создаете URL-адреса? –
Если вы заходите на свой сайт через 'http: // test/app_dev.php', ссылки будут с app_dev.php. Для 'http: // test' они будут без app_dev.php ... – meze
@kuba: Я отредактировал мой вопрос. –