2016-11-15 66 views
2

在Laravel 5.3中,我們試圖創建一個表單,用戶可以更新他們的個人資料詳細信息,包括一個新密碼。在Eloquent Model Observer中使用請求

但是,我們只想設置密碼,如果它已被提交。

我們正在使用CRUD框架來處理模型的更新,我們不想滾動我們自己的update(Request $request)方法。

我們知道,你可以註冊類似

User::created(function(User $user){ 

}); 

我們希望達到類似的東西來

User::created(function(User $user){ 

    if($request->has('password')){ 
     $user->password = bcrypt($request->input('password')); 
    } 

}); 

然而,當我們訪問$要求,其完全是空的模型觀察員。例如,如果我們做了dd($request->all());它的一個空數組,然而如果我們傾倒出dd($_POST);,我們就得到了一切。

我認爲這是因爲訂單加載,請求系統尚未加載。

有沒有辦法直接訪問$_POST可以得到請求?

感謝

+0

什麼是點這個?,laravel使用bcrypt來散列密碼。 – Neat

+0

再次閱讀問題,它可能是有道理的,似乎其他人都明白:D – Owen

回答

5

Laravel 5.3+

request()助手應該爲你工作:

if (request()->has('password')) { 
    $user->password = bcrypt(request()->password); 
} 

你可以訪問屬性與:

request()->password 
request()->get('password') 
request('password') 

流明5.3+

request()助手不在流明可用,因此您需要使用IoC容器。

app('Illuminate\Http\Request')

實施例:

if (app('Illuminate\Http\Request')->has('password')) { $user->password = bcrypt(app('Illuminate\Http\Request')->password); }

2

可以使用request輔助機能的研究爲:

if(request()->has('password')){ 
    $user->password = bcrypt(request()->get('password')); 
} 
1

作爲替代其他兩個答案,可以通過給函數傳遞請求:

User::created(function(User $user) use ($request) {