在刀片视图中使用Model:CONST或其他方法是不好的做法?
例如在模型中,我喜欢这样:
<label>
并在控制器中:
$('#address1ForLabel').replaceWith("<label for="address1" id="address1ForLabel" >" address1 "</label>")
在刀片中我可以做这样的事情(未经测试):
class ServiceType extends Eloquent
{
protected $table = 'service_type';
const TYPE_LANDLINE = 1;
const TYPE_SIP = 4;
}
答案 0 :(得分:2)
由你决定。
您可以为常量创建变量并将其传递给视图:
$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'
));
主要问题是:
当然你可以重构这个,创建辅助函数,但是为什么要处理所有这些麻烦(在这种情况下)直接在视图中使用常量是简单易懂的:
@if ($user->role === App\User::ADMIN_ROLE)
经验法则是使用更易于阅读和理解的解决方案。除非你有风格指南,否则你应该遵循它。
答案 1 :(得分:1)
在您的刀片文件中,您可以注入模型
@inject('ServiceTypeModel', 'App\Models\ServiceType')
然后使用像这样的常量
{{ ServiceTypeModel::SIP }}
或
@if ($x < ServiceTypeModel::SIP)...