miałem similar issue, ale przy użyciu Symfony 3. Podczas wymykał się w poprzedniej odpowiedzi, to było trochę trudne, aby dowiedzieć się, jak dokładnie można by użyć request_stack
osiągnąć to samo, co scope: request
.
W przypadku na to pytanie jest, że to wyglądać mniej więcej tak:
services.yml config
services:
myservice:
class: My\MyBundle\MyService
arguments:
- '@request_stack'
- '@router'
a klasa 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'));
}
}
Uwaga: Dostęp RequestStack w konstruktorem jest advised against, ponieważ może on potencjalnie próbować uzyskać do niego dostęp, zanim żądanie zostanie obsłużone przez jądro. Więc może zwrócić wartość null podczas próby pobrania obiektu żądania z RequestStack.
Czy możesz wkleić kod, w którym generujesz adresy URL? –
Jeśli uzyskujesz dostęp do swojej witryny za pomocą 'http: // test/app_dev.php', to linki będą z app_dev.php. Dla 'http: // test' będą one bez app_dev.php ... – meze
@kuba: Edytowałem moje pytanie. –