如何覆盖symfony2核心FrameworkBundle?

问题描述 投票:0回答:1

我正在尝试覆盖位于

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
)?

php symfony
1个回答
0
投票

你把事情搞得太难了。

如果您只想插入自己的路由器类,则在 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 的参数部分

© www.soinside.com 2019 - 2024. All rights reserved.