2013-03-27 22 views
6

app.request.attributes.get('_route') ile geçerli rota ismini öğrenebilirsiniz, fakat bir URL'den almak mümkün değil midir?Symfony2 URL ile yol tarifi al

app.request.attributes.get('/about') gibi bir şey?

cevap

15

Bunun için Router sınıf/hizmet kullanabilirsiniz:

public function indexAction() 
{ 
    $router = $this->get('router'); 
    $route = $router->match('/foo')['_route']; 
} 

fazla bilgi

+0

gibi etrafında çalıştı mutlak yolları kullanırken yöntemleri eşleşen MethodNotAllowed başlamıştı: =) – altore

+0

bunu kullandım ama geçerli değil. Symfony'deki Rota servisi mevcut talep durumuna sahiptir. Gerçek rotayı elde etmek için POST, PATCH veya PUT veya başka herhangi bir şekilde olabilecek HTTP yöntemiyle istekte oluşturulan bağlamı ayarlamanız gerekir. –

7

the documentation yılında Geçenlerde maçı() yöntemi için mevcut isteğin HTTP YÖNTEMİ kullanır keşfetti isteği eşleştirin. Örneğin, bir PUT isteği yapıyorsanız, bir PUT yöntemiyle verdiğiniz URL'yi eşleştirmek için bir MethodNotAllowedException istisnasıyla sonuçlanacaktır (örneğin, başvuru sahibinin alınması).

Bu geçici çözümü kullanıyorum Bunu önlemek için: o zaman bir GET isteği olduğu doğrudur olmayabilir Ancak

// 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); 

. Davanızda bir POST talebi olabilir.

Bu sorunu Symfony topluluğuna gönderdim. Ne önerdiklerini görelim.

+0

'HEAD' yöntemini 'GET' yerine zorlayabilirsiniz. Önbellek dosyalarınızda 'appDevUrlMatcher.php' veya' appProdUrlMatcher.php' seçeneğini işaretlerseniz, 'HEAD' yönteminin her yol için her zaman izinli olduğunu görürsünüz. Bununla birlikte, hangi yöntemin başvurucuyu eşleştirmek için kullanıldığını tahmin etmeniz gerekmeyecektir. – Elorfin

3

ben bile o iş thx var bu

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