2013-04-29 37 views
0

我使用定製的路線,其中包括命名空間除了控制器行動。因此,爲了ACL目的,我使用MVC路由名稱作爲ACL資源名稱。現在我需要獲得DISPATCHING路由名稱。我想出的唯一解決方案是從Dispatcher獲得命名空間/控制器/動作,並遍歷所有路徑找到合適的路徑。爾康目前調度路由名稱

是否有任何最簡單的方法獲得當前調度(不只是匹配)的路線名稱?

回答

0

您可以使用您的路由器,調度器和基本控制器來獲得您所需要的。試想一下:

$router = new \Phalcon\Mvc\Router(false); 

$routes = array(
    '/{namespace:"[a-zA-Z]+}/:controller' => array(
     'controller' => 2, 
    ), 
    '/{namespace:"[a-zA-Z]+}/:controller/:action/:params'  => array(
     'controller' => 2, 
     'action'  => 3, 
     'params'  => 4, 
    ), 
); 

foreach($routes as $route => $params) { 
    $router->add($route, $params); 
} 

現在,在你的基地控制器,你可以這樣做:

public function getNamespace() 
{ 
    return $this->dispatcher->getParam('namespace'); 
} 

這樣你就可以在你的控制器當前服務(只要他們延長你的基本控制器)的命名空間。

如果您需要獲得命名空間的模型,你可以隨時使用DI像這樣(示範基地):

public function getNamespace() 
{ 
    $di = \Phalcon\DI::getDefault(); 

    return $di->dispatcher->getParam('namespace'); 
} 
+0

嗯,我也沒問怎麼獲取調度命名空間,但**路由名稱** – dVaffection 2013-07-02 19:02:28

4

很容易

\Phalcon\DI::getDefault()->get('router')->getMatchedRoute()->getName();