在Laravel中添加其他变量的最佳实践

时间:2014-08-13 08:37:12

标签: php laravel blade

简而言之:我想打印一份联系人列表,但如果联系人是在本月创建的,则会在标题中的新标签处打印出来。

在像Laravel这样的框架中,你有3个地方可以实现它:模型,视图或控制器。

目前,我在视图中进行了以下检查:

@if ( $value->created_at->diff( new DateTime('today'))->format('%a') < 30 )
     <span class="label label-success m-r-10 pull-left">NEW</span>
@endif

但由于我有外部前端开发人员,我对我的观点中的逻辑不满意。

我的模型中的复杂Elequent查询也不是正确的方法。

在我的控制器中,我有:

public function index()
{
    //get all contacts
    $contacts = Contact::with('organizations')->get();

    //load the view and pass the results
    return View::make('contact.index')
                 ->with('contacts', $contacts);
}

但是我需要循环整个contacts数组来检查每个项目,并设置一个额外的变量,如果它是一个新的联系人。

实施此类检查的最佳和最干净的方法是什么?

2 个答案:

答案 0 :(得分:0)

Laravel已经有了一种向模型添加自定义属性的本地方式。在模型中,使用$appends属性和访问器函数将is_new属性添加到模型实例中。

// ========= models/Contact.php
class Contact extends Eloquent {

    protected $appends = array('is_new');

    public function getIsNewAttribute()
    {
        return $this->created_at->diff( new DateTime('today'))->format('%a') < 30;
    }

}

// ========= views/contact/index.blade.php

@if ($value->is_new)
<span class="label label-success m-r-10 pull-left">NEW</span>
@endif

有关详细信息,请参阅http://laravel.com/docs/eloquent

的底部

答案 1 :(得分:0)

最简单的方法是创建一个辅助函数,每次打印标题时都可以调用它。

创建helpers.php文件

// app/helpers.php
function contact_title($contact)
{
    if ($contact->created_at->diff( new DateTime('today'))->format('%a') < 30)
    {
        return $contact->title . ' <span class="your-classes">NEW</span>';
    }

    return $contact->title;
}

您现在需要确保加载帮助程序文件。

// add this line to app/start/global.php
require app_path().'/helpers.php';

现在在您的视图中,您可以拥有以下内容

...
{{ contact_title($value) }}
...