【问题标题】:Laravel in_array validation ruleLaravel in_array 验证规则
【发布时间】:2016-12-17 10:06:22
【问题描述】:

我已经定义了一个数组

$this->allslots=array('10:00:00', '10:10:00', '10:20:00', '10:30:00', '10:40:00', '10:50:00', '11:00:00', '11:10:00', '11:20:00', '11:30:00', '11:40:00', '11:50:00', '12:00:00', '12:10:00', '12:20:00', '12:30:00', '12:40:00', '12:50:00', '13:00:00', '13:10:00', '13:20:00', '13:30:00', '13:40:00', '13:50:00', '14:00:00', '14:10:00', '14:20:00', '14:30:00', '14:40:00', '14:50:00', '15:00:00', '15:10:00', '15:20:00', '15:30:00', '15:40:00', '15:50:00', '16:00:00', '16:10:00', '16:20:00', '16:30:00', '16:40:00', '16:50:00');

现在,我想在将数据保存到数据库之前进行验证,如果给定的输入与上述数组的值之一匹配。为此我正在做

$this->validate($request, [

        'field' => 'required|in_array:$this->allslots',
    ]);

但是,这会为每个输入返回验证错误。那么,我该怎么做呢?

【问题讨论】:

    标签: php validation laravel


    【解决方案1】:

    试试这个:

    'field' => 'required|in:' . implode(',', $this->allslots),
    

    【讨论】:

    • 如果其中一个数组项包含逗号怎么办?那你真的完蛋了。 :)
    【解决方案2】:

    这比公认的答案更具语义:

    use Illuminate\Validation\Rule;
    
    $this->allslots=array('10:00:00', '10:10:00', '10:20:00', '10:30:00', '10:40:00', '10:50:00', '11:00:00', '11:10:00', '11:20:00', '11:30:00', '11:40:00', '11:50:00', '12:00:00', '12:10:00', '12:20:00', '12:30:00', '12:40:00', '12:50:00', '13:00:00', '13:10:00', '13:20:00', '13:30:00', '13:40:00', '13:50:00', '14:00:00', '14:10:00', '14:20:00', '14:30:00', '14:40:00', '14:50:00', '15:00:00', '15:10:00', '15:20:00', '15:30:00', '15:40:00', '15:50:00', '16:00:00', '16:10:00', '16:20:00', '16:30:00', '16:40:00', '16:50:00');
    
    $request->validate([
        'field' => [
            'required',
            Rule::in($this->allslots)
        ]
    ]);
    

    【讨论】:

      【解决方案3】:

      我找到了更好的解决方案。 validate in_array 期望该数组是请求中的参数之一。如果数组中有逗号,则接受的答案将不起作用。要使用 in_array 而无需创建新规则,您只需执行以下操作:

      $this->allslots=array('10:00:00', '10:10:00', '10:20:00', '10:30:00', '10:40:00', '10:50:00', '11:00:00', '11:10:00', '11:20:00', '11:30:00', '11:40:00', '11:50:00', '12:00:00', '12:10:00', '12:20:00', '12:30:00', '12:40:00', '12:50:00', '13:00:00', '13:10:00', '13:20:00', '13:30:00', '13:40:00', '13:50:00', '14:00:00', '14:10:00', '14:20:00', '14:30:00', '14:40:00', '14:50:00', '15:00:00', '15:10:00', '15:20:00', '15:30:00', '15:40:00', '15:50:00', '16:00:00', '16:10:00', '16:20:00', '16:30:00', '16:40:00', '16:50:00');
      
      $request['allslots'] = $this->allslots;
      
      validate($request, [
      
              'field' => 'required|in_array:allslots.*',
          ]);
      

      确保在末尾包含 .*

      【讨论】:

      • 不简单(差不多),而且改变了请求数据。
      • 也许“更简单”不是最好的词,但它确实解决了昏迷问题。接受的答案有一个很大的弱点,它假设没有逗号,所以它在某些情况下不起作用。我提出的解决方案不需要您创建任何额外的规则,而且它适用于任何情况。不,您不是在更改请求的数据,而是在“添加”一个字段,与添加 @method('PATCH') 没有太大区别。但是,我将删除“更简单”一词。
      【解决方案4】:

      考虑添加:

      use Illuminate\Validation\Rule; 
      

      在这里找到:http://www.javaear.com/question/45810009.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-25
        • 2020-06-09
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-13
        • 2018-04-23
        相关资源
        最近更新 更多