Laravel 5从选择字段验证出生日期

时间:2015-11-11 18:14:18

标签: laravel select

我有一个包含3个选择字段(月,日,年)的注册表单,我想抓取,转换为正确的日期格式,然后验证。所以,下面是3个选择框。

<div class="birthday_selects">
    <select name="birthday_month">
    ....
    </select>
    <select name="birthday_day">
    ....
    </select>
    <select name="birthday_year">
    ....
    </select>
</div>

我已经读过我可以使用以下内容,但是我收到错误“... Http \ Input not found ...”

$birthday = Input::get('birthday_month')."-".Input::get('birthday_day')."-".Input::get('birthday_year')'

好吧,我可以dd($生日)并且它在m-d-y中出现,因为我在那里连接。现在,我正在尝试根据之前的日期验证该日期(以查看用户是否> 13岁)。我正在使用以下内容,但没有运气。

    public function postSignup(Request $request)
{

    $birthdate = Input::get('birthday-month')."-".Input::get('birthday-day')."-".Input::get('birthday-year');

    $this->validate($request, [
        $birthdate => 'required',
    ]);

    dd($birthdate);
}

当需要它时,它不起作用。

感谢您的帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

它没有用,因为你做错了。这有什么问题是规则。
规则键必须出现在表单字段的名称中。 对于你的回答,让我们假设$ birthday将是'jul-15-1992'。并且你将把变量放在规则中作为关键。所以,这是无效的,因为该字段永远不会出现在表单字段中。

public function formPost(Request $request)
{
    $rule = [ 
        'birth_year'  => 'required|numeric',
        'birth_day'   => 'required|numeric',
        'birth_month' => 'required|numeric', // may be a string
    ];
    $this->validate($request, $rule);
    // check if the day is valid for the month manually.
    // then form the DOB now.        
}

答案 1 :(得分:0)

创建Carbon日期并添加新的[birth_day]输入:

$all = $request->all();
$year = $all['birthday_year'];
$month = $all['birthday_month'];
$day = $all['birthday_day'];

 // Create Carbon date
$date = Carbon::createFromFormat('Y-m-d', $year.'-'.$month.'-'.$day);

//add new [birth_day] input
$request->request->add(['birth_day' => $date->format('Y-m-d')]); 

$validatedData = $request->validate([
    'first_name' => 'required|string|max:255',
    'last_name' => 'required|string|max:255',
    'email'    => 'required|string|email|max:255',
    'password' => 'required|string',
    'birth_day' => 'required|date_format:Y-m-d|before:today',// validate birth day
]);

希望这对您有帮助