方法验证不存在 - Laravel 5.4

Posted

技术标签:

【中文标题】方法验证不存在 - Laravel 5.4【英文标题】:Method validate does not exist - Laravel 5.4 【发布时间】:2018-01-29 10:24:59 【问题描述】:

我有一个非常奇怪的问题。当我提交表单时,它会引发服务器端验证错误。

这是我的简单控制器:

namespace App\Http\Controllers;

use Newsletter;
use Illuminate\Http\Request;

class SubscriptionController extends Controller

    public function subscribe(Request $request)
    
        $request->validate([
            'email' => 'required|email',
            ]);
    

提交表格给我:

BadMethodCallException 方法 validate 不存在。

它应该根据:

https://laravel.com/docs/5.4/validation

【问题讨论】:

链接页面没有提到 $request->validate 。虽然它多次提到$this->validate($request,...) @apokryfos 是的,我后来也发现了,我的错。 【参考方案1】:

在文档中说:

$this->validate($request, [
    'email' => 'required|email',
]);

这个字符串 - 有效:)

【讨论】:

也适用于 Lumen。【参考方案2】:

这意味着它在 5.4 中不再可用,但它在控制器中可用

试试:

 $this->validate($request, [
    'email' => 'required|email',
 ]);

【讨论】:

【参考方案3】:

你应该试试这个:

$validateFields = array('email' => 'required|email');

$this->validate($request, $validateFields);

$this->validate($request, [
    'email' => 'required|email'
]);

【讨论】:

【参考方案4】:
        $validator = \Validator::make($request->all(), [
            'mobile_number' => 'required',]);

        if ($validator->fails()) 
            return redirect()->back()
            ->withErrors($validator)
            ->withInput();
        

希望这对你有用..

【讨论】:

【参考方案5】:

您可以使用 Validator 服务提供者。

     namespace App\Http\Controllers;

     use Newsletter;
     use Illuminate\Http\Request;
     use Validator;

     class SubscriptionController extends Controller
     
          public function subscribe(Request $request)
          
                   $request->validate($request->all(),[
                     'email' => 'required|email',
                  ]);
           

【讨论】:

【参考方案6】:

让我们添加这两个包 祝你好运

使用 Illuminate\Support\Facades\Validator; 使用 Illuminate\Foundation\Auth\RegistersUsers;

【讨论】:

请不要发布未经测试的答案。【参考方案7】:

其实如果你添加了正确的控制器, validate 方法应该已经包含了。您可以尝试添加以下控制器。

相反: use App\Http\Controllers\Controller;

【讨论】:

【参考方案8】:

更改后添加验证器服务并清除缓存

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Foundation\Validation\ValidatesRequests;

class RecaptchaController extends Controller

    public function store(Request $request) 
        $this->validate($request,[
            'name' => 'required',
            'email' => 'required|email',
            'phone' => 'required|min:10',
            'g-recaptcha-response' => 'required|captcha'
        ]);

        return "success";
    

您可以在终端上使用以下 artisan 命令清除缓存。 注意:记得检查你运行命令的目录。

php artisan cache:clear

【讨论】:

【参考方案9】:
You can use regex pattern of this email validation.

protected function validator(array $data)

    $messages = array('email.regex' => 'Your email id is not valid.');
    return Validator::make($data, [
        'email' => 'required|email|max:255|regex:/(.*)@myemail\.com/i|unique:users',
     ],$messages);

【讨论】:

以上是关于方法验证不存在 - Laravel 5.4的主要内容,如果未能解决你的问题,请参考以下文章

laravel框架 5.4 关于验证和添加存在的bug

Laravel 5.2 - 方法身份验证不存在

Laravel 方法分页不存在

“不存在”是不是有验证规则?

在使用 Laravel 进行验证期间检查输入中是不是存在字段

Laravel - 唯一规则验证 - getMessages 不存在