You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:07:21