laravel 5.1
benim AbstractModel uzanır her Modeli için tek bir model gözlemci kayıt çalışıyorum (kim Illuminate \ Veritabanı uzatıyoruz \ Etkili \ Modeli) .laravel her model örneği için varsayılan bir Gözlemci kayıt nasıl
Sorun, GenericModelObserver'ımın, AbstractModel'i devralan Modellerin tetiklediği olayları dinleyememesi.
Şimdiye kadar yaptığım şeyi göstereyim.
Bir Servis Sağlayıcı oluşturulmuş ve
<?php
// app/Observers/GenericModelObserver.php
namespace App\Observers;
use App\Models\AbstractModel;
class GenericModelObserver
{
public function saving(AbstractModel $model)
{
return $model->valid();
}
}
Özet Modeli
Sonra/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()
{
}
}
benim sade, basit GenericModelObserver sahip yapılandırma içine sağlayıcıları dizinin son pozisyona koymak
<?php
// app/Models/AbstractModel.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class AbstractModel extends Model
{
// ...
}
My Quotation Model
<?php
// app/Models/Quotation.php
namespace App\Models;
class Quotation extends AbstractModel
{
// ...
}
Fiyatlandırma kaydedildiğinde, GenericModelObserver kaydetme olayını veya başka bir olayı dinleyemez.
Aynısı, belirli bir Model Gözlemcisi olmayan diğer Modeller için de geçerlidir.
Bu doğru strateji mi? Önyükleme yöntemiyle her modele bir gözlemci bağlamak istemem.
basitçe bir üst sınıfını kapsamaz Neden
My problemi gibi bir şey yapabilirsiniz BaseObserver geçersiz kılmak tam olarak nasıl değildir. BaseObserver'ı bir kez iliştirmem ve bunu AbstractModel'i genişleten her örneği dinlemem gerekiyor. Denedim ama cevabını ihtiyacım olanla ilişkilendiremedin, beni aydınlatabilir misin? Çalıştığın için teşekkürler. –