pengesahan borang


~

Pengesahan Borang
  • Pengenalan
  • Pengesahan pantas
    • Tentukan laluan
    • Buat penghala
    • Tulis logik pengesahan
    • pengesahan mesej al pertimbangan medan
    Sahkan permintaan borang
  • Buat pengesahan permintaan borang
    • Pengesahan kebenaran permintaan borang
    • Mesej ralat pengesahan tersuai
    • Atribut pengesahan semula C tersuai
    • Ubah hala automatik
    • Dinamakan pakej ralat
    • Cangkuk selepas pengesahan
  • Mengendalikan mesej ralat
    • Mesej ralat pengesahan tersuai
  • peraturan sah
  • Mengikut syarat Tambah peraturan pengesahan
  • Sahkan tatasusunan
    • Peraturan pengesahan tersuai
    • Gunakan objek peraturan pengesahan
    • Gunakan penutupan
Gunakan sambungan

ValidatesRequests Pengenalan

Laravel menyediakan beberapa cara berbeza untuk mengesahkan data yang dihantar ke dalam aplikasi anda. Secara lalai, kelas asas pengawal Laravel menggunakan Traits, yang menyediakan cara yang mudah untuk mengesahkan permintaan HTTP masuk menggunakan pelbagai peraturan pengesahan yang berkuasa.

🎜🎜🎜

Pengesahan Pantas

Untuk memahami keupayaan pengesahan hebat Laravel, mari lihat contoh lengkap mengesahkan borang dan memaparkan mesej ralat kembali kepada pengguna. . Laluan > akan memaparkan borang untuk pengguna membuat catatan blog baharu, manakala laluan POST akan menyimpan catatan blog baharu dalam pangkalan data.

Mencipta penghala

Mari kita lihat cara mengendalikan laluan ini Pengawal, kaedah store dibiarkan kosong buat sementara waktu.

Route::get('post/create', 'PostController@create');
Route::post('post', 'PostController@store');

routes/web.php 文件中定义了下面这些路由:

<?php
  namespace App\Http\Controllers;
  use Illuminate\Http\Request;
  use App\Http\Controllers\Controller;
  class PostController extends Controller{    
      /**
     * 显示创建博客文章的表单。
     *
     * @return Response
     */   
  public function create()   
   {       
    return view('post.create');    
    }   
     /**
     * 保存一篇新的博客文章。
     *
     * @param  Request  $request
     * @return Response
     */   
    public function store(Request $request)   
     {      
       // 验证并存储博客文章...   
      }
   }

显然,GET 路由会显示一个供用户创建一个新的博客帖子的表单,而 POST 路由会将新的博客文章存储在数据库中。

创建路由器

下面让我们一起来看看处理这些路由的控制器, store 方法暂时留空。

/**
 * 保存一篇新的博客文章。
 *
 * @param  Request  $request
 * @return Response
 */
 public function store(Request $request){ 
    $validatedData = $request->validate([      
      'title' => 'required|unique:posts|max:255',        
      'body' => 'required',    
    ]);    
    // 博客文章验证通过
  }

编写验证器逻辑

现在我们开始在 store 方法中编写逻辑来验证新的博客文章。为此,我们将使用 IlluminateHttpRequest 对象提供的 validate 方法 。如果验证通过,代码就可以正常的运行。如果验证失败,则会抛出异常,并自动将对应的错误响应返回给用户。在典型的 HTTP 请求的情况下,会生成一个重定向响应,而对于 AJAX 请求则会发送 JSON 响应。

让我们接着回到 store 方法来深入理解 validate 方法:

$request->validate([   
 'title' => 'bail|required|unique:posts|max:255',    
 'body' => 'required',
]);

如你所见,我们将所需的验证规则传递至 validate 方法中。另外再提醒一次,如果验证失败,会自动生成一个对应的响应。如果验证通过,那我们的控制器将会继续正常运行。

首次验证失败后停止运行

如果你希望在某个属性第一次验证失败后停止运行验证规则,你需要附加 bail 规则到该属性:

$request->validate([   
 'title' => 'required|unique:posts|max:255',    
 'author.name' => 'required',    
 'author.description' => 'required',
]);

在这个例子中,如果 title 字段没有通过 unique 规则,那么程序就不会继续检查 max

Menulis logik pengesah

Sekarang kita mulakan dalam kedai untuk mengesahkan catatan blog baharu. Untuk melakukan ini, kami akan menggunakan kaedah validate yang disediakan oleh objek IlluminateHttpRequest. Jika pengesahan lulus, kod boleh berjalan seperti biasa. Jika pengesahan gagal, pengecualian akan dilemparkan dan respons ralat yang sepadan akan dikembalikan secara automatik kepada pengguna. Dalam kes permintaan HTTP biasa, respons ubah hala dijana, manakala untuk permintaan AJAX, respons JSON dihantar.

Mari kita kembali ke kaedah kedai untuk memahami kaedah sahkan secara mendalam:

<!-- /resources/views/post/create.blade.php -->
<h1>创建文章</h1>
@if ($errors->any())  
  <div class="alert alert-danger">     
     <ul>
       @foreach ($errors->all() as $error)                
       <li>{{ $error }}</li>
            @endforeach
      </ul>    
   </div>
 @endif
 <!-- 创建文章表单 -->
Seperti yang anda lihat, kami lulus peraturan pengesahan yang diperlukan untuk sahkan kaedah. Selain itu, sekali lagi, jika pengesahan gagal, respons yang sepadan akan dijana secara automatik. Jika pengesahan lulus, pengawal kami akan terus beroperasi seperti biasa.

Berhenti berjalan selepas kegagalan pengesahan pertama
🎜Jika anda ingin berhenti menjalankan peraturan pengesahan selepas sifat gagal pengesahan buat kali pertama, anda perlu menambahkan peraturan jaminan kepada atribut ini: 🎜
$request->validate([  
  'title' => 'required|unique:posts|max:255',    
  'body' => 'required',    
  'publish_at' => 'nullable|date',
]);
🎜Dalam contoh ini, jika medan title tidak melepasi peraturan unique, maka program tidak akan meneruskan semak peraturan maks. Peraturan disahkan mengikut susunan yang ditetapkan. 🎜🎜🎜🎜Nota tentang pelaksanaan data tatasusunan🎜🎜Jika permintaan HTTP anda mengandungi parameter "bersarang" (iaitu tatasusunan), maka anda boleh menentukan parameter ini melalui sintaks "titik" dalam peraturan pengesahan. 🎜
php artisan make:request StoreBlogPost
🎜🎜🎜🎜🎜🎜

Tunjukkan mesej ralat pengesahan

Bagaimana jika parameter permintaan masuk tidak melepasi peraturan pengesahan yang diberikan? Seperti yang dinyatakan sebelum ini, Laravel secara automatik mengubah hala pengguna ke lokasi sebelumnya. Selain itu, semua mesej ralat pengesahan akan disimpan secara automatik dalam sesi. session 中。

重申一次,我们不必在 GET 路由中将错误消息显式绑定到视图。因为 Lavarel 会检查在 Session 数据中的错误信息,并自动将其绑定到视图(如果这个视图文件存在)。而其中的变量 $errorsIlluminateSupportMessageBag 的一个实例。要获取关于这个对象的更多信息,请  查阅这个文档 。

{tip} $errors 变量被 Web 中间件组提供的 IlluminateViewMiddlewareShareErrorsFromSession 中间件绑定到视图中。 当这个中间件被应用后,在你的视图中就可以获取到 $error 变量 , 可以使一直假定 $errors 变量存在并且可以安全地使用。

在上面的例子中,当验证失败的时候,用户将会被重定向到控制器的 create 方法,使我们能在视图中显示错误信息:

/**
 * 获取适用于请求的验证规则。
 *
 * @return array
 */
 public function rules(){   
  return [       
    'title' => 'required|unique:posts|max:255',        
    'body' => 'required',    
    ];
  }

关于可选字段的注意事项

默认情况下,在 Laravel 应用的全局中间件堆栈 AppHttpKernel 类中包含了 TrimStringsConvertEmptyStringsToNull 中间件。因此,如果你不希望验证程序将 null 值视为无效的话,那就需要将「可选」的请求字段标记为 nullable,举个例子:

/**
 * 存储传入的博客文章。
 *
 * @param  StoreBlogPost  $request
 * @return Response
 */
 public function store(StoreBlogPost $request){   
  // 传入的请求通过验证...    
  // 获取通过验证的数据...    
  $validated = $request->validated();
 }

在这个例子里,我们指定 publish_at 字段可以为 null 或者一个有效的日期格式。如果 nullable 的修饰词没有被添加到规则定义中,验证器会认为 null 是一个无效的日期格式。

AJAX 请求 & 验证

在这个例子中,我们使用传统的表单将数据发送到应用程序。但实际情况中,很多程序都会使用 AJAX 来发送请求。当我们对 AJAX 的请求中使用 validate

Sekali lagi, kami tidak perlu mengikat mesej ralat secara eksplisit pada paparan dalam laluan GET. Kerana Lavarel akan menyemak maklumat ralat dalam data Sesi dan mengikatnya secara automatik pada paparan (jika fail paparan wujud). Pembolehubah $errors ialah contoh IlluminateSupportMessageBag. Untuk mendapatkan maklumat lanjut tentang objek ini, sila rujuk dokumentasi ini.

