2016-08-14 50 views
0

我想在拉拉維爾的一些不同的雄辯事件上運行類似的任務。在拉拉維爾的不同雄辯事件上的類似任務

例如假設我有一個Question模型。對於我的目的,我在這樣的模型中使用boot()功能:

class Question extends Model 
    public static function boot() 
     { 
      parent::boot(); 
      static::updated(function ($Question) { 
       //some Tasks on $Question 
      }); 

      static::updating(function ($Question) { 
       //some Tasks on $Question 
      }); 

      static::created(function ($Question) { 
       //some Tasks on $Question 
      }); 

      static::creating(function ($Question) { 
       //some Tasks on $Question 
      }); 
     } 
} 

正如你在所有事件中看到,類似的任務運行,並且可能有大的代碼。
什麼是最好的和簡短的方法來做到這一點?

+0

如果你願意,可以在他們所有人面前發起同樣的工作。 – Ohgodwhy

+0

是否有任何短缺和解決方案? –

回答

1

您有幾種方式來重構這段代碼:

  1. 運行saved()saving(),而不是整個四個事件。 saved()將替代created()updated(),而saving()將替代creating()updating()

  2. 裏面所有的人都火一個同樣的工作:

    public static function boot() 
    { 
         Question::saved(function ($question) { 
         dispatch(new \App\Jobs\job($question)); 
         }); 
    } 
    
  3. 的代碼添加到類的內部保護功能(這是推薦最少)

順便說一句,模型事件應放置在服務提供者的引導方法中,而不是模型。型號沒有啓動方法。