簡體   English   中英

Laravel 5中的自定義驗證器

[英]Custom validator in Laravel 5

我正在將我的Laravel應用程序從4升級到5.但是,我有一個我無法工作的自定義驗證器。

在L4中,我創建了一個validators.php文件,並使用require app_path().'/validators.php';將其包含在global.php中 require app_path().'/validators.php';

我嘗試在L5中做同樣的事情。 我在app / Validators / Validators.php中刪除了一個驗證 ,並更新了我的composer.json

"files": [
    "app/Validators/Validators.php"
]

但是,現在在任何頁面上都沒有渲染。 我做錯了什么?

請嘗試以下方法:

  1. 創建一個綁定類,您可以在其中實現要擴展Validator類的每個規則。
  2. 創建一個擴展ServiceProvider的服務提供者。
  3. config/app.php文件中添加自定義驗證器提供程序。

您可以在Services文件夾中創建綁定,如下所示:

namespace MyApp\Services;

class Validator extends \Illuminate\Validation\Validator{

    public function validateFoo($attribute, $value, $parameters){  
        return $value == "foo"
    }
}

然后,使用服務提供商擴展核心:

namespace MyApp\Providers;

use MyApp\Services\Validator;
use Illuminate\Support\ServiceProvider;

class ValidatorServiceProvider extends ServiceProvider{

    public function boot()
    {
        \Validator::resolver(function($translator, $data, $rules, $messages)
        {
            return new Validator($translator, $data, $rules, $messages);
        });
    }

    public function register()
    {
    }
}

最后,在config/app.php導入您的服務提供商,如下所示:

'providers' => [
    ...
    ...
    'MyApp\Providers\ValidatorServiceProvider';
]

所以這就是我在添加自定義驗證時所做的。 這是laravel 5.1

  1. 運行PHP Artisan make:request MyFormValidationRequestapp\\Requests\\MyFormValidationRequest.php下創建PHP Artisan make:request MyFormValidationRequest文件

這是初始代碼:

<?php

namespace App\Http\Requests;
use App\Http\Requests\Request;

class MyFormValidationRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {

        return [
            //

        ];
    }
}

重要說明 :如果您沒有進行任何身份驗證,請將authorize()方法的返回值更改為true。 它的初始值是假的。 否則你會得到一個帶有“Forbidden”錯誤消息的白頁。


  1. 我在函數rules()下添加了一條規則,這就是它的樣子

     public function rules() { return [ 'activeuntil' => 'today_onwards' ]; } 

today_onwards是我的新驗證。

  1. 我在App文件夾下創建了一個名為“Services”的文件夾

  2. 我在App \\ Services文件夾下創建了一個名為'ValidatorExtended.php'的文件,下面的代碼如下:

      <?php namespace App\\Services; use Illuminate\\Validation\\Validator; use Carbon\\Carbon; class ValidatorExtended extends Validator { private $_custom_messages = array( "today_onwards" => "The :attribute must be today onwards", ); public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) { parent::__construct( $translator, $data, $rules, $messages, $customAttributes ); $this->_set_custom_stuff(); } protected function _set_custom_stuff() { //setup our custom error messages $this->setCustomMessages( $this->_custom_messages ); } protected function validateTodayOnwards( $attribute, $value ) { $now = strtotime('-1 day'); $valueDateFormat = strtotime($value); if($valueDateFormat > $now){ return true; } else { return false; } } } 

注意: validateTodayOnwards方法是您放置邏輯的地方。 該方法的名稱應始終以“validate”開頭,然后是新的驗證密鑰的名稱,該名稱應為標題大小寫,

另請注意,您的驗證密鑰應以下划線和所有小寫字母分隔,在本例中為“today_onwards”。 下划線應放在方法名稱中的所有首字母大寫字母之前。 我希望我解釋得很好。

TodayOnwards方法相當於“today_onwards”的驗證名稱,

另一個例子,如果我創建了validateOldPassword,那么你的驗證密鑰應該是“old_password”。

  1. 我在boot()方法中的app\\Providers\\AppServiceProvider.php添加了以下代碼。

     Validator::resolver(function($translator, $data, $rules, $messages = array(), $customAttributes = array()) { return new ValidatorExtended($translator, $data, $rules, $messages, $customAttributes); }); 
  2. 不要忘記添加下面的庫,一個是Validator類,另一個是你自己的類,它是“ ValidatorExtended ”。

     use App\\Services\\ValidatorExtended; use Illuminate\\Support\\Facades\\Validator; 
  3. 這是整個文件的樣子,[ app\\Providers\\AppServiceProvider.php ]

     <?php namespace App\\Providers; use Illuminate\\Support\\ServiceProvider; use App\\Services\\ValidatorExtended; use Illuminate\\Support\\Facades\\Validator; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { // Validator::resolver(function($translator, $data, $rules, $messages = array(), $customAttributes = array()) { return new ValidatorExtended($translator, $data, $rules, $messages, $customAttributes); }); } /** * Register any application services. * * @return void */ public function register() { // } } 
  4. 而已。 完成。 您創建了自己的自定義驗證。

  5. 此外,如果您想在控制器中使用它,下面是代碼:

     class testController extends Controller { public function updatePass(MiscValidation $request){ //code here } } 

您可以使用自己的類,而不是使用Request Class,它是Request類的擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM