Laravel:覆盖Bundle的服务提供商

Chr*_*itz 5 php laravel-4 cartalyst-sentry

我有一个项目使用Sentinel包为Laravel.

不久前,我问了一个关于扩展捆绑包中提供的模型的问题.我接受的答案有效,但需要在vendor文件夹中编辑软件包的代码.

从那以后,我运行了一个composer update命令,我应用的更改被覆盖了(这并不奇怪).

我对laravel现在如何工作了解得更多,所以我能够追溯我的应用程序引用捆绑服务的终点.在我的config/app.php文件中,我有服务提供者参考:

'Sentinel\SentinelServiceProvider',
Run Code Online (Sandbox Code Playgroud)

该SentinelServiceProvider服务有一个register方法来注册RepoServiceProvider哪个是我需要覆盖的类.

我的计划是创建两个新文件:ExtendedSentinelServiceProvider.php和ExtendedRepoServiceProvider.php.

在ExtendedRepoServiceProvider.php文件中,我可以用我的自定义User类替换用于用户存储库绑定的类:

    // Bind the User Repository
    $app->bind('Sentinel\Repo\User\UserInterface', function($app)
    {
        return new ExtendedSentryUser( // This is my custom model that I want the ExtendedRepoServiceProvider to use
            $app['sentry']
        );
    });
Run Code Online (Sandbox Code Playgroud)

在ExtendedSentinelServiceProvider.php文件中,我将RepoServiceProvider用我新修改的ExtendedRepoServiceProvider类替换现有的类引用:

public function register()
{
    $loader = \Illuminate\Foundation\AliasLoader::getInstance();
    $loader->alias('Sentry', 'Cartalyst\Sentry\Facades\Laravel\Sentry');

    $repoProvider = new ExtendedRepoServiceProvider($this->app); // This would be my new ExtendedRepoServiceProvider class
    $repoProvider->register();

    $formServiceProvider = new FormServiceProvider($this->app);
    $formServiceProvider->register();
}
Run Code Online (Sandbox Code Playgroud)

然后我将config/app.php使用新ExtendedSentinelServiceProvider类替换我的文件中的服务提供者引用:

'providers' => array(
    ...
    'Sentinel\ExtendedSentinelServiceProvider',
    ...
),
Run Code Online (Sandbox Code Playgroud)

我的问题是,作为一种能够将我的修改存储在我的app目录中而不是修改供应商代码的方法,这是否有意义?在名称间距方面,这会成为一个问题吗?这样做有更好的方法吗?

任何帮助将大大赞赏.

dar*_*uhn 0

您不应该遇到名称间距问题。然而,另一种选择 - 特别是如果您要添加可能对其他人普遍有用的功能 - 是在 github 上分叉该项目,然后在composer.json 的“repositories”属性中包含对 git 项目的引用。例如您可以添加:

"repositories": [
    {
        "type": "git",
        "url": "git@github.com:{your-user}/Sentinel.git"
    }
],
Run Code Online (Sandbox Code Playgroud)

然后,作曲家在进行安装/更新时会查看您的分叉。