Laravel 5.4.36出现BadMethodCallException:validate方法不存在求助
validate方法不存在的BadMethodCallException错误 这个问题我之前碰到过好多次,结合你的报错信息(在AuthenticatesUsers.php里调用validate失败),核心原因是你的控制器没有正确引入验证所需的ValidatesRequests trait——Laravel 5.4正是通过这个trait给控制器提供validate方法的,既然昨天还正常,肯定是最近的代码改动不小心破坏了这个依赖。
下面是一步步的排查和修复方案:
检查基础控制器的trait引入
首先打开app/Http/Controllers/Controller.php,这是所有业务控制器的基类,确保它包含ValidatesRequeststrait的引入和使用:<?php namespace App\Http\Controllers; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Routing\Controller as BaseController; use Illuminate\Foundation\Validation\ValidatesRequests; // 这行必须存在 use Illuminate\Foundation\Auth\Access\AuthorizesRequests; class Controller extends BaseController { // 这里必须包含ValidatesRequests use AuthorizesRequests, DispatchesJobs, ValidatesRequests; }如果有人最近修改了这个文件,移除了
trait的引入或使用,所有继承它的控制器都会找不到validate方法,这是最常见的原因。如果当前控制器直接继承底层Controller类
从报错的AuthenticatesUsers.php来看,你应该是在登录控制器里触发的错误。如果这个控制器没有继承上面的基础Controller,而是直接继承了Illuminate\Routing\Controller,那需要在当前控制器里手动引入ValidatesRequests:<?php namespace App\Http\Controllers\Auth; use Illuminate\Routing\Controller; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Auth\AuthenticatesUsers; class LoginController extends Controller { // 添加ValidatesRequests trait use AuthenticatesUsers, ValidatesRequests; }修复Composer自动加载问题
有时候代码没问题,但Composer的自动加载缓存会出问题,导致找不到trait。可以执行以下命令重新生成自动加载文件:composer dump-autoload
按照上面的步骤检查,应该很快就能解决这个问题——毕竟之前运行正常,肯定是某个小改动导致的trait依赖缺失。
内容的提问来源于stack exchange,提问作者Muhammad Usman