{tip} Pembolehubah $errors terikat pada paparan oleh perisian tengah IlluminateViewMiddlewareShareErrorsFromSession yang disediakan oleh kumpulan middleware Web. Apabila perisian tengah ini digunakan, pembolehubah $error boleh diperolehi dalam paparan anda, yang sentiasa boleh mengandaikan bahawa pembolehubah $errors wujud Dan ia selamat digunakan.

Dalam contoh di atas, apabila pengesahan gagal, pengguna akan dialihkan ke kaedah create pengawal, membolehkan kami memaparkan mesej ralat dalam paparan:
/**
 *  配置验证器实例。
 *
 * @param  \Illuminate\Validation\Validator  $validator
 * @return void
 */
 public function withValidator($validator){ 
    $validator->after(function ($validator) {        
         if ($this->somethingElseIsInvalid()) {           
              $validator->errors()->add('field', 'Something is wrong with this field!');        
             }   
         });
   }

Nota pada medan pilihan

Secara lalai, dalam Timbunan middleware global untuk aplikasi Laravel, kelas AppHttpKernel, mengandungi perisian tengah TrimStrings dan ConvertEmptyStringsToNull. Oleh itu, jika anda tidak mahu pengesah menganggap nilai null sebagai tidak sah, anda perlu menandakan medan permintaan "pilihan" sebagai nullable, contohnya:
/**
 * 判断用户是否有权限做出此请求。
 *
 * @return bool
 */
 public function authorize(){  
   $comment = Comment::find($this->route('comment'));    
   return $comment && $this->user()->can('update', $comment);
 }
Dalam contoh ini, kami menyatakan bahawa medan publish_at boleh menjadi null atau format tarikh yang sah. Jika kelayakan nullable tidak ditambahkan pada definisi peraturan, pengesah akan menganggap null sebagai format tarikh yang tidak sah. 🎜🎜🎜🎜
🎜

Permintaan & Pengesahan AJAX

🎜Dalam ini Dalam contoh ini, kami menggunakan borang tradisional untuk menghantar data ke aplikasi. Tetapi pada hakikatnya, banyak program menggunakan AJAX untuk menghantar permintaan. Apabila kami menggunakan kaedah sahkan dalam permintaan AJAX, Laravel tidak menjana respons ubah hala, sebaliknya menjana respons JSON yang mengandungi semua maklumat ralat pengesahan. Respons JSON ini akan dihantar dengan kod status HTTP 422. 🎜🎜🎜🎜🎜🎜🎜🎜Permintaan borang pengesahan🎜🎜🎜🎜🎜🎜🎜

Buat pengesahan permintaan borang

Dalam menghadapi senario pengesahan yang lebih kompleks, anda boleh membuat "permintaan borang" untuk mengendalikan logik yang lebih kompleks. Permintaan borang ialah kelas permintaan tersuai yang mengandungi logik pengesahan. Anda boleh menggunakan perintah Artisan make:request untuk mencipta kelas permintaan borang: make:request 来创建表单请求类:

Route::post('comment/{comment}');

新生成的类保存在 app/Http/Requests 目录下。如果这个目录不存在,运行 make:request 命令时它会被创建出来。让我们添加一些验证规则到 rules 方法中:

/**
 * 判断用户是否有权限进行此请求。
 *
 * @return bool
 */
 public function authorize(){  
   return true;
  }

{tip} 你可以向 rules 方法传入所需的任何依赖项。他们会自动被 Laravel 提供的 服务容器 自动解析。

验证规则是如何运行的呢?你所需要做的就是在控制器方法中类型提示传入的请求。在调用控制器方法之前验证传入的表单请求,这意味着你不需要在控制器中写任何验证逻辑:

/**
 * 获取已定义验证规则的错误消息。
 *
 * @return array
 */
 public function messages(){  
   return [       
    'title.required' => 'A title is required',        
    'body.required'  => 'A message is required',    
    ];
  }

如果验证失败,就会生成一个让用户返回到先前的位置的重定向响应。这些错误也会被闪存到 session 中,以便这些错误都可以在页面中显示出来。如果传入的请求是 AJAX,会向用户返回具有 422 状态代码和验证错误信息的 JSON 数据的 HTTP 响应。

添加表单请求后钩子

如果你想在表单请求「之后」添加钩子,可以使用 withValidator 方法。这个方法接收一个完整的验证构造器,允许你在验证结果返回之前调用任何方法:

/**
 * 获取验证错误的自定义属性。
 *
 * @return array
 */
 public function attributes(){  
   return [      
     'email' => 'email address',    
     ];
   }

表单请求授权验证

表单请求类内也包含了 authorize 方法。在这个方法中,你可以检查经过身份验证的用户确定其是否具有更新给定资源的权限。比方说,你可以判断用户是否拥有更新文章评论的权限:

<?php
   namespace App\Http\Controllers;use Validator;
   use Illuminate\Http\Request;
   use App\Http\Controllers\Controller;
   class PostController extends Controller{    
      /**
     * 保存一篇新的博客文章。
     *
     * @param  Request  $request
     * @return Response
     */   
    public function store(Request $request)   
     {       
      $validator = Validator::make($request->all(), [      
            'title' => 'required|unique:posts|max:255',            
            'body' => 'required',        
          ]);       
        if ($validator->fails()) {          
          return redirect('post/create')                       
           ->withErrors($validator)                        
           ->withInput();       
           }       
       // Store the blog post...  
        }
      }

由于所有的表单请求都是继承了 Laravel 中的请求基类,所以我们可以使用 user 方法去获取当前认证登录的用户。同时请注意上述例子中对 route 方法的调用。这个方法允许你在被调用的路由上获取其定义的 URI 参数,譬如下面例子中的 {comment} 参数:

Validator::make($request->all(), [   
 'title' => 'required|unique:posts|max:255',    
 'body' => 'required',
])->validate();

如果 authorize 方法返回 false,则会自动返回一个包含 403 状态码的 HTTP 响应,也不会运行控制器的方法。

如果你打算在应用程序的其它部分处理授权逻辑,只需从 authorize 方法返回 true

return redirect('register')          
  ->withErrors($validator, 'login');

{tip} 你可以向 authorize

{{ $errors->login->first('email') }}

Kelas yang baru dijana disimpan dalam direktori app/Http/Requests. Jika direktori ini tidak wujud, ia akan dibuat apabila menjalankan perintah make:request. Mari tambahkan beberapa peraturan pengesahan pada kaedah rules:
$validator = Validator::make(...);$validator->after(function ($validator) {   
 if ($this->somethingElseIsInvalid()) {     
    $validator->errors()->add('field', 'Something is wrong with this field!');   
     }
   });
 if ($validator->fails()) {  
   //
 }

{tip} Anda boleh menghantar sebarang kebergantungan yang anda mahukan kepada kaedah rules. Mereka akan diselesaikan secara automatik oleh bekas perkhidmatan yang disediakan oleh Laravel.

Bagaimana peraturan pengesahan berfungsi? Apa yang anda perlu lakukan ialah menaip-membawa permintaan masuk dalam kaedah pengawal. Sahkan permintaan borang masuk sebelum memanggil kaedah pengawal, yang bermaksud anda tidak perlu menulis sebarang logik pengesahan dalam pengawal:
$errors = $validator->errors();echo $errors->first('email');
Jika pengesahan gagal, respons ubah hala dijana yang membawa pengguna kembali ke lokasi sebelumnya . Ralat ini juga dipancarkan ke dalam sesi supaya ia boleh dipaparkan pada halaman. Jika permintaan masuk ialah AJAX, respons HTTP data JSON dengan kod status 422 dan maklumat ralat pengesahan dikembalikan kepada pengguna. 🎜
🎜

Tambah cangkuk selepas permintaan borang

🎜Jika anda ingin menambah cangkuk "selepas" permintaan borang, anda boleh menggunakan dengan kaedahValidator. Kaedah ini menerima pembina pengesahan lengkap, membolehkan anda memanggil sebarang kaedah sebelum keputusan pengesahan dikembalikan: 🎜
foreach ($errors->get('email') as $message) {  
  //
}
🎜🎜🎜
🎜🎜Pengesahan kebenaran permintaan borang🎜🎜Kelas permintaan borang juga mengandungi kaedah kebenaran. Dalam kaedah ini, anda boleh menyemak pengguna yang disahkan untuk menentukan sama ada ia mempunyai kebenaran untuk mengemas kini sumber yang diberikan. Sebagai contoh, anda boleh menentukan sama ada pengguna mempunyai kebenaran untuk mengemas kini ulasan artikel: 🎜
foreach ($errors->get('attachments.*') as $message) { 
   //
}
🎜Memandangkan semua permintaan borang mewarisi kelas asas permintaan dalam Laravel, kami boleh menggunakan kaedah user untuk mendapatkan Authenticate semasa pengguna log masuk. Sila ambil perhatian juga panggilan ke kaedah rote dalam contoh di atas. Kaedah ini membolehkan anda mendapatkan parameter URI yang ditakrifkan pada laluan yang dipanggil, seperti parameter {comment} dalam contoh berikut: 🎜
foreach ($errors->all() as $message) { 
   //
}
🎜Jika kaedah authorize mengembalikan < kod >false, respons HTTP yang mengandungi kod status 403 akan dikembalikan secara automatik dan kaedah pengawal tidak akan dijalankan. 🎜🎜Jika anda bercadang untuk mengendalikan logik kebenaran di bahagian lain aplikasi, hanya kembalikan true daripada kaedah authorize: 🎜
if ($errors->has('email')) { 
   //
}
🎜{tip} Anda boleh minta < The code>authorize kaedah lulus dalam mana-mana kebergantungan yang diperlukan. Ia akan diselesaikan secara automatik oleh bekas perkhidmatan yang disediakan oleh Laravel. 🎜🎜🎜🎜🎜🎜🎜🎜

