0

在自定义扩展中,我创建了一些 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()
    {
        // ...
    }
}

我可以通过这样的 url 来访问这两个函数:

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

...两者都将执行。

但是,当我将页面绑定添加到routing.yml它时,它会中断并且它会尝试寻找foo并且bar好像它们是pages.

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

我怎样才能拥有foobar不让他们被这种绑定抓住?

解决方案

在我的路线之前添加了以下路由片段pagebinding

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

1 回答 1

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 版标准,在“工作”方面并不特别

于 2014-10-23T16:25:31.347 回答