2013-03-27 23 views

risposta

15

È 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

+0

è un lavoro thx: =) – altore

+0

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. –

7

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.

+0

È 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

3

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']; 
Problemi correlati