微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP-Laravel-模型常量在刀片?

在刀片视图中使用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 举报,一经查实,本站将立刻删除。

相关推荐