2011-11-22 39 views
9

En Symfony2, ¿sabe cómo encontrar una ruta desde una url en el controlador? tengo este ejemplo:obtener ruta desde la 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 

me gustaría encontrar blog_show cuando tengo /blog/my-blog-post

Gracias

Respuesta

16

no sabe lo que tiene en ese $router, pero con el servicio de enrutador, Obtengo esto aquí:

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

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

Si desea el nombre de la ruta de la página actual por cierto y Puede leerlo desde el objeto de solicitud: $request->attributes->get('_route').

+0

$ enrutador: es ejemplo doc Symfony. Yo su ejemplo, ellos no muestran '_route'. Lo usaré, ¡gracias! ;) – bux

1

Recientemente descubrí que el método match() usa el MÉTODO HTTP de la solicitud actual para hacer coincidir la solicitud. Por lo tanto, si está realizando una solicitud PUT, intentará hacer coincidir la URL que ha proporcionado con un método PUT, lo que da como resultado una excepción MethodNotAllowedException (por ejemplo, obtener el referer).

Ver más en https://stackoverflow.com/a/16506062/100675

1

se puede obtener el mismo error si se utiliza rutas absolutas esto es lo que hice cuando sea necesario para que coincida con la de referencia

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

Bueno, pero no funciona si está utilizando otros entornos que no sean "dev" y "prod", que puede ser el caso para algunos desarrolladores. –

Cuestiones relacionadas