在刀片视图中使用Model:CONST是不好的做法,还是其他方法?
例如在模型中,我这样:
class ServiceType extends Eloquent
{
protected $table = 'service_type';
const TYPE_LANDLINE = 1;
const TYPE_SIP = 4;
}
并在控制器中:
if ($packageDb->service_type_id == ServiceType::TYPE_SIP) {
$summary[service_type] = $packageDb->service_type_id;
}
if ($packageDb->service_type_id == ServiceType::TYPE_LANDLINE) {
$summary[service_type] = $packageDb->service_type_id;
}
return View::make("order.order-billing")->with('summary', $summary);
在刀片服务器中,我可以执行以下操作(未测试):
@if ($summary['service_type'] == ServiceType::TYPE_SIP)
..
@endif
解决方法:
tl; dr
它是由你决定.
替代解决方案
您可以为常量创建一个变量并将其传递给视图:
$roleNames = User::ROLE_NAMES;
return View::make("membership.edit", compact('roleNames'));
然后在视图中:
<td>@lang("app.{$roleNames[$member->pivot->role_id]}")</td>
好处
>更简短:您不必编写模型的标准名称.如果您有较深的模型结构或较长的模型名称,这将非常方便.
>您可以“重命名”常量:有时常量名是通用的.通过传递一个变量,您可以为该变量指定一个更具描述性的名称,该名称可以告诉您在给定上下文中如何正确使用这些常量.
>更清楚视图的作用:控制器的工作是提供所需资源(用于视图)以生成对请求的响应.如果将常量传递给控制器中的视图,则可以查看视图使用的资源.
缺点
当然,当使用此方法很麻烦时,也可能存在缺点.如果您有很多常量(例如,针对每个用户角色),则可能不想将所有常量都传递给视图,因为最终会得到如下所示:
$norole = User::NO_ROLE;
$memberRole = User::MEMBER_ROLE;
$adminRole = User::ADMIN_ROLE;
$moderatorRole = User::MODERATOR_ROLE;
$reviewerRole = User::REVIEWER_ROLE;
$publisherRole = User::PUBLISHER_ROLE;
return View::make("membership.edit", compact(
'norole',
'memberRole',
'adminRole',
'moderatorRole',
'reviewerRole',
'publisherRole'
));
主要的问题是:
>大量的不必要的代码可实现微不足道的功能.
>难以维护,特别是如果您的视图仅使用其中的几个.
>违反DRY,尤其是在几乎所有返回视图的函数中需要执行此操作时.
当然,您可以重构它,创建帮助器函数,但是当直接在视图中直接使用常量时(在这种情况下),在这种情况下为什么要处理所有这些麻烦呢?
@if ($user->role === App\User::ADMIN_ROLE)
经验法则是使用易于阅读和理解的解决方案.除非您有样式指南,否则应遵循该指南.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。