从laravel中的视图调用函数的更好方法

时间:2016-12-09 13:19:46

标签: php laravel-5

我有一个返回两个日期之差的函数
由于日期是从数据库生成的,因此可能有多个记录需要调用此函数。

function dateDifference($date_1 , $date_2 , $differenceFormat = '%y Year %m Month' )
   {
    $datetime1 = date_create($date_1);
    $datetime2 = date_create($date_2);

    $interval = date_diff($datetime1, $datetime2);

    return $interval->format($differenceFormat);
   }

现在我要做的是我必须从视图中调用此函数,因为页面中可能存在多个日期差异。 将逻辑保留在视图中并不是非常专业。

3 个答案:

答案 0 :(得分:1)

根据我的理解,你有一个你在视图中迭代的集合/数组,所以我的建议是你应该操纵控制器中的所有逻辑,然后将操纵的数据发送到视图像这样:

我将您的数据作为一个集合,您可以使用mapWithKeys收集方法将数据添加到您当前的数据中,如下所示:

在您的控制器中:

$data = collect([...array...]); // This is your data which you can get from DB
$manipulatedData = $data->mapWithKeys(function ($item) {
    return [$item['dateDiff'] => dateDifference($item['date1'], $item['date2'])]; // Use your method here
});

在视图中:

@foreach($manipulatedData as $data)
    <div>{{ $data->dateDiff }}</div>
@endforeach

希望这有帮助!

答案 1 :(得分:1)

创建一个帮助器类并在app / config / app.php中将其注册为别名

示例:

<?php
namespace app\Service;

use Illuminate\Support\Facades\Config;
use Poznet\PPAL\Helpers\Slider;
use Poznet\PPAL\Models\Config as Konfig;
use Illuminate\Support\Facades\Cache;

class FrontendService
{
    public static function Config($name){
   // put  your  logic  here as  foo :) 

        return $foo;
    }
}

在config / app.php

    'aliases' => [
...
    'Frontend'  => 'App\Service\FrontendService'
    ],

在视图中你可以使用

{{ Frontend::config('foo') }}

答案 2 :(得分:1)

您可以使用Date MutatorsCarbon的实例中的日期列转换为:

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */
    protected $dates = [
        'date_1',
        'date_2'
    ];
}

然后您可以在视图中使用它:

$date_1->diff(date_2)->format('%y Year %m Month')