2016-05-15 8 views
0

のチェック:実装Laravel雄弁モデルイベント - 私はこの答え、次の午前トリガーされるイベント

Laravel Model Events

そして、私はマークされた答えのコードを実装しようとしています。

私はeverythinkが "答え"と同じだと思うが、それはイベントを発射していないようだ。

イベントが発生しているかどうかを確認するにはどうすればよいですか?

これは私のモデルである:

<?php 

namespace App; 

use App\Traits\ModelEventThrower; 
use Carbon\Carbon; 
use Illuminate\Database\Eloquent\Model; 

class Cuotas extends Model 
{ 
    use ModelEventThrower; 


    protected $fillable = [ 'apartamento_id','fecha_cuota','fecha_vencimiento', 'tipo_cuota_id', 'monto', 'descripcion_cuota','saldo' ]; 
    protected $dates = ['created_at', 'updated_at', 'deleted_at','fecha_vencimiento','fecha_cuota']; 
    protected $appends = ['tipo_cuota']; 

    //protected static $othersEvents = ['saving']; 



    function getTipoCuotaAttribute(){ 
     $id = $this->attributes['tipo_cuota_id']; 
     $tipoCuota = TipoCuota::lists('descripcion_cuota','id')->toArray(); 
     return $tipoCuota[$id]; 
    } 


    function getFechaVencimientoAttribute($value){ 
     return Carbon::parse($value)->format('d-m-Y'); 
    } 
    function setFechaVencimientoAttribute($value){ 
     $this->attributes['fecha_vencimiento'] = Carbon::createFromFormat('d-m-Y', $value); 
    } 

    function getFechaCuotaAttribute($value){ 
     return Carbon::parse($value)->format('d-m-Y'); 
    } 
    function setFechaCuotaAttribute($value){ 
     $this->attributes['fecha_cuota'] = Carbon::createFromFormat('d-m-Y', $value); 
    } 

    function apartamento() 
    { 
     return $this->belongsTo('App\Apartamentos', 'apartamento_id'); 
    } 
    public function pagos(){ 
     return $this->hasMany('App\Pagos','cuota_id', 'id'); 
    } 
} 

これは私の形質である:

<?php 

namespace App\Traits; 

use Illuminate\Database\Eloquent\Model; 
use Illuminate\Support\Facades\Event; 

/** 
* Class ModelEventThrower 
* @package App\Traits 
* 
* Automatically throw Add, Update, Delete events of Model. 
*/ 
trait ModelEventThrower { 

    /** 
    * Automatically boot with Model, and register Events handler. 
    */ 
    protected static function bootModelEventThrower() 
    { 

     foreach (static::getModelEvents() as $eventName) { 
      static::$eventName(function (Model $model) use ($eventName) { 
       try { 
        $reflect = new \ReflectionClass($model); 
        Event::fire(strtolower($reflect->getShortName()).'.'.$eventName, $model); 
       } catch (\Exception $e) { 
        return true; 
       } 
      }); 
     } 
    } 

    /** 
    * Set the default events to be recorded if the $recordEvents 
    * property does not exist on the model. 
    * 
    * @return array 
    */ 
    protected static function getModelEvents() 
    { 
     if (isset(static::$othersEvents)) { 
      return static::$othersEvents; 
     } 

     return [ 
      'created', 
      'updated', 
      'deleted', 
     ]; 
    } 
} 

マイEventServiceProvider:

<?php 

namespace App\Providers; 

use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; 
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; 

class EventServiceProvider extends ServiceProvider 
{ 
    /** 
    * The event listener mappings for the application. 
    * 
    * @var array 
    */ 
    protected $listen = [ 
     'App\Events\SomeEvent' => [ 'App\Listeners\EventListener', ], 
    ]; 

    /** 
    * Register any other events for your application. 
    * 
    * @param \Illuminate\Contracts\Events\Dispatcher $events 
    * @return void 
    */ 
    public function boot(DispatcherContract $events) 
    { 
     parent::boot($events); 
     $events->subscribe('App\Handlers\Events\CuotasEventHandler'); 
    } 
} 

マイイベントハンドラー:

<?php 

namespace App\Handlers\Events; 

use App\Cuotas; 

class CuotasEventHandler{ 

    /** 
    * Create the event handler. 
    * 
    * @return \App\Handlers\Events\CuotasEventHandler 
    */ 
    public function __construct() 
    { 
     // 
    } 

    /** 
    * Handle cuotas.created event 
    */ 

    public function created(Cuotas $cuotas) 
    { 
     dd('created'); 
    } 

    /** 
    * Handle cuotas.updated event 
    */ 

    public function updated(Cuotas $cuotas) 
    { 
     //Implement logic 
     dd('updated'); 
    } 

    /** 
    * Handle cuotas.deleted event 
    */ 

    public function deleted(Cuotas $cuotas) 
    { 
     //Implement logic 
     dd('deleted'); 
    } 

    /** 
    * @param $events 
    */ 
    public function subscribe($events) 
    { 
     $events->listen('cuotas.created','App\Handlers\Events\[email protected]'); 
     $events->listen('cuotas.updated','App\Handlers\Events\[email protected]'); 
     $events->listen('cuotas.deleted','App\Handlers\Events\[email protected]'); 

    } 

} 

$ Cuotasモデルで新しいレコードを更新、削除、または作成すると、イベントが発生するのを見ることができません。

私の意図は、「パゴス」と呼ばれる他のモデルですでに行われた支払いを使用して、モデルの「サンド」(残高)列を更新することです。

答えて

0

いくつかの方法では、サーバーを再起動した後にイベントが発生します。