2015-08-21 16 views
2

我已經創建特質在這個頁面的應用程序如下/特徵/ ModelEventThrower.phplaravel 5.1 - 特質開機不要求模型:: update()函數

namespace App\Traits; 

use Input; 
use Event; 
use App\Events\ActivityLog; 
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); 

        echo "here";exit; 

        } 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::$recordEvents)) { 
      return static::$recordEvents; 
     } 

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

我的城市模型是這樣

namespace App; 

use App\Traits\ModelEventThrower; 
use App\Events\ActivityLog; 

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

class City extends Model 
{ 
    use ModelEventThrower; 
    //protected static $recordEvents = ['updated']; 
... 
} 

我CitiesController是

namespace App\Http\Controllers\Admin; 

use App\City; 
use App\Country; 
use Input; 
use Validator; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 

class CitiesController extends Controller 
{ 
...... 
    public function update(City $city,Request $request) 
    { 
    ...... 
    $city->where('id','=',$input['id'])->update($input); 

不知怎的,我沒有看到它的調用函數令狀十個特徵文件。當我嘗試創建$city->create($input);時,它會迴應「here」並停止執行,但不會對update函數執行相同操作,但是我可以成功更新記錄。

任何建議/幫助將不勝感激。

+0

我試圖按照這裏所述http://stackoverflow.com/a/30582174/4514022 – Neo

+0

我沒有看到該函數被調用的地方。 – user3158900

+0

使用ModelEventThrower;在城市模型 – Neo

回答

1

我和Laravel有類似的問題。通過在模型中加入一個構造函數調用父Modelboot()功能,像這樣:

public function __construct() 
{ 
    parent::boot(); 
} 

可以確保所有的性狀啓動。這爲我解決了它。