2011-11-22 17 views
9

Trong Symfony2, bạn có biết cách tìm tuyến đường từ url trong bộ điều khiển không? Tôi có ví dụ này:nhận tuyến đường từ 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 

Tôi muốn tìm blog_show khi tôi có /blog/my-blog-post

Cảm ơn bạn

Trả lời

16

Tôi không biết những gì bạn có trong $router đó, nhưng với dịch vụ định tuyến, Tôi nhận được thông tin này tại đây:

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

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

Nếu bạn muốn tên tuyến đường của trang hiện tại theo cách y Bạn có thể đọc nó từ đối tượng yêu cầu: $request->attributes->get('_route').

+0

$ router: đó là symfony dụ doc. Tôi ví dụ của họ họ không hiển thị '_route'. Tôi sẽ sử dụng nó, cảm ơn bạn! ;) – bux

1

Gần đây tôi đã phát hiện ra rằng phương thức match() sử dụng HTTP PHƯƠNG PHÁP của yêu cầu hiện tại để khớp với yêu cầu. Vì vậy, nếu bạn đang làm một yêu cầu PUT ví dụ, nó sẽ cố gắng để phù hợp với URL bạn đã đưa ra với một phương pháp PUT, dẫn đến một ngoại lệ MethodNotAllowedException (ví dụ, nhận được referer).

Xem thêm tại https://stackoverflow.com/a/16506062/100675

1

bạn có thể nhận được lỗi tương tự nếu sử dụng đường dẫn tuyệt đối này là những gì tôi đã làm khi cần thiết để phù hợp với giới thiệu

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

Đẹp nhất nhưng nó không hoạt động nếu bạn đang sử dụng các môi trường khác hơn là "dev" và "prod", có thể là trường hợp đối với một số nhà phát triển. –

Các vấn đề liên quan