在自定义扩展程序中,我创建了一些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()
{
// ...
}
}
我可以通过这样的网址来实现这两个功能:
......两者都会执行。
然而,当我在routing.yml
中添加页面绑定时,它会中断并尝试查找foo
和bar
,就像它们是pages
一样。
pagebinding:
path: /{slug}
defaults: { _controller: 'Bolt\Controllers\Frontend::record', 'contenttypeslug': 'page' }
contenttype: pages
如果foo
和bar
没有被这种绑定捕获,我该怎么办?
解
在pagebinding
路由之前添加了以下路由片段。
foobinding:
path: /foo
defaults: { _controller: 'MyExtension\Extension::foo' }
答案 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版标准,对于“工作”而言并不特别