Mesej ralat tersuai

Anda boleh menyesuaikan mesej ralat dengan mengatasi kaedah mesej permintaan borang. Kaedah ini harus mengembalikan tatasusunan pasangan atribut/peraturan dan mesej ralatnya yang sepadan: messages 方法来自定义错误消息。此方法应返回属性 / 规则对数组及其对应错误消息:

$messages = [  
  'required' => 'The :attribute field is required.',
 ];
 $validator = Validator::make($input, $rules, $messages);

自定义验证属性

如果你希望将验证消息的 :attribute 部分替换为自定义属性名称,则可以重写 attributes 方法来指定自定义名称。此方法应返回属性 / 名称对的数组:

$messages = [   
 'same'=> 'The :attribute and :other must match.',    
 'size'=> 'The :attribute must be exactly :size.',    
 'between' => 'The :attribute value :input is not between :min - :max.',    
 'in'=> 'The :attribute must be one of the following types: :values',
];

手动创建验证器

如果你不想在请求上使用 validate 方法,你可以通过 Validator facade 手动创建一个验证器示例。
Validator facade 上的 make 方法创建一个验证器示例:

$messages = [ 
   'email.required' => 'We need to know your e-mail address!',
 ];

传给 make 方法的第一个参数是需要验证的数据。第二个参数则是该数据的验证规则。

如果验证失败,则可以使用 withErrors 方法把错误消息闪存到 Session 。使用这个方法进行重定向后, $errors 变量会自动和视图共享,你可以把这些消息显示给用户。 withErrors 方法接收验证器、MessageBag 或 PHP Array

自动重定向

如果你想手动创建验证器实例,又想使用 validates 方法提供的自动重定向,那么你可以在现有的验证器示例上调用 validate 方法。如果验证失败,用户将会自动重定向。在 AJAX 请求中,则会返回 JSON 格式的响应。

'custom' => [  
  'email' => [    
      'required' => 'We need to know your e-mail address!',  
      ],
    ],

命名错误包

如果你一个页面中有多个表单,你可以通过命名错误包来检索特定表单的错误消息。只需给 withErrors 方法传递一个名字作为第二个参数

'attributes' => [  
  'email' => 'email address',
 ],

然后你就可以从 $errors 变量中获取指定表单的错误消息:

$request->validate([  
  'credit_card_number' => 'required_if:payment_type,cc'
 ]);

验证后钩子

验证器还允许你添加在验证成功之后允许的回调函数,以便你进行下一步的验证,甚至在消息集合中添加更多的错误消息。使用它只需在验证实例上使用 after

    当payment type为cc时,credit card number 不能为空。

Atribut pengesahan tersuai
Jika anda ingin menggantikan bahagian :attribute mesej pengesahan dengan nama atribut tersuai, anda boleh mengatasi kaedah atribut untuk menentukan nama tersuai. Kaedah ini harus mengembalikan tatasusunan pasangan harta/nama: 🎜
'values' => [ 
   'payment_type' => [    
       'cc' => '信用卡' 
        ],
    ],
🎜🎜🎜
🎜

Mencipta secara manual validations Validator

🎜Jika anda tidak mahu menggunakan kaedah validator pada permintaan, anda boleh membuat contoh validator secara manual melalui fasad Validator.
Buat contoh pengesah menggunakan kaedah make pada fasad Validator: 🎜
    当payment type 为信用卡时,credit card number不能为空。
🎜Argumen pertama yang dihantar ke kaedah make ialah data yang perlu disahkan. Parameter kedua ialah peraturan pengesahan untuk data. 🎜🎜Jika pengesahan gagal, anda boleh menggunakan kaedah withErrors untuk memancarkan mesej ralat ke Sesi. Selepas mengubah hala menggunakan kaedah ini, pembolehubah $errors akan dikongsi secara automatik dengan paparan dan anda boleh memaparkan mesej ini kepada pengguna. Kaedah withErrors menerima pengesah, MessageBag atau PHP Array . 🎜🎜
🎜🎜
🎜🎜Automatic redirection🎜🎜Jika anda ingin mencipta instance validator secara manual dan ingin menggunakan sahkan menyediakan ubah hala automatik, kemudian anda boleh memanggil kaedah sahkan pada contoh pengesah sedia ada. Jika pengesahan gagal, pengguna akan diubah hala secara automatik. Dalam permintaan AJAX, respons berformat JSON dikembalikan. 🎜
'start_date' => 'required|date|after:tomorrow'
🎜
🎜🎜
🎜🎜Named error bags🎜🎜Jika anda mempunyai berbilang borang pada halaman, anda Ralat mesej untuk borang tertentu boleh diambil dengan menamakan pakej ralat. Hanya hantar nama sebagai argumen kedua kepada kaedah withErrors 🎜
'finish_date' => 'required|date|after:start_date'
🎜 dan kemudian anda boleh mendapatkan mesej ralat untuk borang yang ditentukan daripada pembolehubah $errors: 🎜
'avatar' => 'dimensions:min_width=100,min_height=200'
🎜 < a name="after-validation-hook">🎜🎜
🎜🎜Post-validation hook🎜🎜Pengesah juga membenarkan anda menambah fungsi panggil balik yang dibenarkan selepas pengesahan yang berjaya, Ini membolehkan anda melakukan pengesahan lanjut dan juga menambah lebih banyak mesej ralat pada koleksi mesej. Untuk menggunakannya hanya gunakan kaedah selepas pada contoh pengesahan: 🎜
'avatar' => 'dimensions:ratio=3/2'
🎜🎜🎜🎜🎜🎜

Mengendalikan mesej ralat

Selepas memanggil kaedah errors pada contoh Validator, anda akan mendapat contoh IlluminateSupportMessageBag, yang mempunyai pelbagai kaedah mudah Handle mesej ralat. Pembolehubah $ errors diberikan secara automatik kepada semua paparan dan juga merupakan contoh kelas MessageBag. Validator 实例上调用 errors 方法后,你会得到一个 IlluminateSupportMessageBag 实例,它拥有各种方便的方法处理错误信息。自动提供给所有视图的 $ errors 变量,也是 MessageBag 类的一个实例。

查看特定字段的第一个错误信息

要查看特定字段的第一个错误消息,可以使用 first 方法:

use Illuminate\Validation\Rule;
Validator::make($data, [  
  'avatar' => [     
     'required',        
     Rule::dimensions()->maxWidth(1000)->maxHeight(500)->ratio(3 / 2),    
   ],
  ]);

查看特定字段的所有错误消息

如果你需要获取指定字段的所有错误消息的数组,则可以使用 get 方法:

'foo.*.id' => 'distinct'

如果要验证表单的数组字段,你可以使用 * 来获取每个数组元素的所有错误消息:

'state' => 'exists:states'

查看所有字段的所有错误消息

如果你想要得到所有字段的所有错误消息,可以使用 all 方法:

'state' => 'exists:states,abbreviation'

判断特定字段是否含有错误消息

has 方法可以被用来判断给定的字段是否存在错误信息:

'email' => 'exists:connection.staff,email'

自定义错误消息

如果有需要的话,你也可以使用自定义错误消息取代默认值进行验证。有几种方法可以指定自定义消息。首先,你可以将自定义消息作为第三个参数传递给 Validator::make 方法:

use Illuminate\Validation\Rule;
Validator::make($data, [  
  'email' => [      
    'required',        
    Rule::exists('staff')->where(function ($query) {  
           $query->where('account_id', 1);    
        }),
     ],
  ]);

在这个例子中,:attribute 占位符会被验证字段的实际名称取代。除此之外,你还可以在验证消息中使用其它占位符。例如:

use Illuminate\Validation\Rule;
Validator::make($data, [  
  'zones' => [      
    'required',        
    Rule::in(['first-zone', 'second-zone']),  
   ],
]);

为给定属性指定自定义消息

有时候你可能只想为特定的字段自定义错误消息。只需在属性名称后使用「点」语法来指定验证的规则即可:

'video' => 'mimetypes:video/avi,video/mpeg,video/quicktime'

在语言文件中指定自定义消息

在大多数情况下,您可能会在语言文件中指定自定义消息,而不是直接将它们传递给 Validator。为此,需要把你的消息放置于 resources/lang/xx/validation.php 语言文件内的 custom 数组中。

'photo' => 'mimes:jpeg,bmp,png'

在语言文件中指定自定义属性

如果你希望将验证消息的 :attribute 占位符替换为自定义属性名称,你可以在 resources/lang/xx/validation.php 语言文件的 attributes

Lihat mesej ralat pertama medan tertentu

Untuk melihat mesej ralat pertama medan tertentu, anda boleh menggunakan kaedah pertama:
use Illuminate\Validation\Rule;
Validator::make($data, [  
  'toppings' => [     
     'required',        
     Rule::notIn(['sprinkles', 'cherries']), 
     ],
 ]);
🎜

Lihat semua mesej ralat untuk medan tertentu

