首页 > 解决方案 > Laravel 突变器和访问器

问题描述

我在模型中创建了 mutator date 函数,以使用diffForHumans()将 created_at 日期转换为人类可读的时间。我做了以下

public function setDateAttribute($value){
    return \Carbon\Carbon::parse($value)->diffForHumans();
}

它工作正常,但它影响所有。可以仅在控制器的指定功能上应用此 mutator,而不是所有功能

标签: laravelmutators

解决方案


突变器中的一个小逻辑可以完成这项工作:-

    public function setDateAttribute($value){
       if ( request()->path() === "/yourURL/To/IndexMethod"){ 
         return $this->attributes['date'] = \Carbon\Carbon::parse($value)->diffForHumans();
       } else {
         return $this->attributes['date'] = $value;
       }
    }

这个想法是通过 url 检查。

获取请求路径助手

编辑

使用路由名称进行比较更好,因为确切的路径可以包含 id/slugs。

public function setDateAttribute($value){
       if ( \Route::currentRouteName() === "/yourRouteName/To/IndexMethod"){ 
         return $this->attributes['date'] = \Carbon\Carbon::parse($value)->diffForHumans();
       } else {
         return $this->attributes['date'] = $value;
       }
    }

获取路线名称


推荐阅读