2011-11-22 11 views
9

In Symfony2, sai come trovare un percorso da un URL nel controller? Ho questo esempio:get route dall'URL

$params = $router->match('/blog/my-blog-post'); 
// array('slug' => 'my-blog-post', '_controller' => 'AcmeBlogBundle:Blog:show') 

$uri = $router->generate('blog_show', array('slug' => 'my-blog-post')); 
// /blog/my-blog-post 

vorrei trovare blog_show quando ho /blog/my-blog-post

Grazie

risposta

16

Non so quello che hai in quel $router, ma con il servizio router, Ho capito:

$this->get('router')->match('/') 

array 
    '_controller' => string 'Namespace\Foo\MyController::indexAction' 
    '_route' => string 'home' 

Se si desidera il nome del percorso della pagina corrente a proposito y puoi solo leggerlo dall'oggetto della richiesta: $request->attributes->get('_route').

+0

$ router: è ad esempio doc symfony. Il loro esempio non mostrano "_route". Lo userò, grazie! ;) – bux

1

Recentemente ho scoperto che il metodo match() utilizza il METODO HTTP della richiesta corrente per far corrispondere 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).

Tutte in https://stackoverflow.com/a/16506062/100675

1

si può ottenere lo stesso errore se si utilizza percorsi assoluti questo è quello che ho fatto quando necessario per abbinare il referrer

$ref = str_replace("app_dev.php/", "", parse_url($request->headers->get('referer'),PHP_URL_PATH)); 
$route = $this->container->get('router')->match($ref)['_route']; 
+0

Bello, ma non funziona se si utilizzano ambienti diversi da "dev" e "prod", il che potrebbe essere il caso per alcuni sviluppatori. –

Problemi correlati