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两条单一路线的主要内容,如果未能解决你的问题,请参考以下文章

phalcon: 缓存片段,文件缓存,memcache缓存

检查两条路线(以纬度和经度表示)是不是彼此相对

Flutter 使用内部动画为两条路线设置动画

Google Maps JavaScript API 在同一张地图上显示两条不同折线样式的路线

phalcon: Windows 下 Phalcon dev-tools 配置 和 Phpstorm中配置Phalcon 代码提示

谷歌地图返回两条不同的路线