除了 controller 和 action 之外,我还使用包含 namespace 的自定义路由。因此,对于ACL目的,我使用MVC路由名称作为ACL资源名称。现在我需要获取当前 DISPATCHING 路由名称。我想出的唯一解决方案是从Dispatcher获取 namespace / controller / action 并迭代所有路由找到合适的路径。
是否有最简单的方法来获取当前调度(不仅仅是匹配的)路线名称?
答案 0 :(得分:5)
非常简单
\Phalcon\DI::getDefault()->get('router')->getMatchedRoute()->getName();
答案 1 :(得分: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');
}