我有Laravel。我有一张表格。我有一个MySQL数据库。它有一些日期。当我绑定模型和表单时,表单将尽职地填充原始MySQL日期。这显然不是我需要的。
我的问题是:如何获得模型绑定表单以更易读的方式显示日期?!?没有机会拦截和格式化数据。或者对于更通用的解决方案,有没有办法在用户看到之前对模型和表单之间的任何数据进行一些处理?
我是否认为这一切都错了?十亿谢谢!
答案 0 :(得分:6)
您可以在模型中添加accessor方法,如下所示:
public function getCreatedAtAttribute($date)
{
$date = new \Carbon\Carbon($date);
// Now modify and return the date
}
created_at
将调用此方法。如果您需要覆盖默认值,请检查date-mutators。检查Carbon Docs。
答案 1 :(得分:2)
您可以使用format()
方法格式化表单中的日期。
如果您在表单元素中使用它:
{{ Form::text('name', $model->created_at->format('d/m/Y H:i')) }}
如果您将其显示为纯文字:
{{ $model->created_at->format('d/m/Y H:i') }}
如果您希望用户能够以一种很好的方式修改日期,则可以使用三个不同的选择字段。这是我工作的项目的摘录,允许用户更改出生日期:
<div class="form-group {{ $errors->has('date_of_birth') ? 'has-error' : '' }}">
{{ Form::label('date_of_birth', 'Date of Birth', ['class' => 'control-label']) }}
<div class="form-inline">
{{ Form::selectRange('date_of_birth[day]', 1, 31, null, ['class' => 'form-control']) }}
{{ Form::selectMonth('date_of_birth[month]', null, ['class' => 'form-control']) }}
{{ Form::selectYear('date_of_birth[year]', date('Y') - 3, date('Y') - 16, null, ['class' => 'form-control']) }}
</div>
{{ $errors->first('date_of_birth', '<span class="help-block">:message</span>') }}
</div>
这包含在绑定了模型的表单中。
旁注
此处发布的替代答案实际上覆盖了laravel处理日期的默认方式,除非您实际返回碳对象,否则您永远不会使用format
方法,或任何碳有其他方便的东西。
如果您有其他包含日期的列,请将它们添加到数据变更器列表中:
public function getDates()
{
return ['created_at', 'updated_at', 'date_of_birth', 'some_date_column'];
}
现在这将使它们成为Carbon
的一个实例,允许您随意格式化,随时轻松修改,复制和其他许多内容。有关此问题的详细信息,请参阅:http://laravel.com/docs/eloquent#date-mutators
答案 2 :(得分:0)
您可以通过在模型中创建 Accessor 来格式化从数据库中检索的所有字段。例如,如果您的数据库字段为created_at
,则使用getCreatedAtAttribute
。
public function getCreatedAtAttribute($date)
{
return Carbon::($date)->format('d/m/Y');
}