Laravel 5.2+日期验证前后的日期不起作用

时间:2016-04-09 08:11:40

标签: php date laravel laravel-5 strtotime

这有效

'expected_at' => 'date|after:"2016-04-09 10:48:11"',

或者这可行

$rules['expected_at'] = 'date|after:'.$opportunity->created_at;

这不起作用

'expected_at' => 'date|after:created_at',

" created_at"数据库中的值完全如下

2016-04-09 10:48:11

请注意,表单将使用以下格式将expected_at日期传递给验证程序

2016-04-09

我认为这意味着您无法直接在验证器中引用模型字段?

3 个答案:

答案 0 :(得分:2)

在5.3的laravel文档中(我测试的版本):

  

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

     

'finish_date'=> '所需|日期|后:日期'

https://laravel.com/docs/5.3/validation#rule-after

“after”规则后面的字符串(本例中为start_date)不是数据库字段,而是传递给验证程序的输入字符串的一部分。

因此,按照您上面尝试的操作,验证器期望一个名为“created_at”的字段与您提交的其他输入一起传递,这可能不存在,因为您的意图是将其读取来自你的模型,这将导致它失败。

长话短说,你最后的陈述是正确的。 “之前/之后”规则不引用模型字段,而是引用传递给验证器的其他输入字段,或者可以由“strtotime”解释的日期字符串

答案 1 :(得分:1)

同意@Gordon,您可以尝试此操作,而无需在FormRequest中设置格式:

const FireflySubscription = ({children, stripePlanId}) => (
  <FirebaseAuth>
    { ({isLoading, error, auth}) => {
      if (error || isLoading || !auth) {
        //it pushes these arguments to the parent function
        return children({ 
          error,
          isLoading,
          subscription: null,
        })
      }

      if (stripePlanId) {
        return <FirestoreCollection
        path="subscriptions"
        filter={[['createdBy', '==', auth.uid], ['stripePlanId','==', stripePlanId]]}
      >
        { ({error, isLoading, data}) => {
          return children({
            error,
            isLoading,
            subscription: data.length > 0 ? data : null,
          })
        }}
      </FirestoreCollection>

      }

      return <FirestoreCollection
        path="subscriptions"
        filter={['createdBy', '==', auth.uid]}
      >
        { ({error, isLoading, data}) => {
          return children({
            error,
            isLoading,
            subscription: data.length > 0 ? data : null,
          })
        }}
      </FirestoreCollection>

    }}
  </FirebaseAuth>
)

注意:之所以不能引用数据库值,是因为在此阶段没有定义的模型可以使用。

答案 2 :(得分:0)

这可以验证为:

'expected_at'  => 'required|before:' . date('Y-m-d') . '|date_format:Y-m-d',

您甚至可以传递验证者日期参数并在验证时进行比较。我假设您正在搜索date_format验证器。