页面绑定覆盖url钩子

时间:2014-10-23 15:40:47

标签: symfony routing bolt-cms

在自定义扩展程序中,我创建了一些URL挂钩,如下所示:

namespace MyExtension;

class Extension extends \Bolt\BaseExtension
{   

    public function initialize()
    {
        // audio sample management
        $this->app->match("/foo", array($this, 'foo'));
        $this->app->match("/bar", array($this, 'bar'));
    }

    function foo()
    {
        // ...
    }

    function bar()
    {
        // ...
    }
}

我可以通过这样的网址来实现这两个功能:

  • example.com/foo
  • example.com/bar

......两者都会执行。

然而,当我在routing.yml中添加页面绑定时,它会中断并尝试查找foobar,就像它们是pages一样。

pagebinding:
  path: /{slug}
  defaults: { _controller: 'Bolt\Controllers\Frontend::record', 'contenttypeslug': 'page' }
  contenttype: pages

如果foobar没有被这种绑定捕获,我该怎么办?

pagebinding路由之前添加了以下路由片段。

foobinding:
  path: /foo
  defaults: { _controller: 'MyExtension\Extension::foo' }

1 个答案:

答案 0 :(得分:2)

是的,这是一个粘性的"设计"在Silex / Symfony。控制器路由堆叠,第一次匹配获胜。

在Bolt中,initMountpoints()routes.yml路由设置的地方)在initExtensions()之前被调用,因此应用程序路由无法通过设计不良或恶意的方式消失扩展。

我在一次安装中所做的是在routing.yml中设置扩展路由,并将控制器定义为MyExtension\Extension

<强>更新
这是我正在使用的routing.yml文件中的内容,但是在Bolt 2 beta上。

sitemap: path: /sitemap.xml defaults: { _controller: 'Bolt\Extension\Gawain\CustomSitemap\Controller\Sitemap::sitemap' }

请注意,扩展命名空间只是符合第2版标准,对于“工作”而言并不特别