【发布时间】:2020-02-06 13:31:40
【问题描述】:
我有以下Event 模型:
我想在调用/api/events 或/api/events/{id} 时以'M d, Y' 格式获取from 和to 日期仅 否则通常为'Y-m-d H:i:s' 格式
我当前的代码
应用\事件
class Event extends Model
{
protected $casts = [
'from' => 'datetime',
'to' => 'datetime'
];
public function getFromAttribute($value)
{
return Carbon::parse($value)->format('M d, Y');
}
public function getToAttribute($value)
{
return Carbon::parse($value)->format('M d, Y');
}
}
API\EventController
//...
public function getList() {
$events = Event::all();
return response()->json($events);
}
//...
路由\api.php
//...
Route('events', 'Api\EventController@getList');
//...
【问题讨论】:
-
从技术和架构上讲,您应该返回相同的格式并让消费者对其进行解析...或创建一个
renderer(一个对象,该对象可以创建具有所需格式的格式化数组) -
我同意上述观点,但是,如果您确实需要它为不同的格式,那么我建议您查看资源:laravel.com/docs/master/eloquent-resources。
-
在访问器方法中创建 if..else 语句是否很糟糕,例如:
if(request()->route()->getPrefix() == "api/events") { return Carbon::parse($value)->format('M d, Y'); } return Carbon::create($value);