Laravel の Sentinel バンドルを使用するプロジェクトがあります。
少し前に、バンドルで提供されているモデルの拡張について質問しました。私が受け入れた答えは機能しましたが、ベンダー フォルダー内のバンドルのコードを編集する必要がありました。
それ以来、composer update
コマンドを実行したところ、適用した変更が上書きされました (驚くことではありません)。
laravel がどのように機能するかについてもう少し知ったので、アプリがバンドルのサービスを参照するエンドポイントをさかのぼることができました。私のconfig/app.php
ファイルには、サービスプロバイダーの参照があります。
'Sentinel\SentinelServiceProvider',
SentinelServiceProvider
サービスには、オーバーライドする必要があるクラスを登録するメソッドがありますregister
。RepoServiceProvider
私の計画は、2 つの新しいファイルを作成することです:ExtendedSentinelServiceProvider.php
とExtendedRepoServiceProvider.php
.
このExtendedRepoServiceProvider.php
ファイルでは、ユーザー リポジトリ バインディングに使用されているクラスをカスタム ユーザー クラスに置き換えることができます。
// 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']
);
});
ファイルで、既存のクラス参照を新しく変更したクラス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();
}
config/app.php
次に、ファイル内のサービス プロバイダー参照を新しいExtendedSentinelServiceProvider
クラスに置き換えます。
'providers' => array(
...
'Sentinel\ExtendedSentinelServiceProvider',
...
),
私の質問は、ベンダー コードを変更するのではなく、私の変更をアプリ ディレクトリに保存できる方法として、これは理にかなっていますか? 名前の間隔に関しては、これは問題になるでしょうか? これを行うより良い方法はありますか??
どんな助けでも大歓迎です。