简而言之:我想打印一份联系人列表,但如果联系人是在本月创建的,则会在标题中的新标签处打印出来。
在像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数组来检查每个项目,并设置一个额外的变量,如果它是一个新的联系人。
实施此类检查的最佳和最干净的方法是什么?
答案 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) }}
...