如果我的理解沒錯誤,Controller可以直接注入Request,是因為Laravel內部本身其實有傳Request instance給action,只是它是寫好的,翻一下Illuminate\Routing\Router.php
看一下就可以知道原理
所以如果你想要你的Service能處理一些Controller的事情,還是在Controller裡面分派參數給他會比較好
class UserController extends BaseController {
function someAction(Request $request, MyService $service) {
$service->someMethod($request)
}
}
@gcpark 加個QQ : -----------------
這樣比較快XDD
改成auth()->check()
試試
根目錄/storage/framework/views/ 裡邊東西全刪光
@gcpark Auth::check()
改成\Auth::check()
試試
@gcpark 執行下php artisan cache:clear
@gcpark 再麻煩貼上create視圖的code~
@gcpark 可否將你routes和controller文件貼上來,這錯誤應該是程式有地方出錯
@saybye720 實際上就是 _token 的問題沒錯,User表update沒錯是因為其更新流程和UserProfile不一樣:
User是繼承於Model,其update方法是
public function update(array $attributes = []){
if (! $this->exists) {
return false;
}
return $this->fill($attributes)->save();
}
重點在於fill($attributes)
這個方法會檢查傳進去的值是否fillable
,就是你在User
Model裡設置的那些
但是,$user->UserProfile()
回傳的是HasOne
類型的Object,其更新方法太多層,就不詳述,不過裡面並沒有對你傳進去的$attributes
進行過濾,所以不管你fillable
打什麼,都不會對他造成影響,最後導致你傳進去的所有欄位都會被更新,自然_token
也被當成需要更新的欄位,而UserProfile
並沒有這欄位也就錯誤了。
可以在Model中直接override原本的attributes
class User extends Model {
protected $attributes = [
'avatar' => 'DEFAULT_AVATAR',
];
// something
}