2013-01-03 68 views
7
if ($u = $this->generateUrl('_'.$specific.'_thanks')) 
    return $this->redirect($u); 
else 
    return $this->redirect($this->generateUrl('_thanks')); 

我不想重定向到_specific_thanks url時它存在。那麼如何檢查一個url是否存在?重定向之前檢查網址symfony2

當我這樣做,我有這個錯誤:

Route "_specific_thanks" does not exist.

回答

11

我不認爲有一個直接的方法來檢查,如果路由存在。但是你可以通過路由器服務尋找路由存在。

$router = $this->container->get('router'); 

然後,您可以得到一個路由集合,並呼籲get()對於給定的路線,如果它不存在,它返回null。

$router->getRouteCollection()->get('_'. $specific. '_thanks'); 
+0

完美的它爲我工作!只要'$ this-> container-> get('router');'用symfony 2.1.4 – Harold

+0

太好了!我更新了答案,以便它符合sf 2.1.4 :) $ this-> get('router')也可以工作,我認爲。 –

-3

試試這個:

if ($u == $this->generateUrl('_'.$specific.'_thanks')) 
+0

我真的不知道該如何解決這個問題......難道你真的懂代碼? – j0k

+0

我沒有symfony2的經驗。我看到裏面是否有條件他把任務,所以我認爲這可能是問題。我不知道$ this-> generateUrl()函數返回什麼。 – gezimi005

+0

您是否看到該作業是在條件內使用的?因此,使用'==='刪除作業... – j0k

1

嘗試這樣的事情,檢查路線存在的所有路由的數組中:

$router = $this->get('router'); 

    if (array_key_exists('_'.$specific.'_thanks',$router->getRouteCollection->all())){ 
     return $this->redirect($this->generateUrl('_'.$specific.'_thanks')) 
    } else { 
     return $this->redirect($this->generateUrl('_thanks')); 
    } 
+0

太快了。但不是'in_array('',array_keys())''你可以做'if(array_key_exists('_'。$ specific。'_ thanks',$ router-> getRouteCollection() - > all())' – Touki

+0

' - > all()'是性能殺手 –

+0

@AlainTiemblo我不確定它真的是一個性能殺手,@ ahmedSiouani的解決方案更簡潔,但代碼幾乎完成了同樣的事情,只是'isset'而不是'array_key_exists'。請參見https: //github.com/symfony/symfony/blob/2.8/src/Symfony/Component/Routing/RouteCollection.php#L93關於「all」的工作原理,真正的性能殺手是「getRouteCollection」,因爲如果它們是加載路由尚未加載。https://github.com/symfony/symfony/blob/2.8/src/Symfony/Component/Routing/Router.php#L190這已經導致我們在項目中出現一些真實的性能問題:) – Luke

0

你檢查你的施法? 你確定路線嗎?通常路由始於

'WEBSITENAME_'.$specific.'_thanks'

8

在運行時使用getRouteCollection()不正確的解決方案。執行此方法將需要重建緩存。這意味着路由緩存將在的每個請求上重建,使您的應用比需要的慢得多。

如果你想檢查路由器是否存在,使用try ... catch構造:

use Symfony\Component\Routing\Exception\RouteNotFoundException; 

try { 
    dump($router->generate('some_route')); 
} catch (RouteNotFoundException $e) { 
    dump('Oh noes, route "some_route" doesn't exists!'); 
}