我正在尝试覆盖位于
vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php
的 Symfony2 Router
我已经遵循了这个教程,并且创建了自己的捆绑包并在
AppKernel.php
中注册了它。
<?php
// src/My/SymfonyBundle/MySymfonyBundle.php
namespace My\SymfonyBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class MySymfonyBundle extends Bundle
{
public function getParent()
{
// die('test');
return 'FrameworkBundle';
}
}
到目前为止一切都很好。我的包已被识别(通过在上面的函数中尝试
die('test');
进行测试)
然后我创建了 Symfony2 Router 的扩展版本:
<?php
// src/My/SymfonBundle/Routing/Router.php
namespace My\SymfonyBundle;
use Symfony\Bundle\FrameworkBundle\Routing\Router as BaseRouter;
die('test');
class Router extends BaseRouter
{}
但它被忽视了。我希望看到我的调试
test
消息,但是我覆盖的文件根本没有加载。
我也看过这个问题,但看起来一点都不清楚。
如何正确覆盖Symfony2核心包(
vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php
)或核心组件(vendor/symfony/symfony/src/Symfony/Component/Routing/Router.php
)?
你把事情搞得太难了。
如果您只想插入自己的路由器类,则在 app/config/parameters.yml 中添加:
router.class: My\SymfonyBundle\Router
基本上,所有框架类都可以用这种方式重写。看一眼 供应商/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Resouces/config/routing.xml
不要使用getParent方法。它没有按照你的想法去做。
====================================================== =====
已更新以响应有关 getParent 信息的请求。
getParent 记录在此处:http://symfony.com/doc/current/cookbook/bundles/inheritance.html
它允许您覆盖父包中有限数量的文件。它确实是为调整第 3 方捆绑包而设计的。我在尝试使用它时感到非常困惑并倾向于避免它。
====================================================== =====
最后一点:我建议将 router.class 添加到parameters.yml 中,因为这是最容易使用的文件。但它确实应该放在 My\SymfonyBundle\Resource 的参数部分