2015-11-13 76 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