Laravel 5.1
私は私のAbstractModelを拡張して、すべてのモデルのための単一のモデルオブザーバを登録しようとしている(誰が点灯\データベースを拡張している\雄弁\モデル) 。Laravelですべてのモデルのインスタンスのデフォルトのオブザーバーを登録する方法
問題は私のGenericModelObserverが、AbstractModelを継承しているモデルによって起動されたイベントを聴くことができないことです。
私がこれまでにしたことを示してみましょう。
サービスプロバイダは、その後、私は私の無地シンプルGenericModelObserver
<?php
// app/Observers/GenericModelObserver.php
namespace App\Observers;
use App\Models\AbstractModel;
class GenericModelObserver
{
public function saving(AbstractModel $model)
{
return $model->valid();
}
}
抽象モデル
を持って作成され、コンフィグ内部/ app.php<?php
// app/Providers/ObserverServiceProvider.php
namespace App\Providers;
use App\Models\Quotation;
use App\Models\AbstractModel;
use App\Observers\QuotationObserver;
use App\Observers\GenericModelObserver;
use Illuminate\Support\ServiceProvider;
class ObserverServiceProvider extends ServiceProvider
{
public function boot()
{
AbstractModel::observe(GenericModelObserver::class);
Quotation::observe(QuotationObserver::class);
}
public function register()
{
}
}
プロバイダ配列の最後の位置に置かれました
<?php
// app/Models/AbstractModel.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class AbstractModel extends Model
{
// ...
}
マイ・ブッキングモデル
<?php
// app/Models/Quotation.php
namespace App\Models;
class Quotation extends AbstractModel
{
// ...
}
Quotationが保存されると、GenericModelObserverは保存イベントまたはその他のイベントをlistenできません。
特定のモデルオブザーバを持たない他のモデルにも同じことが適用されます。
これは正しい戦略ですか?私は、ブートメソッドを通してオブザーバーをすべてのモデルに結びつけるのは嫌いです。
単に親クラスを拡張しないのはなぜ
ような何かを行うことができます。 BaseObserverを一旦アタッチして、AbstractModelを継承するすべてのインスタンスをリッスンする必要があります。私は試しましたが、あなたの答えを私が必要とするものにリンクすることができませんでした。私を啓発することができますか?仕事をありがとう。 –