2014-03-06 22 views
1

所以我正在開發一個Symfony2應用程序。如果你知道我在說什麼,你就知道路由結構如何,所以我需要提取路由及其控制器和操作。PHP正則表達式從字符串中提取控制器和動作

我發現如何提取路由對象,但我不能提取控制器和動作,但我有他們的字符串。

所以我有這個字符串:Acme\SomeBundle\Controller\DefaultController::indexAction

所有的字符串具有類似的結構。所有字符串以ControllerName :: ActionName結尾。控制器名稱始終以「Controller」結尾,動作名稱始終以「Action」結尾。所以我不知道如何從字符串中提取這些值。我是新來的正則表達式,我讀過它,但我沒有任何線索如何做到這一點。請幫助我,任何幫助apreciated :)

例字符串:

`Emca\AnotherBundle\Controller\SecurityController::loginAction` 

輸出示例:

SecurityController 
loginAction 

我認爲你不能做到這一點只有一個正則表達式,但兩者可能不夠。謝謝!

+0

你不能使用symfony中的路由器呢? http://symfony.com/doc/current/components/routing/introduction.html#usage或請求對象?他們已經爲你做了這項工作。 – vascowhite

+0

#vascowhite我需要提取所有路由及其操作。所以我不能根據請求做到這一點。 –

回答

1

的例子可以在symfony中的ControllerNameParser類中找到:

$controller = 'Acme\YourBundle\Controller\SecurityController::loginAction'; 

if (0 === preg_match('#^(.*?\\\\Controller\\\\(.+)Controller)::(.+)Action$#', $controller, $match)) { 
    throw new \InvalidArgumentException(sprintf('The "%s" controller is not a valid "class::method" string.', $controller)); 
} 

$className  = $match[1]; 
$controllerName = $match[2]; 
$actionName  = $match[3];