在laravel视图中使用carbon功能(刀片模板)

问题描述 投票:0回答:7

我从数据库中获取一些值,并将这些值从控制器传递到视图中。现在我想在

Laravel 视图
中使用该数据和一些 carbon function

在我的视图文件中我写了

foreach($customer as $time){

        $create= $time->created_at;
        $update= $time->updated_at;

        $create_at_difference=\Carbon\Carbon::createFromTimestamp(strtotime($create))->diff(\Carbon\Carbon::now())->days;


}

当我这样尝试时它会返回

"Class 'Carbon' not found"

我该怎么做?

php laravel php-carbon
7个回答
43
投票

它与我的 view.blade.php 的全局命名空间一起使用

      {{ \Carbon\Carbon::parse($row->posted_at)->diffForHumans() }}

8
投票

如果你想使用命名空间类,则不需要第一个斜杠:

 $create_at_difference=Carbon\Carbon::createFromTimestamp(strtotime($create))->diff(\Carbon\Carbon::now())->days;

你应该只写Carbon\Carbon,而不是\Carbon\Carbon。

这是一个快速的解决方案。但是,直接在视图中使用类是一个坏主意。您可以通过创建一个返回当前创建的差异的函数来向模型添加更多功能。

假设您有客户模型,您可以这样做:

use Carbon\Carbon;

class Customer extends Eloquent
{
      public function created_at_difference()
      {
           return Carbon::createFromTimestamp(strtotime($this->created_at))->diff(Carbon::now())->days;
      } 
}

然后在视图中您可以像这样访问它:

@foreach($customers as $customer)
   {{$customer->created_at_difference()}}
@endforeach

2
投票

另一个选择,我认为最好将这行代码放在你的类之上:

namespace App\Http\Controllers


use Carbon\Carbon;


class MyController {
  ...
}

2
投票

使用刀片注射以获得最干净的结果。 示例:

@inject('carbon', 'Carbon\Carbon')
...
<span>{{ $carbon::parse($model->created_at) }}</span>

0
投票

面临同样的问题,这对我有用

$create = $time->created_at;

$create_at_difference = Carbon\Carbon::createFromTimestamp(strtotime($create))
                    ->diff(\Carbon\Carbon::now())->days;

0
投票

第一种方法:这种方法直接使用created_at属性,假设它已经是一个Carbon实例,Laravel会自动处理日期字段。您只需将 format 方法应用于created_at 值即可以所需的格式显示它。

{{ $user->created_at->format('d-m-Y H-i-s') }}.

第二种方法:在这种方法中,您显式使用Carbon来解析created_at值。如果您不确定created_at字段是否已经是Carbon实例或者您正在使用需要转换的原始数据,这非常有用。

{{ \Carbon\Carbon::parse($job->created_at)->format('d-m-Y H-i-s') }}.


-1
投票

不要重复

\Carbon\Carbon
,尝试一下

\Carbon::createFromTimestamp(strtotime($create))->diff(\Carbon::now())->days

© www.soinside.com 2019 - 2024. All rights reserved.