您好,匿名用户
随意问技术百科期待您的加入

Symfony 2 如何扩展第三方方案

0 投票

在symfony2 的目录结构里面 该如何扩展第三方呢?
自己在 vendor 里面写 还是有规定目录格式?
symfony1 里面提供了helper 的模式,2里面是否也有相同的机制?

用户头像 提问 2013年 9月21日 @ Leona 上等兵 (279 威望)
分享到:

1个回答

0 投票

我直接从文档里粘来一些代码:

扩展某个bundle,只需要在你自己bundle里,通过getParent()方法,声明被扩展的bundle是哪个,下面就是以FOSUserBundle作为扩展对象。

// src/Acme/UserBundle/AcmeUserBundle.php
namespace Acme\UserBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class AcmeUserBundle extends Bundle
{
    public function getParent()
    {
        return 'FOSUserBundle';
    }
}

扩展某个Controller更加简单,直接继承目标Controller就好了:

// src/Acme/UserBundle/Controller/RegistrationController.php
namespace Acme\UserBundle\Controller;

use FOS\UserBundle\Controller\RegistrationController as BaseController;

class RegistrationController extends BaseController
{
    public function registerAction()
    {
        $response = parent::registerAction();

        // ... do custom stuff
        return $response;
    }
}

至于其他的如模板、路由等,你要复用、重写哪一个,就在你自己的bundle里,以相同文件路径创建就好了。

文档:http://symfony.com/doc/current/cookbo...

UPDATE1:

如果你只是想要加第三方的代码进去,按规范是应该放vendors里,如果你的代码符合PSR-0,那就可以实现自动的加载;如果不符合,你要在app/autoload.php里加相应的include。

至于是否能够全局使用扩展后的代码,取决于调用,不取决于定义。为了维护的方便,你可以自己抽象interface,或者定义sf2里的service。

你可以参考下sf2的bundle的文档,以及Composer。

用户头像 回复 2013年 9月21日 @ Twitch 上等兵 (260 威望)
提一个问题:

相关问题

0 投票
1 回复 35 阅读
0 投票
1 回复 40 阅读
用户头像 提问 2013年 9月18日 @ Zeus 上等兵 (193 威望)
0 投票
1 回复 72 阅读
用户头像 提问 2012年 12月1日 @ Swain 上等兵 (232 威望)
0 投票
1 回复 38 阅读
用户头像 提问 2013年 11月19日 @ Taric 上等兵 (184 威望)
0 投票
1 回复 45 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...