2015-11-13 54 views
0

我有一個模型Paper。紙張可以具有不同的尺寸和顏色,但尺寸僅與某些顏色等有關。我有一個數據透視表,它設置了顏色對應的尺寸。我正在使用表單請求驗證功能,並且我爲模型的尺寸和顏色設置了belongsToMany關係。當我做Paper:create我想發送一個錯誤,如果一個顏色和大小是基於該數據透視表不匹配。是否有內置的「Laravel方法」來實現這一點,或者是否應該在設置顏色和大小時循環透視表?Laravel請求驗證使用數據透視表

+2

您可能能夠在驗證中使用「存在」規則。 http://laravel.com/docs/5.1/validation#rule-exists。但是,我只是簡單地創建一個函數,它只是查詢數據透視表並檢查組合是否有效。 – Dave

+1

您也可以在檢查請求後創建驗證掛鉤以檢查條件。檢查http://laravel.com/docs/5.1/validation#other-validation-approaches:驗證鉤後。可能有幫助。 –

回答

0

最「Laravely」的方式,我能想到的,使用形式請求類,像這樣:

<?php 

namespace App\Http\Requests; 

use App\Http\Requests\Request; 

class PaperFormRequest extends Request 
{ 
    public function authorize() 
    { 
     return true; 
    } 

    public function rules() 
    { 
     // rules here 
    } 

    protected function getValidatorInstance() 
    { 
     $validator = parent::getValidatorInstance(); 

     $validator->after(function() use ($validator) { 


      // logic for detecting mismatches goes here 


      // To add validation-errors, simply do: 
      $validator->errors()->add(
       'colorMistmatch', 
       'This color does not go with this paper' 
      ); 

      return $validator; 
     } 
    } 
} 

一旦錯誤已經被添加到驗證,比如,你可以在你的刀片顯示它們通過這樣做的視圖:

@if ($errors->has('colorMistmach')) 
    {{ $errors->first('colorMistmach') }} 
@endif