【问题标题】:Run task before validation in Laravel在 Laravel 中验证之前运行任务
【发布时间】:2014-12-22 18:49:38
【问题描述】:

好的,所以我有一个表单,它要求用户提供:-

  • 他们出生的那一天(0-31 等)
  • 他们出生的月份(1-12 月)
  • 他们出生的年份

然后我验证这一点:

$rules = array(
    '???'   => 'required:date'
);
$validator = Validator::make($data, $rules);

但我不知道我可以在哪里/做什么来将日期、月份、年份放入可以放入验证中的内容中,无论是在视图中还是在验证过程中。

谢谢, 汤姆

【问题讨论】:

  • 当事情不正确时,您最好单独验证每个输入以生成更多可用的错误代码吗?或许 Input::get('date') 作为 1-31 的范围, Input::get('year') 作为 1920-2014 的范围, Input::get('month') 作为月份的名称还是 1-12 的范围?
  • 我不确定,因为我打算这样做:stackoverflow.com/questions/23081654/… 来验证用户年龄。
  • 所以你想把这一切都变成一个单一的日期?也许与输入和 strtotime() 函数有关?
  • 嗯?你这是什么意思?
  • 如果你想使用链接验证规则,你的日期需要以 Laravel 的日期解析器能够识别的格式作为单个字段输入(dd-mm-yyyydd/mm/yy,@987654325 @, 等等。)。如果它作为三个单独的字段出现,您需要在它们靠近验证器之前将它们变成一个字段。可能是这样的:$v = Validator::make(Input::only('name', 'email') + ['date' => Input::get('year').'-'.Input::get('month').'-'.Input::get('day'), $rules);

标签: php validation date laravel


【解决方案1】:

如果您想使用链接验证规则,您的日期需要以 Laravel 的日期解析器能够识别的格式作为单个字段输入(dd-mm-yyyy、dd/mm/yy、yyyy-mm -dd 等)——所以在这种情况下,您的表单应该真正包含一个名为“日期”的文本字段。

如果它作为三个单独的字段出现,您需要在它们靠近验证器之前将它们变成一个字段。可能是这样的:

$rules = [
    'name'  => ['required'],
    'email' => ['required', 'email'],
    'date'  => ['required', 'date'],
];

// transform date from three separate fields to yyyy-mm-dd
// TODO: ensure the things are zero-padded maybe?
$date = Input::get('year').'-'.Input::get('month').'-'.Input::get('day');

$v = Validator::make(
    Input::only('name', 'email') + ['date' => $date],
    $rules
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多