我是Laravel 5.1的新手,当我从数据库中检索日期字符串并尝试在刀片上显示时,我不知道自己做错了什么。
它不起作用,来自de数据库的日期没有出现在Form::date
上。
我知道我在这里缺少一些至关重要的东西:)
以下是视图代码:
<div class="col-sm-6">
<div class="form-group">
{!! Form::label('birth_date', trans('userapps/userapps.birth_date'))!!}
{!! Form::date('birth_date', Input::old('birth_date'), array('class' => 'form-control input-lg'))!!}
@if ($errors->has('birth_date')) <p class="help-block">{{ $errors->first('birth_date') }}</p> @endif
</div>
</div>
这是控制器代码:
public function edit($id)
{
//show all saved values for editing
$userapp = UserApplication::findOrFail($id);
$birth_date = DateTime::createFromFormat('d/m/Y', $userapp->birth_date)->format('d/m/Y');
$data = array('birth_date' => $birth_date, 'userapp' => $userapp);
return view('admin/userapps/edit')->with($data);
}
提前致谢。
答案 0 :(得分:2)
日期输入only accepts值采用以下格式yyyy-dd-mm
。这意味着您应该像这样格式化日期值:
DateTime::createFromFormat('d/m/Y', $userapp->birth_date)->format('Y-m-d');
浏览器将确保根据操作系统区域设置显示它。例如,如果我的日期输入为value="2015-12-05"
,则根据我的操作系统区域设置显示为05/12/2015
。
一旦你解决了这个问题,就会出现另一个很可能会阻止日期显示的问题。您将默认值设置为Input::old('birth_date')
,这是您第一次访问表单时null
,因为在提交表单之前没有旧的输入数据。所以在你的控制器动作中你应该这样做:
public function edit($id)
{
$userapp = UserApplication::findOrFail($id);
// Use old input value and if that's not available then use the $userapp one
$birth_date = Input::old('birth_date') ?: DateTime::createFromFormat('d/m/Y', $userapp->birth_date)->format('Y-m-d');
$data =['birth_date' => $birth_date, 'userapp' => $userapp];
return view('admin/userapps/edit')->with($data);
}
在您的Blade视图文件中:
{!! Form::date('birth_date', $birth_date, array('class' => 'form-control input-lg'))!!}
如果有的话,它将使用旧的输入值,否则它将使用数据库中的值。
话虽如此,您应该知道日期输入为supported only by a few browsers。 Firefox,Safari和Internet Explorer 根本不支持,因此如果您需要确保用户输入仅限于所有浏览器的日期,我会使用JavaScript日期选择器库代替。