2014-04-22 93 views
0

我试图覆盖位于vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php如何覆盖symfony2核心FrameworkBundle?

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

你正在努力。

如果你想要做的是插件自己的路由器类,然后在app /配置/ parameters.yml附加:

router.class: My\SymfonyBundle\Router 

基本上所有的框架类都可以以这种方式来覆盖。看看 vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Resouces/config/routing.xml

不要使用getParent方法。这不符合你的想法。

============================================== ========

已更新以响应有关getParent的信息请求。

的getParent记录在这里:http://symfony.com/doc/current/cookbook/bundles/inheritance.html

它可以让你从父束覆盖的文件的数量有限。它的确是专为调整第三方软件包而设计的。我非常困惑,试图使用它并倾向于避免它。

============================================== ========

最后一点:我建议将router.class添加到parameters.yml中,因为这是最简单的文件。但是,如果您正在加载服务文件,它应该放在My \ SymfonyBundle \ Resources \ config \ services.yml的参数部分。

+0

:)谢谢,最好的简单。 你能介意解释'getParent'是如何工作的吗?或者请指点我正确的方向,我不想最终被误导。 – gondo

+0

顺便说一句,你忘了你的路径中的'资源'中的第二个'r'(被困惑了一段时间,为什么我只是不能复制过去的路径并打开文件) – gondo