🎜Jika anda perlu mendapatkan semua mesej ralat untuk Tatasusunan medan yang ditentukan, anda boleh menggunakan kaedah get: 🎜
use Illuminate\Validation\Rule;
Validator::make($request->all(), [  
  'role_id' => Rule::requiredIf($request->user()->is_admin),]);
  Validator::make($request->all(), [   
   'role_id' => Rule::requiredIf(function () use ($request) {     
      return $request->user()->is_admin;   
      }),
    ]);
🎜 Jika anda ingin mengesahkan medan tatasusunan borang, anda boleh menggunakan * untuk mendapatkan semua mesej ralat untuk setiap elemen tatasusunan: 🎜
'email' => 'unique:users,email_address'
🎜

Lihat semua mesej ralat untuk semua medan

🎜Jika anda ingin mendapatkan semua mesej ralat untuk semua medan, anda boleh menggunakan semua Kaedah: 🎜
'email' => 'unique:connection.users,email_address'
🎜

Tentukan sama ada medan tertentu mengandungi mesej ralat

🎜 kaedah has boleh Digunakan untuk menentukan sama ada terdapat mesej ralat dalam medan tertentu: 🎜
use Illuminate\Validation\Rule;
Validator::make($data, [ 
   'email' => [      
     'required',        
     Rule::unique('users')->ignore($user->id),  
     ],
 ]);
🎜🎜
🎜

Mesej ralat tersuai

🎜Jika perlu, anda juga boleh menggunakan mesej ralat tersuai untuk menggantikan nilai lalai untuk pengesahan. Terdapat beberapa cara untuk menentukan mesej tersuai. Mula-mula, anda boleh menghantar mesej tersuai sebagai parameter ketiga kepada kaedah Validator::make: 🎜
Rule::unique('users')->ignore($user)
🎜Dalam contoh ini, pemegang tempat :attribute akan menjadi Sahkan yang sebenar nama medan sebaliknya. Selain itu, anda boleh menggunakan ruang letak lain dalam mesej pengesahan. Contohnya: 🎜
Rule::unique('users')->ignore($user->id, 'user_id')
🎜

Tentukan mesej tersuai untuk atribut yang diberikan

🎜Kadangkala anda mungkin hanya mahu menyesuaikan mesej ralat untuk yang tertentu padang . Hanya gunakan sintaks "titik" selepas nama atribut untuk menentukan peraturan pengesahan: 🎜
Rule::unique('users', 'email_address')->ignore($user->id),
🎜🎜
🎜

Tentukan mesej tersuai dalam fail bahasa

🎜Dalam kebanyakan kes, anda mungkin akan menentukan mesej tersuai dalam fail bahasa dan bukannya menghantarnya terus kepada Validator . Untuk melakukan ini, letakkan mesej anda dalam tatasusunan custom dalam fail bahasa resources/lang/xx/validation.php. 🎜
'email' => Rule::unique('users')->where(function ($query) {  
  return $query->where('account_id', 1);
})
🎜

Nyatakan atribut tersuai dalam fail bahasa

🎜Jika anda ingin mengesahkan :attribute Pemegang tempat mesej digantikan dengan nama atribut tersuai yang boleh anda tentukan dalam tatasusunan atribut fail bahasa resources/lang/xx/validation.php: 🎜
$v = Validator::make($data, [    'email' => 'sometimes|required|email',]);
🎜 🎜

Nyatakan nilai tersuai dalam fail bahasa

Kadangkala mungkin perlu menggantikan pemegang tempat :value mesej pengesahan dengan literal tersuai untuk nilai. Contohnya, jika nilai payment_type ialah cc, gunakan peraturan pengesahan berikut, yang menyatakan bahawa nombor kad kredit diperlukan: :value 占位符替换为值的自定义文字。例如,如果 payment_type 的值为 cc,使用以下验证规则,该规则指定需要信用卡号:

$v = Validator::make($data, [  
  'email' => 'required|email',    
  'games' => 'required|numeric',
]);

如果此验证规则失败,则会产生以下错误消息:

$v->sometimes('reason', 'required|max:500', function ($input) {  
  return $input->games >= 100;
});

您可以通过定义 values 数组,在 validation 语言文件中指定自定义值表示,而不是显示 cc

$v->sometimes(['reason', 'cost'], 'required', function ($input) {   
   return $input->games >= 100;
 });

Jika peraturan pengesahan ini gagal, mesej ralat berikut dihasilkan :

$validator = Validator::make($request->all(), [  
  'photos.profile' => 'required|image',
]);

Anda boleh menentukan perwakilan nilai tersuai dalam fail bahasa pengesahan dengan mentakrifkan tatasusunan nilai dan bukannya menunjukkan cc sebagai jenis pembayaran Nilai:

$validator = Validator::make($request->all(), [  
  'person.*.email' => 'email|unique:users',    
  'person.*.first_name' => 'required_with:person.*.last_name',
]);
Sekarang, jika peraturan pengesahan gagal, ia akan menghasilkan mesej berikut:
'custom' => [  
  'person.*.email' => [    
      'unique' => 'Each person must have a unique e-mail address',   
     ]
    ],

🎜🎜🎜

Peraturan Pengesahan Yang Tersedia

Berikut ialah senarai semua peraturan pengesahan yang tersedia dan fungsinya:

