【问题标题】:Laravel : get attribute accessor only for specific routesLaravel:仅获取特定路由的属性访问器
【发布时间】:2020-02-06 13:31:40
【问题描述】:

我有以下Event 模型:

我想在调用/api/events/api/events/{id} 时以'M d, Y' 格式获取fromto 日期 否则通常为'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);

标签: php laravel eloquent


【解决方案1】:

这是在您的模型中执行此操作的简单方法

 public function getImageAttribute($value)
{
    if (Str::contains(Request()->route()->getPrefix(), 'api')) {
        return url(Storage::url($value));
    }
    return $value;
}

不要忘记导入 Str :使用 Illuminate\Support\Str;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2021-05-02
    • 2021-05-21
    • 2018-12-25
    • 2014-10-27
    相关资源
    最近更新 更多