我试图覆盖位于vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php
的Symfony2路由器
我已经关注了这个tutorial,并且我创建了自己的捆绑包并在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路由器
<?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
消息,但我的覆盖文件根本没有加载。
我也看过这个question,但我看起来并不清楚。
如何正确覆盖Symfony2核心包(vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php
)或核心组件(vendor/symfony/symfony/src/Symfony/Component/Routing/Router.php
)?
答案 0 :(得分:0)
你太难了。
如果您想要做的就是插入自己的路由器类,那么在app / config / parameters.yml中添加:
router.class: My\SymfonyBundle\Router
基本上,所有框架类都可以这种方式重写。看一眼 供应商/ symfony的/ symfony的/ SRC / Symfony的/捆绑/ FrameworkBundle / Resouces /配置/ routing.xml
不要使用getParent方法。它不是你想象的那样。
=============================================== =======
更新以响应有关getParent信息的请求。
getParent在此处记录:http://symfony.com/doc/current/cookbook/bundles/inheritance.html
它允许您从父包中覆盖有限数量的文件。它真的是为调整第三方捆绑包而设计的。我试图使用它并且倾向于避免使用它时非常困惑。
=============================================== =======
最后一点说明:我建议将routers.class添加到parameters.yml,因为这是最容易使用的文件。但它确实应该放在My \ SymfonyBundle \ Resources \ config \ services.yml的参数部分,假设您正在加载服务文件。