Phalcon两条单一路线
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Phalcon两条单一路线相关的知识,希望对你有一定的参考价值。
I have a problem. I have two routes:
$router->add('/news/{alias:[a-z-]+}(/?)', array(
'module' => 'frontend',
'controller' => 'news',
'action' => 'view',
'news_id' => 1,
'lang' => 'md',
))->setName('news_view_short_e'); //=> /news/282334-alias-news
AND route => /news/index/:
$router->add('/{lang:[' . $langsDefined . ']{2}+}/{controller:[a-z]{3,50}+}(/?)', array(
'module' => 'frontend',
'controller' => 2,
'action' => 'index',
'lang' => 1,
))->setName('default_module_lang');
当我使用这些路线时。 site.com/news/index无效。但是,如果我删除带别名的路由。路线site.com/news/index工作正常。我如何解决冲突?
答案
可能因为它也将你的“索引”作为别名参数匹配,所以第一条规则获胜。除了修复正则表达式或重新排序路线之外,没有什么神奇的解决方案。
反转您的路线订单会带来一个新问题,反过来因为它也会匹配控制器而不是您的别名。
我更喜欢坚持使用默认路由,并在此处安装路由器组是我的路由器:
//From my config
'router' => array(
'defaults' => array(
'namespace' => 'My\Default\Namespace\Controllers',
'module' => 'frontend',
'controller' => 'index',
'action' => 'index'
),
'notFound' => array(
'controller' => 'errors',
'action' => 'notFound'
)
),
// From my service
$router = new Router();
$router->removeExtraSlashes(true);
$router->setDefaults($this->config->router->defaults->toArray()?: $this->defaults);
$router->notFound($this->config->router->notFound->toArray()?: $this->notFound);
$router->mount(new ModuleRoute($this->getDefaults(), true));
class ModuleRoute extends RouterGroup
{
public $default = false;
public function __construct($paths = null, $default = false)
{
$this->default = $default;
parent::__construct($paths);
}
public function initialize()
{
$path = $this->getPaths();
$routeKey = '/' . $path['module'];
$this->setPrefix('/{locale:([a-z]{2,3}([\_-][[:alnum:]]{1,8})?)}' . ($this->default ? null : $routeKey));
$this->add( '/:params', array(
'namespace' => $path['namespace'],
'module' => $path['module'],
'controller' => $path['controller'],
'action' => $path['action'],
'params' => 3
))->setName($routeKey);
$this->add( '/:controller/:params', array(
'namespace' => $path['namespace'],
'module' => $path['module'],
'controller' => 3,
'action' => $path['action'],
'params' => 4
))->setName($routeKey);
$this->add( '/:controller/([a-zA-Z0-9\_-]+)/:params', array(
'namespace' => $path['namespace'],
'module' => $path['module'],
'controller' => 3,
'action' => 4,
'params' => 5
))->setName($routeKey);
$this->add( '/:controller/:int', array(
'namespace' => $path['namespace'],
'module' => $path['module'],
'controller' => 3,
'id' => 4,
))->setName($routeKey);
}
}
以上是关于Phalcon两条单一路线的主要内容,如果未能解决你的问题,请参考以下文章
Google Maps JavaScript API 在同一张地图上显示两条不同折线样式的路线
phalcon: Windows 下 Phalcon dev-tools 配置 和 Phpstorm中配置Phalcon 代码提示