ok puoi ottenere il nome del percorso corrente con app.request.attributes.get('_route')
ma non è possibile ottenere da un URL?Symfony2 Ottieni il nome del percorso dall'URL
Qualcosa come app.request.attributes.get('/about')
?
ok puoi ottenere il nome del percorso corrente con app.request.attributes.get('_route')
ma non è possibile ottenere da un URL?Symfony2 Ottieni il nome del percorso dall'URL
Qualcosa come app.request.attributes.get('/about')
?
È possibile utilizzare il Router
classe/servizio per questo:
public function indexAction()
{
$router = $this->get('router');
$route = $router->match('/foo')['_route'];
}
maggiori informazioni in the documentation
Recentemente ho scoperto che il metodo match() utilizza il metodo HTTP della richiesta corrente, al fine di abbinare la richiesta. Quindi, se stai facendo una richiesta PUT ad esempio, cercherà di abbinare l'URL che hai fornito con un metodo PUT, risultando in un'eccezione MethodNotAllowedException (ad esempio, ottenendo il riferimento).
Per evitare questo sto usando questa soluzione:
// set context with GET method of the previous ajax call
$context = $this->get('router')->getContext();
$currentMethod = $context->getMethod();
$context->setMethod('GET');
// match route
$routeParams = $this->get('router')->match($routePath);
// set back original http method
$context->setMethod($currentMethod);
Tuttavia non può essere vero che è sempre una richiesta GET. Potrebbe essere una richiesta POST nel tuo caso.
Ho inviato questo problema alla comunità Symfony. Vediamo cosa propongono.
È possibile forzare invece il metodo 'HEAD'' GET'. Se controlli 'appDevUrlMatcher.php' o' appProdUrlMatcher.php' nei tuoi file cache, vedrai che il metodo 'HEAD' è sempre consentito per tutti i percorsi. Con questo non sarà più necessario stimare quale metodo utilizzare per abbinare il referente. – Elorfin
mi è stato sempre il MethodNotAllowed anche con metodi corrispondenti quando si utilizzano percorsi assoluti ho lavorato intorno ad esso come questo
$ref = str_replace("app_dev.php/", "", parse_url($request->headers->get('referer'),PHP_URL_PATH));
$route = $this->container->get('router')->match($ref)['_route'];
è un lavoro thx: =) – altore
Ho usato questo ma non è valida. Il servizio Route in Symfony ha lo stato della richiesta corrente. Per ottenere il percorso reale è necessario impostare il contesto creato dalla richiesta con il metodo HTTP che può essere POST, PATCH o PUT o qualsiasi altro. –