Diterima
URL Aktif
Selepas (Tarikh)
Tarikh Layak
Alpha
Alpha Dash
Alpha Numeric
Array
Bail
Sebelum (Tarikh)
Sebelum Atau Sama Sama
Boolean
Disahkan
Tarikh
Tarikh Sama dengan
Format Tarikh
Berbeza
Digit
Digit Antara
Dimensi (Fail Imej
E- Mel
Wujud (Pangkalan Data)
Fail
Diisi
Lebih Besar Daripada
Lebih Besar Daripada Atau Sama
Imej (Fail)
In
In


Di Array Alamat IP
JSON
Kurang Daripada
Kurang Daripada Atau Sama
Max
Jenis MIME
Taip MIME Mengikut Sambungan Fail
Min
Tiada Masuk


Nu llable
Numeric
Hadir
Ekspresi Biasa
Diperlukan
Diperlukan Jika
Diperlukan Kecuali
Diperlukan Dengan
Diperlukan Dengan Tanpa
Diperlukan Tanpa Semua
Sama
Saiz
Bermula Dengan
String
Zon Waktu
Unik (Pangkalan Data)
URL

UUID

diterima

Medan pengesahan mestilah ya, on, 1, atau benar. Ini berguna apabila mengesahkan sama ada anda bersetuju dengan Syarat Perkhidmatan.

active_url

Mengikut fungsi PHP dns_get_record, medan pengesahan mesti mempunyai rekod A atau AAAA yang sah. dns_get_record,验证字段必须具有有效的 A 或 AAAA 记录。

after:date

验证字段必须是给定日期之后的值。日期值将传递到 PHP 函数 strtotime

php artisan make:rule Uppercase

您可以指定另一个要与日期进行比较的字段,而不是传递要由 strtotime 处理的日期字符串:

<?php
  namespace App\Rules;
  use Illuminate\Contracts\Validation\Rule;
  class Uppercase implements Rule{   
        /**
     * 判断验证规则是否通过。
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */   
    public function passes($attribute, $value)   
     {       
       return strtoupper($value) === $value;   
      }   
     /**
     * 获取验证错误消息。
     *
     * @return string
     */   
    public function message()  
      {       
       return 'The :attribute must be uppercase.';   
       }
      }

after_or_equal:date

验证字段必须是在给定日期之后或与此日期相同的值。更多信息,请参阅 after 规则。

alpha

验证字段必须完全由字母构成。

alpha_dash

验证字段可能包含字母、数字,以及破折号 (-) 和下划线 ( _ )。

alpha_num

验证字段必须是完全是字母、数字。

array

验证的字段必须是一个 PHP 数组。

bail

在第一次验证失败后停止运行验证规则。

before:date

验证字段必须是在给定日期之前。这个日期值将会被传递给  PHP 的  strtotime 函数来计算。

before_or_equal:date

验证字段必须是在给定日期之前或与之相同的日期。这个日期值将会被传递给  PHP 的  strtotime 函数来计算。

between:min,max

验证字段的大小必须在给定的  min 和  max 之间。字符串、数字、数组和文件的计算方式都使用  size

selepas:

date
🎜Medan pengesahan mestilah nilai selepas tarikh yang diberikan. Nilai tarikh akan dihantar ke fungsi PHP strtotime: 🎜
/**
 * 获取验证错误消息。
 *
 * @return string
 */
 public function message(){  
   return trans('validation.uppercase');
  }
🎜 Daripada menghantar rentetan tarikh untuk diproses oleh strtotime anda boleh menentukan medan lain untuk dibandingkan dengan tarikh :🎜
use App\Rules\Uppercase;$request->validate([  
  'name' => ['required', 'string', new Uppercase],
]);
🎜🎜🎜
🎜🎜after_or_equal:🎜tarikh🎜🎜🎜Medan pengesahan mesti diberikan Nilai selepas atau sama dengan tarikh yang ditentukan. Untuk mendapatkan maklumat lanjut, lihat peraturan selepas🎜. 🎜🎜🎜🎜
🎜🎜alpha🎜🎜Medan pengesahan mesti terdiri sepenuhnya daripada huruf. 🎜🎜🎜🎜
🎜🎜alpha_dash🎜🎜 Medan pengesahan mungkin mengandungi huruf, nombor dan sempang (-) dan Garis bawah (_). 🎜🎜🎜🎜
🎜🎜alpha_num🎜🎜Medan pengesahan mestilah huruf dan nombor sepenuhnya. 🎜🎜🎜🎜
🎜🎜array🎜🎜Medan yang hendak disahkan mestilah tatasusunan PHP. 🎜🎜🎜🎜
🎜🎜bail🎜🎜Berhenti menjalankan peraturan pengesahan selepas kegagalan pengesahan pertama. 🎜🎜🎜🎜
🎜🎜sebelum:🎜tarikh🎜🎜🎜Medan pengesahan mesti sebelum tarikh yang diberikan. Nilai tarikh ini akan dihantar ke fungsi strtotime PHP untuk pengiraan. 🎜🎜🎜🎜
🎜🎜before_or_equal:🎜tarikh🎜🎜🎜 mestilah pada medan pengesahan yang diberikan tarikh sebelum atau pada tarikh yang sama. Nilai tarikh ini akan dihantar ke fungsi strtotime PHP untuk pengiraan. 🎜🎜🎜🎜
🎜🎜antara:🎜min🎜,🎜max🎜🎜🎜Saiz medan pengesahan dalam tempoh yang diberikan antara 🎜min🎜 dan 🎜maks🎜. Rentetan, nombor, tatasusunan dan fail dikira menggunakan kaedah size🎜. 🎜🎜🎜🎜🎜🎜🎜

boolean

Medan yang disahkan mesti boleh ditukar kepada jenis Boolean. Input yang boleh diterima adalah benar, false, 1, 0, "1", dan "0". true, false, 1, 0, "1", 和 "0"

confirmed

验证字段必须具有匹配字段 foo_confirmation。例如,验证字段为 password ,输入中必须存在与之匹配的 password_confirmation 字段。

date

根据 PHP 函数 strtotime,验证字段必须是有效的日期。

date_equals:date

验证字段必须等于给定日期。日期将传递到 PHP 函数 strtotime

date_format:format

验证字段必须匹配给定的日期格式。当验证某个字段的时候,你应该 只使用 date 或者 date_format ,而不是同时使用。

different:field

验证字段必须具有与 field 不同的值。

digits:value

验证字段必须为 numeric ,且必须具有_value_的确切长度。

digits_between:min,max

验证的字段的长度必须在给定的  min 和  max 之间。

dimensions

验证中的文件必须是图片,并且符合指定的规则约束:

$validator = Validator::make($request->all(), [   
 'title' => [      
   'required',        
   'max:255',        
   function ($attribute, $value, $fail) {          
     if ($value === 'foo') {              
       $fail($attribute.' is invalid.');      
             }      
            },    
          ],
        ]);

可用的约束为: min_width, max_width, min_height, max_height, width, height, ratio

ratio 限制应该表示为宽度除以高度。 这可以通过使用像 3/2 的表达式 或者一个浮点数,像 1.5 来指定:

<?php
  namespace App\Providers;
  use Illuminate\Support\ServiceProvider;
  use Illuminate\Support\Facades\Validator;
  class AppServiceProvider extends ServiceProvider{   
      /**
     * 引导任何应用程序。
     *
     * @return void
     */   
  public function boot()   
   {       
     Validator::extend('foo', function ($attribute, $value, $parameters, $validator) { 
        return $value == 'foo';  
         });   
       }    
     /**
     * 注册服务提供器。
     *
     * @return void
     */   
     public function register()   
      {       
       //   
       }
     }

由于此规则需要多个参数,你可以使用 Rule::dimensions

confirmed
Medan pengesahan mesti mempunyai medan sepadan foo_confirmation. Contohnya, jika medan pengesahan ialah kata laluan , medan password_confirmation yang sepadan mesti ada dalam input.

date

Mengikut fungsi PHP strtotime, pengesahan medan mestilah Tarikh sah.

date_equals:tarikh

Medan pengesahan mestilah sama dengan tarikh Set yang diberikan. Tarikh dihantar ke fungsi PHP strtotime.

🎜🎜date_format:format🎜🎜Medan pengesahan mesti sepadan format tarikh tertentu. Apabila mengesahkan medan, anda harus hanya menggunakan tarikh atau date_format, bukan kedua-duanya. 🎜🎜🎜🎜
🎜🎜berbeza:medan🎜🎜Medan pengesahan mesti mempunyai yang sama >field nilai yang berbeza. 🎜🎜🎜🎜
🎜🎜digit:nilai🎜🎜Medan pengesahan mestilah angka dan mesti mempunyai panjang tepat _nilai_. 🎜🎜🎜🎜
🎜🎜digit_antara:min,maks🎜🎜Panjang medan yang akan disahkan mestilah antara min dan maks yang diberikan. 🎜🎜🎜🎜
🎜🎜dimensions🎜🎜Fail di bawah pengesahan mestilah imej dan mematuhi kekangan peraturan yang ditetapkan: 🎜
Validator::extend('foo', 'FooValidator@validate');
🎜Kekangan yang tersedia ialah: min_width, max_width, min_height, max_height, width em >, tinggi, nisbah. 🎜🎜nisbah Had hendaklah dinyatakan sebagai lebar dibahagikan dengan ketinggian. Ini boleh ditentukan menggunakan ungkapan seperti 3/2 atau nombor titik terapung seperti 1.5: 🎜
"foo" => "Your input was invalid!",
"accepted" => "The :attribute must be accepted.",
// 其余的验证错误消息...
🎜Memandangkan peraturan ini memerlukan berbilang parameter, anda boleh menggunakan Peraturan Kaedah ::dimensions dengan lancar membina peraturan: 🎜
/**
 * 启动应用程序。
 *
 * @return void
 */
 public function boot(){  
   Validator::extend(...);    
   Validator::replacer('foo', function ($message, $attribute, $rule, $parameters) {    
       return str_replace(...);  
      });
 }
🎜🎜🎜🎜🎜🎜🎜distinct🎜🎜Apabila mengesahkan tatasusunan, medan pengesahan tidak boleh mengandungi sebarang nilai pendua. 🎜
$rules = ['name' => 'unique'];
$input = ['name' => null];
Validator::make($input, $rules)->passes();
 // true
🎜🎜🎜🎜🎜🎜🎜emel🎜🎜Medan pengesahan mestilah alamat e-mel yang diformat dengan betul. 🎜🎜🎜🎜🎜🎜🎜

wujud:jadual,lajur

Sahkan medan mesti wujud dalam jadual pangkalan data yang diberikan.

Penggunaan asas peraturan wujud

Validator::extendImplicit('foo', function ($attribute, $value, $parameters, $validator) { 
   return $value == 'foo';
  });

Jika pilihan lajur tidak dinyatakan, nama medan akan digunakan. column 选项,则将使用字段名称。

指定自定义的表字段

rrreee

有时,你可能需要指定要用于「exists」查询的特定数据库连接。你可以使用「点」语法将连接名称添加到表名称前来完成此操作:

rrreee

如果您想自定义验证规则执行的查询,您可以使用 Rule 类来流畅地定义规则。在下面的例子中,我们还以数组的形式指定验证规则,而不是使用 | 字符来分隔它们:

rrreee

file

验证的字段必须是成功上传的文件。

filled

验证字段存在时不得为空。

gt:field

验证字段必须大于给定的 field。两个字段必须是相同的类型。字符串、数字、数组和文件都使用 size 进行相同的评估。

gte:field

验证字段必须大于或等于给定的  field。两个字段必须是相同的类型。字符串、数字、数组和文件都使用 size 进行相同的评估。

image

验证的文件必须是图片 (jpeg, png, bmp, gif, 或 svg)

in:foo,bar,...

验证字段必须包含在给定的值列表中。由于此规则通常要求您 implode 数组,因此可以使用 Rule :: in

Nyatakan medan jadual tersuairrreeeKadangkala, anda mungkin perlu menentukan sambungan pangkalan data khusus untuk digunakan untuk pertanyaan "wujud". Anda boleh melakukannya dengan menambahkan nama sambungan pada nama jadual menggunakan sintaks "titik":

rrreee
Jika anda ingin menyesuaikan pertanyaan yang dilakukan oleh peraturan pengesahan, anda boleh menggunakan kelas Peraturan untuk menentukan ia dengan lancar memerintah. Dalam contoh di bawah, kami juga menentukan peraturan pengesahan sebagai tatasusunan dan bukannya menggunakan aksara | untuk memisahkannya:
rrreee

failMedan yang disahkan mestilah fail yang berjaya dimuat naik.

filled

Medan pengesahan tidak boleh kosong apabila ada.

gt:

field

Medan pengesahan mestilah lebih besar daripada medan

yang diberikan . Kedua-dua medan mestilah daripada jenis yang sama. Rentetan, nombor, tatasusunan dan fail semuanya dinilai secara sama menggunakan saiz.

gte:

field

Medan pengesahan mesti lebih besar daripada atau sama dengan yang diberikan

padang

. Kedua-dua medan mestilah daripada jenis yang sama. Rentetan, nombor, tatasusunan dan fail semuanya dinilai secara sama menggunakan saiz.

imej
🎜Fail yang disahkan mestilah imej (jpeg, png, bmp, gif, atau svg)🎜🎜🎜🎜
🎜🎜in:🎜foo🎜,🎜bar🎜,...🎜🎜pengesahan medan Mesti terkandung dalam senarai nilai yang diberikan. Memandangkan peraturan ini biasanya memerlukan anda meletup tatasusunan, anda boleh menggunakan kaedah Rule::in untuk membina peraturan dengan lancar: 🎜rrreee🎜🎜🎜🎜🎜🎜🎜in_array :🎜medan lain🎜 🎜🎜Medan yang sedang disahkan mesti wujud dalam nilai medan lain 🎜medan lain🎜. 🎜🎜🎜🎜🎜🎜🎜🎜integer🎜🎜Medan yang hendak disahkan mestilah integer. 🎜🎜🎜🎜🎜🎜🎜🎜ip🎜🎜Medan yang hendak disahkan mestilah alamat IP. 🎜🎜🎜🎜ipv4🎜🎜Medan yang disahkan mestilah alamat IPv4. 🎜🎜🎜🎜ipv6🎜🎜Medan yang disahkan mestilah alamat IPv6. 🎜🎜🎜🎜🎜🎜🎜

json

Medan yang hendak disahkan mestilah rentetan JSON yang sah.

lt:medan

Medan dalam pengesahan mestilah lebih kecil daripada medan yang diberikan. Kedua-dua medan mestilah daripada jenis yang sama. Saiz rentetan, angka, tatasusunan dan fail dikira dan dinilai dengan kaedah saiz. size 方法进行评估。

lte:field

验证中的字段必须小于或等于给定的字段。这两个字段必须是相同的类型。字符串、数值、数组和文件大小的计算方式与  size  方法进行评估。

max:value

验证中的字段必须小于或等于 value。字符串、数字、数组或是文件大小的计算方式都用 size 方法进行评估。

mimetypes:text/plain,...

验证的文件必须与给定 MIME 类型之一匹配:

rrreee

要确定上传文件的 MIME 类型,会读取文件的内容来判断 MIME 类型,这可能与客户端提供的 MIME 类型不同。

mimes:foo,bar,...

验证的文件必须具有与列出的其中一个扩展名相对应的 MIME 类型。

MIME 规则基本用法

rrreee

即使你可能只需要验证指定扩展名,但此规则实际上会验证文件的 MIME 类型,其通过读取文件的内容以猜测它的 MIME 类型。

可以在以下链接中找到完整的 MIME 类型列表及其相应的扩展名:
https://svn.apache.org/repos/asf/httpd/htt...

min:value

验证中的字段必须具有最小值。字符串、数字、数组或是文件大小的计算方式都用 size 方法进行评估。

not_in:foo,bar,...

验证的字段不能包含在给定的值列表中。Rule::notIn

lte:
field
🎜🎜Medan di bawah pengesahan mestilah kurang daripada atau sama dengan diberi 🎜 Padang 🎜. Kedua-dua medan mestilah daripada jenis yang sama. Saiz rentetan, angka, tatasusunan dan fail dikira dan dinilai dengan kaedah saiz. 🎜🎜🎜🎜
🎜🎜maks:🎜value🎜🎜🎜Medan dalam pengesahan mestilah kurang daripada atau sama dengan 🎜 🎜. Pengiraan rentetan, nombor, tatasusunan atau saiz fail dinilai menggunakan kaedah saiz. 🎜🎜🎜🎜
🎜🎜mimetypes:🎜text/plain🎜,...🎜🎜Fail yang disahkan mestilah sama seperti yang diberikan Padan dengan salah satu jenis MIME yang ditentukan: 🎜rrreee🎜 Untuk menentukan jenis MIME fail yang dimuat naik, kandungan fail dibaca untuk menentukan jenis MIME, yang mungkin berbeza daripada jenis MIME yang disediakan oleh pelanggan. 🎜🎜🎜🎜
🎜🎜mimes:🎜foo🎜,🎜bar🎜,...🎜🎜Dokumen yang disahkan diperlukan Mempunyai jenis MIME yang sepadan dengan salah satu sambungan yang disenaraikan. 🎜
🎜🎜Penggunaan asas peraturan MIME🎜rrreee🎜Walaupun anda mungkin hanya perlu mengesahkan sambungan yang ditentukan, peraturan ini sebenarnya mengesahkan jenis MIME fail, yang dibaca oleh Dapatkan kandungan fail untuk meneka jenis MIMEnya. 🎜🎜Senarai lengkap jenis MIME dan sambungannya yang sepadan boleh didapati di pautan berikut:
https://svn.apache.org/repos/asf/httpd/htt... 🎜🎜
🎜🎜
🎜🎜min:🎜value🎜🎜🎜Medan dalam pengesahan mesti mempunyai nilai minimum. Pengiraan saiz rentetan, nombor, tatasusunan atau fail dinilai menggunakan kaedah size🎜. 🎜🎜🎜🎜
🎜🎜not_in:🎜foo🎜,🎜bar🎜 Medan,...🎜🎜disahkan tidak boleh dimasukkan dalam senarai nilai yang diberikan. Kaedah Rule::notIn boleh digunakan untuk membina peraturan: 🎜rrreee🎜🎜🎜🎜🎜🎜

not_regex:pattern

Medan di bawah pengesahan mestilah tidak sepadan dengan ungkapan biasa yang diberikan.

Secara dalaman, peraturan ini menggunakan fungsi PHP preg_match. Nilai yang dimasukkan hendaklah mengikut format yang sama yang diperlukan oleh fungsi preg_match, jadi sertakan pembatas yang sah juga. Contohnya: 'email' => 'not_regex:/^.+$/i'. preg_match 函数。输入的值应遵循 preg_match 函数所需的相同格式,因此也包括有效的分隔符。例如:'email' => 'not_regex:/^.+$/i'

注意: 当使用 regex/not_regex 模式时,可能需要在数组中指定规则,而不是使用管道分隔符,尤其是在正则表达式包含管道字符的情况下。

nullable

验证的字段可以为 null。这在验证基本数据类型时特别有用,例如可以包含空值的字符串和整数。

numeric

验证的字段必须是数字。

present

验证的字段必须存在于输入数据中,但可以为空。

regex:pattern

验证的字段必须与给定的正则表达式匹配。

在内部,此规则使用 PHP preg_match 函数。输入的值应遵循 preg_match 函数所需的相同格式,因此也包括有效的分隔符。例如:'email' => 'regex:/^.+@.+$/i'

注意: 当使用 regex 规则时,你必须使用数组,而不是使用 | 分隔符,特别是如果正则表达式包含 | 字符。

required

验证的字段必须存在于输入数据中,而不是空。如果满足以下条件之一,则字段被视为「空」:

  • 值为 null
  • 值为空字符串。
  • 值为空数组或空 Countable 对象。
  • 值为无路径的上传文件。

required_if:anotherfield,value,...

如果 anotherfield 字段等于任一 value,验证的字段必须出现且不为空 。

如果你想为 required_if 规则构造一个更复杂的条件,你可以使用 Rule::requiredIf 方法。此方法接受布尔值或闭包。当传递一个闭包时,应返回 truefalse

Nota: Apabila menggunakan corak regex/not_regex, anda mungkin perlu menentukan peraturan dalam tatasusunan dan bukannya menggunakan pembatas paip , esp. Sekiranya ungkapan biasa mengandungi aksara paip.

nullable🎜🎜Medan yang disahkan boleh menjadi null. Ini amat berguna apabila mengesahkan jenis data asas, seperti rentetan dan integer, yang boleh mengandungi nilai nol. 🎜🎜🎜🎜
🎜🎜numeric🎜🎜Medan yang akan disahkan mestilah berangka. 🎜🎜🎜🎜
🎜🎜present🎜🎜Medan yang disahkan mesti wujud dalam data input, tetapi boleh kosong. 🎜🎜🎜🎜
🎜🎜regex:🎜pattern🎜🎜🎜Medan yang disahkan mesti sepadan dengan ungkapan biasa yang diberikan . 🎜🎜 Secara dalaman, peraturan ini menggunakan fungsi PHP preg_match. Nilai yang dimasukkan hendaklah mengikut format yang sama yang diperlukan oleh fungsi preg_match, jadi sertakan pembatas yang sah juga. Contohnya: 'email' => 'regex:/^.+@.+$/i'. 🎜🎜Nota: Apabila menggunakan peraturan regex, anda mesti menggunakan tatasusunan dan bukannya menggunakan pembatas |, terutamanya jika ungkapan biasa mengandungi < kod>| aksara. 🎜🎜🎜🎜
🎜🎜diperlukan🎜🎜Medan yang hendak disahkan mesti wujud dalam data input dan tidak kosong. Medan dianggap "null" jika salah satu daripada syarat berikut dipenuhi: 🎜
  • Nilainya ialah null.
  • Nilai ialah rentetan kosong.
  • Nilai ialah tatasusunan kosong atau objek Countable kosong.
  • Nilai ialah fail yang dimuat naik tanpa laluan.
🎜🎜
🎜🎜
🎜🎜required_if:🎜anotherfield🎜,🎜value🎜 ,...🎜🎜Jika medan 🎜medan lain🎜 sama dengan mana-mana 🎜nilai🎜, medan yang disahkan mesti ada dan tidak kosong. 🎜🎜Jika anda ingin membina keadaan yang lebih kompleks untuk peraturan required_if, anda boleh menggunakan kaedah Rule::requiredIf. Kaedah ini menerima nilai atau penutupan boolean. Apabila melepasi penutupan, true atau false hendaklah dikembalikan untuk mengesahkan sama ada medan perlu disahkan: 🎜rrreee🎜🎜🎜🎜🎜🎜

diperlukan_kecuali:medan lain,nilai,...

Jika medan medan lain tidak sama dengan mana-mana nilai, medan yang disahkan mesti ada dan tidak kosong.

diperlukan_dengan:foo,bar,...

Medan yang disahkan mesti muncul dan tidak kosong hanya apabila mana-mana medan yang dinyatakan lain muncul.

diperlukan_dengan_semua:foo,bar,...

Medan yang disahkan mesti muncul dan tidak kosong hanya apabila semua medan lain yang dinyatakan muncul.

diperlukan_tanpa:foo,bar,...

Hanya apabila mana-mana medan yang dinyatakan lain tidak muncul, medan yang disahkan mesti muncul dan tidak kosong.

diperlukan_tanpa_semua:foo,bar,...

Medan yang disahkan mesti muncul dan tidak kosong hanya apabila semua medan lain yang dinyatakan tidak muncul.

sama:medan

Medan yang disahkan mesti sepadan dengan medan yang diberikan.

saiz:nilai

Medan yang disahkan mesti mempunyai saiz yang sepadan dengan nilai yang diberikan. Untuk rentetan, nilai sepadan dengan bilangan aksara. Untuk nombor, nilai sepadan dengan nilai integer yang diberikan. Untuk tatasusunan, saiz sepadan dengan nilai count tatasusunan. Untuk fail, saiz sepadan dengan saiz fail dalam kb. count 值。对于文件,size 对应文件大小(单位 kb)。

starts_with:foo,bar,...

验证的字段必须以给定值之一开头。

string

验证的字段必须是一个字符串。如果允许这个字段为 null,需要给这个字段分配 nullable 规则。

timezone

验证的字段必须是一个基于 PHP 函数  timezone_identifiers_list

starts_with:
foo
,🎜bar🎜,...🎜 Medan disahkan mesti bermula dengan salah satu nilai yang diberikan. 🎜🎜🎜🎜
🎜🎜string🎜🎜Medan yang akan disahkan mestilah rentetan. Jika medan ini dibenarkan menjadi null, peraturan nullable perlu diberikan kepada medan ini. 🎜🎜🎜🎜
🎜🎜timezone🎜🎜Medan yang akan disahkan mestilah fungsi berasaskan PHP timezone_identifiers_list Pengecam zon waktu yang sah. 🎜🎜🎜🎜🎜🎜🎜

unik: jadual, lajur, kecuali, idColumn

Medan yang akan disahkan mestilah unik dalam jadual pangkalan data yang diberikan. Jika column tidak dinyatakan, nama medan itu sendiri akan digunakan. column ,将会使用字段本身的名称。

指定自定义字段

rrreee

自定义数据库连接

有时,你可能需要为验证程序创建的数据库查询设置自定义连接。上面的例子中,将 unique:users 设置为验证规则,等于使用默认数据库连接来查询数据库。如果要对其进行修改,请使用「点」方法指定连接和表名:

rrreee

强迫 Unique 规则忽略指定 ID :

有时,你可能希望在进行字段唯一性验证时忽略指定 ID 。例如, 在「更新个人资料」页面会包含用户名、邮箱和地点。这时你会想要验证更新的 E-mail 值是否唯一。如果用户仅更改了用户名字段而没有改 E-mail 字段,就不需要抛出验证错误,因为此用户已经是这个 E-mail 的拥有者了。

使用 Rule 类定义规则来指示验证器忽略用户的 ID。这个例子中通过数组来指定验证规则,而不是使用 | 字符来分隔:

rrreee

{tip} 您永远不应将任何用户控制的请求输入传递给 ignore 方法。相反,您应该只从 Eloquent 模型实例传递系统生成的唯一 ID,例如自增 ID 或 UUID。否则,您的应用程序将容易受到 SQL 注入攻击。

你可以传递整个模型实例,而不是将模型键的值传递给 ignore 方法。Laravel 将自动从模型中提取主键:

rrreee

如果你的数据表使用的主键名称不是 id ,那就在调用 ignore 方法时指定字段的名称:

rrreee

默认情况下,unique 规则将检查与要验证的属性的名称匹配的列是否唯一。但是你可以将不同的列名称作为第二个参数传递给 unique 方法:

rrreee

增加额外的 Where 语句:

你也可以通过 where 方法指定额外的查询条件。例如, 我们添加 account_id1

Tentukan medan tersuai

rrreeeSambungan pangkalan data tersuai

Kadangkala, anda mungkin perlu menyediakan sambungan tersuai untuk pertanyaan pangkalan data yang dibuat oleh pengesah. Dalam contoh di atas, menetapkan unique:users sebagai peraturan pengesahan adalah bersamaan dengan menggunakan sambungan pangkalan data lalai untuk menanyakan pangkalan data. Jika anda ingin mengubah suainya, sila gunakan kaedah "titik" untuk menentukan sambungan dan nama jadual:
rrreee
Paksa peraturan Unik untuk mengabaikan ID yang ditentukan:

Kadangkala, anda mungkin mahu mengesahkan keunikan medan apabila Abaikan ID yang ditentukan. Sebagai contoh, halaman "Kemas Kini Profil" akan memasukkan nama pengguna, alamat e-mel dan lokasi anda. Pada ketika ini anda ingin mengesahkan bahawa nilai e-mel yang dikemas kini adalah unik. Jika pengguna hanya menukar medan nama pengguna tetapi bukan medan e-mel, tidak perlu membuang ralat pengesahan kerana pengguna sudah menjadi pemilik e-mel.

Gunakan kelas Peraturan untuk menentukan peraturan untuk mengarahkan pengesah mengabaikan ID pengguna. Contoh ini menentukan peraturan pengesahan sebagai tatasusunan, dan bukannya menggunakan aksara |. Sebaliknya, anda hanya perlu menghantar ID unik yang dijana sistem, seperti ID kenaikan automatik atau UUID, daripada contoh model Eloquent. Jika tidak, aplikasi anda akan terdedah kepada serangan suntikan SQL.

Daripada menghantar nilai kunci model kepada kaedah abaikan, anda boleh menghantar keseluruhan contoh model. Laravel akan mengekstrak kunci utama secara automatik daripada model: rrreee

Jika jadual data anda menggunakan nama kunci utama selain id, kemudian nyatakan nama medan apabila memanggil ignore kaedah:
rrreee
Secara lalai, peraturan unik
akan menyemak sama ada lajur yang sepadan dengan nama atribut yang disahkan adalah unik. Tetapi anda boleh menghantar nama lajur yang berbeza sebagai hujah kedua kepada kaedah unik
:

rrreee

Tambah penyataan Where tambahan:

Anda juga boleh menghantar di mana kaedah menentukan syarat pertanyaan tambahan. Contohnya, kami menambah account_id sebagai kekangan 1:

rrreee

url
Medan yang disahkan mestilah URL yang sah. 🎜🎜🎜🎜🎜🎜🎜🎜uuid🎜🎜Medan pengesahan mestilah RFC 4122 yang sah (versi 1,3,4 atau 5) pengecam unik universal (UUID). 🎜🎜🎜🎜🎜🎜🎜🎜Tambah peraturan mengikut syarat🎜🎜🎜

Sahkan jika ada

Dalam sesetengah kes, semakan pengesahan hanya boleh dilakukan pada medan jika medan itu wujud dalam tatasusunan. Ini boleh dicapai dengan menambahkan kadangkala pada senarai peraturan: sometimes 到规则列表来实现:

rrreee

在上面的例子中, email 字段只有在 $data 数组中存在才会被验证。

{tip} 如果你尝试验证应该始终存在但可能为空的字段,请查阅 可选字段的注意事项

复杂的条件验证

有时候你可能需要增加基于更复杂的条件逻辑的验证规则。例如,你可以希望某个指定字段在另一个字段的值超过 100 时才为必填。或者当某个指定字段存在时,另外两个字段才能具有给定的值。增加这样的验证条件并不难。首先,使用 静态规则 创建一个 Validator 实例:

rrreee

假设我们有一个专为游戏收藏家所设计的网页应用程序。如果游戏收藏家收藏超过一百款游戏,我们会希望他们来说明下为什么他们会拥有这么多游戏。比如说他们有可能经营了一家游戏分销商店,或者只是为了享受收集的乐趣。为了在特定条件下加入此验证需求,可以在 Validator 实例中使用 sometimes 方法。

rrreee

传入 sometimes 方法的第一个参数是要用来验证的字段名称。第二个参数是我们想使用的验证规则。 闭包 作为第三个参数传入,如果其返回 true , 则额外的规则就会被加入。这个方法可以轻松地创建复杂的条件验证。你甚至可以一次对多个字段增加条件验证:

rrreee

{tip} 传入 闭包$input 参数是 IlluminateSupportFluent 的一个实例,可用来访问你的输入或文件对象。

验证数组

验证表单的输入为数组的字段也不难。你可以使用 「点」方法来验证数组中的属性。例如,如果传入的 HTTP 请求中包含 photos[profile] 字段, 可以如下验证:

rrreee

你也可以验证数组中的每个元素。例如,要验证指定数组输入字段中的每一个 email 是唯一的,可以这么做:

rrreee

同理,你可以在语言文件定义验证信息时使用 *rrreee

Dalam contoh di atas, medan e-mel hanya wujud dalam $data tatasusunan akan disahkan.

{tip} Jika anda cuba mengesahkan medan yang sepatutnya sentiasa ada tetapi mungkin kosong, lihat Nota tentang medan pilihan

< /blockquote>
Pengesahan bersyarat yang rumit

Kadangkala anda mungkin perlu menambah peraturan pengesahan berdasarkan logik bersyarat yang lebih kompleks. Sebagai contoh, anda mungkin mahu medan tertentu diperlukan hanya jika nilai medan lain melebihi 100. Atau apabila medan tertentu wujud, dua medan lain boleh mempunyai nilai yang diberikan. Menambah syarat pengesahan sedemikian tidak sukar. Mula-mula, buat contoh Validator menggunakan peraturan statik:

rrreee Katakan kami mempunyai aplikasi web yang direka untuk pengumpul permainan. Jika pengumpul permainan mempunyai lebih daripada seratus permainan dalam koleksi mereka, kami ingin mereka menerangkan sebab mereka memiliki begitu banyak permainan. Sebagai contoh, mereka mungkin menjalankan kedai pengedaran permainan, atau hanya suka mengumpul. Untuk menambah keperluan pengesahan ini di bawah syarat tertentu, anda boleh menggunakan kaedah kadangkala pada contoh Validator. rrreee

Parameter pertama yang dihantar ke kaedah kadangkala ialah nama medan yang akan digunakan untuk pengesahan. Parameter kedua ialah peraturan pengesahan yang ingin kami gunakan. Penutupan diserahkan sebagai parameter ketiga Jika ia mengembalikan true, peraturan tambahan akan ditambahkan. Kaedah ini memudahkan untuk membuat pengesahan bersyarat yang kompleks. Anda juga boleh menambah pengesahan bersyarat pada berbilang medan sekaligus:
rrreee
{tip} Parameter $input yang dihantar ke closure ialah IlluminateSupportFluent yang boleh digunakan untuk mengakses input atau objek fail anda. 🎜
🎜🎜🎜
🎜🎜Mengesahkan tatasusunan🎜🎜Tidak sukar untuk mengesahkan medan di mana input bentuknya ialah tatasusunan. Anda boleh menggunakan kaedah "titik" untuk mengesahkan sifat dalam tatasusunan. Contohnya, jika permintaan HTTP masuk mengandungi medan photos[profile], ia boleh disahkan seperti berikut: 🎜rrreee🎜 Anda juga boleh mengesahkan setiap elemen dalam tatasusunan. Sebagai contoh, untuk mengesahkan bahawa setiap e-mel dalam medan input tatasusunan yang ditentukan adalah unik, anda boleh melakukan ini: 🎜rrreee🎜Begitu juga, anda boleh menggunakan aksara * apabila mentakrifkan maklumat pengesahan dalam fail bahasa, yang adalah berdasarkan tatasusunan Gunakan satu mesej pengesahan untuk medan: 🎜rrreee🎜🎜🎜🎜🎜🎜🎜Peraturan pengesahan tersuai🎜🎜🎜🎜🎜🎜🎜

Menggunakan Objek Peraturan

Laravel menyediakan banyak peraturan pengesahan berguna; ia juga menyokong peraturan tersuai. Satu cara untuk mendaftarkan peraturan pengesahan tersuai ialah menggunakan objek peraturan. Anda boleh menggunakan perintah Artisan make:rule untuk menjana objek peraturan baharu. Seterusnya, mari kita gunakan arahan ini untuk menjana peraturan yang mengesahkan bahawa rentetan adalah huruf besar. Laravel akan menyimpan peraturan baharu dalam direktori app/Rules: make:rule 来生成新的规则对象。接下来,让我们用这个命令生成一个验证字符串是大写的规则。Laravel 会将新的规则存放在 app/Rules 目录中:

rrreee

一旦创建了规则,我们就可以定义它的行为。规则对象包含两个方法: passesmessagepasses 方法接收属性值和名称,并根据属性值是否符合规则而返回  truefalsemessage 方法应返回验证失败时应使用的验证错误消息:

rrreee

当然, 如果你希望从翻译文件中返回一个错误消息,你可以从 message 方法中调用辅助函数 trans

rrreee

一旦规则对象被定义好后,你可以通过将规则对象的实例和其他验证规则一起来传递给验证器:

rrreee

使用闭包

如果你在应用程序中只需要一次自定义规则的功能,则可以使用闭包而不是规则对象。闭包接收属性的名称,属性的值如果验证失败则应该使用回调中的 $fail

rrreee

使用扩展

注册自定义的验证规则的另一种方法是使用 Validator facade 中的 extend 方法。让我们在 服务容器 中使用这个方法来注册自定义验证规则:

rrreee

自定义的验证闭包接收四个参数:要被验证的属性名称 $attribute、属性的值 $value、传入验证规则的参数数组 $parameters 、以及 Validator 实列。

除了使用闭包,你也可以传入类和方法到 extend 方法中:

rrreee

定义错误消息

你还需要为自定义规则定义错误信息。你可以使用内联自定义消息数组或者在验证语言文件中添加条目来实现这一功能。 消息应该被放到数组的第一位, 而不是在只用于存放属性指定错误信息的 custom 数组内:

rrreee

当创建一个自定义验证规则时,你可能有时候需要为错误信息定义自定义占位符。可以通过创建自定义验证器然后调用 Validator 门面上的  replacer 方法。你可以在 服务容器 的 bootrrreee

Setelah peraturan dibuat, kita boleh menentukan gelagatnya. Objek peraturan mengandungi dua kaedah: pass dan message. Kaedah pass menerima nilai dan nama atribut dan mengembalikan true atau false bergantung pada sama ada nilai atribut mematuhi peraturan. Kaedah mesej
harus mengembalikan mesej ralat pengesahan yang harus digunakan jika pengesahan gagal:
rrreee
Sudah tentu, jika anda ingin mengembalikan mesej ralat daripada fail terjemahan, anda boleh berbuat demikian daripada < kaedah kod>mesej Panggil fungsi pembantu trans dalam trans: 🎜rrreee🎜Setelah objek peraturan ditakrifkan, anda boleh menghantar contoh objek peraturan kepada pengesah bersama peraturan pengesahan lain: 🎜rrreee🎜🎜
🎜🎜Gunakan penutupan🎜🎜Jika anda hanya memerlukan kefungsian peraturan tersuai sekali dalam aplikasi anda, anda boleh Gunakan penutupan dan bukannya objek peraturan. Penutupan menerima nama atribut Jika nilai atribut gagal pengesahan, $fail harus digunakan dalam panggilan balik: 🎜rrreee🎜🎜
🎜🎜Menggunakan sambungan🎜🎜Cara lain untuk mendaftarkan peraturan pengesahan tersuai ialah menggunakan lanjutkan dalam Validator kaedah fasad. Mari kita gunakan kaedah ini untuk mendaftarkan peraturan pengesahan tersuai dalam bekas perkhidmatan: 🎜rrreee🎜Penutupan pengesahan tersuai menerima empat parameter: nama atribut yang akan disahkan $attribute, nilai atribut < code>$value, tatasusunan parameter $parameters dihantar ke dalam peraturan pengesahan dan lajur sebenar Validator. 🎜🎜Selain menggunakan penutupan, anda juga boleh menghantar kelas dan kaedah kepada kaedah lanjutkan: 🎜rrreee
🎜

Definisi Mesej ralat

🎜Anda juga perlu menentukan mesej ralat untuk peraturan tersuai. Anda boleh mencapai fungsi ini dengan menggunakan tatasusunan mesej tersuai sebaris atau dengan menambahkan entri dalam fail bahasa pengesahan. Mesej itu hendaklah diletakkan dahulu dalam tatasusunan, bukan dalam tatasusunan custom yang hanya digunakan untuk menyimpan mesej ralat khusus atribut: 🎜rrreee🎜Apabila membuat peraturan pengesahan tersuai, anda mungkin kadangkala Pemegang tempat tersuai memerlukan untuk ditakrifkan untuk mesej ralat. Ini boleh dilakukan dengan mencipta pengesah tersuai dan kemudian memanggil kaedah Replacer pada fasad Validator. Anda boleh melakukan operasi berikut dalam kaedah boot bekas perkhidmatan: 🎜rrreee🎜🎜

Peluasan tersirat

Secara lalai, apabila atribut yang akan disahkan tidak wujud atau mengandungi nilai nol yang ditakrifkan oleh peraturan diperlukanrequired 规则定义的空值时,那么正常的验证规则,包括自定义扩展将不会执行。 例如,unique 规则将不会检验 null 值:

rrreee

如果要求即使为空时也要验证属性,则必须要暗示属性是必须的。要创建这样一个「隐式」扩展, 可以使用 Validator::extendImplicit(), maka peraturan pengesahan biasa, termasuk sambungan tersuai, tidak akan dilaksanakan. Contohnya, peraturan unik

tidak akan mengesahkan nilai null:
rrreee

jika diperlukan untuk mengesahkan harta itu walaupun jika ia adalah null , ia mesti membayangkan bahawa atribut diperlukan. Untuk membuat sambungan "implisit" sedemikian, gunakan kaedah Validator::extendImplicit():

rrreee
Artikel ini pertama kali diterbitkan di laman web
LearnKu.com🎜. 🎜🎜