2017-11-11 131 views
0

我想弄清楚如何我可以验证一些基于其他输入的数据。为了使它更加复杂,数据和其他输入都在一个数组中。 下面是规则:Laravel 5自定义验证规则的项目在数组中参考其他字段

$rules = []; 
    $rules['items.*.articleId'] = ['required', 'integer']; 
    $rules['items.*.data'] = ['required', new ItemData()]; 

应根据当前项目的的条款ArticleID会检查这个数据的方式。所以问题是如果有一种方法可以知道ItemData-rule中的itemId(项目)?

回答

0

我发现至少有一个(有点麻烦)解决方案:

  • 供应与所有输入
  • 解析在passes方法
  • 使用$属性规则这个发现在输入的条款ArticleID

的ItemData类:

namespace App\Rules; 

    use Illuminate\Contracts\Validation\Rule; 
    use Illuminate\Support\Facades\DB; 
    use Illuminate\Support\Facades\Schema; 

    class OrderItemData implements Rule { 

     private $_input = null; 

     public function __construct($input) { 
      $this->_input = $input; 
     } 

     public function passes($attribute, $value) { 
      $idParts = explode('.', $attribute); 
      array_pop($idParts); 
      $imp = $this->_input; 
      foreach ($idParts as $idPart) { 
       $imp = $imp[$idPart]; 
      } 

      $articleId = $imp['articleId']; 

      // do some checking here.. 

      return true; 
     } 

     public function message() { 
      return ':attribute is invalid.'; 
     } 
    } 

仍然好奇是否有更优雅的解决方案!