Laravel提交登录表单触发BadMethodCallException:username方法不存在
解决BadMethodCallException: Method username does not exist的问题
嘿,我一眼就揪出问题根源啦!你的postLogin方法里犯了个小错误——把请求参数当成方法来调用了:$request->username()和$request->password()这种写法完全不对,Laravel的Request对象获取表单参数根本不是这么玩的~
为啥会报错?
在Laravel里,要拿表单提交的字段值,正确姿势是属性访问(比如$request->username)或者用input()方法(比如$request->input('username'))。你写的$request->username()会让PHP去Request类里找名叫username的方法,但这个方法压根不存在,可不就抛出BadMethodCallException了嘛!
修正后的代码
把你的postLogin方法改成下面这样就行:
public function postLogin(Request $request) { $auth = Auth::guard('web')->attempt([ 'username' => $request->username, 'password' => $request->password, 'active' => 1 ]); if ($auth) { return redirect()->route('dashboard'); } return redirect()->route('/'); }
要是你更喜欢用input()方法,也可以这么写(效果完全一样,看你个人习惯):
public function postLogin(Request $request) { $auth = Auth::guard('web')->attempt([ 'username' => $request->input('username'), 'password' => $request->input('password'), 'active' => 1 ]); if ($auth) { return redirect()->route('dashboard'); } return redirect()->route('/'); }
额外小提示
对了,你已经引入了AuthenticatesUsers trait,这个trait其实已经帮你封装好了完整的登录逻辑,你完全不用自己写postLogin方法哦!只要确保你的表单字段名和类里的$username属性匹配,直接用trait自带的login方法就行,能省不少重复代码呢~
内容的提问来源于stack exchange,提问作者user9085794
相关产品推荐
相关产品推荐

