2013-04-29 3 views
0

Я использую пользовательские маршруты, которые включают в себя имен кроме того контроллера и действия. Поэтому для целей ACL я использую имя маршрута MVC как имя ресурса ACL. Теперь мне нужно получить в настоящее время DISPATCHING название маршрута. Единственное решение, с которым я столкнулся, - получить namespace/controller/action от Диспетчера и итерации по всем маршрутам найти подходящий.Phalcon в настоящее время диспетчерского название маршрута

Есть ли какой-либо простой способ получить в настоящее время диспетчерская (не только соответствует) название маршрута?

ответ

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

4

Довольно легко

\Phalcon\DI::getDefault()->get('router')->getMatchedRoute()->getName(); 
Смежные вопросы