我正在尝试为我的简单Laravel应用程序提供干净的代码。我有一个视图(user.blade.php
)用于显示用户详细信息:
<div class="name">
<label>Name</label>
<span class="value">{{ $user->name }}</span>
</div>
<div class="address">
<label>Address</label>
<span class="value">
<span class="line1">{{ $user->address_line_1 }}</span>
@if ($user->address_line_2 !== null)
<span class="line2>>{{ $user->address_line_2 }}</span>
@endif
</span>
</div>
<div class="phone">
<label>Phone numbers</label>
<span class="value">
@if ($user->phone_main !== null)
<span class="main">{{ $user->phone_main }}</span>
@endif
@if ($user->phone_alt !== null)
<span class="alt">{{ $user->phone_alt }}</span>
@endif
</span>
</div>
有些用户只有一个地址行,有些用户只有两个(我用两列address_line_1
和address_line_2
进行建模,后者可以为空),有些用户有0个电话号码,另一些用户有1或2(又有两列phone_main
和phone_alt
,它们都可以为空)。
由于我需要正确格式化的地址行和电话号码信息,因此我使用刀片@if
伪指令来确保<span>
仅在它们包含任何信息时才显示。最佳实践(据我所知)规定,视图不应“做很多事情”,但我认为我无法将这种行为正确地封装在雄辩的属性({{1 }}类),因为我将元素包装在HTML标记中,并且我不希望我的模型了解HTML。
我的问题是:处理这种情况的一般准则是什么?我应该:
答案 0 :(得分:0)
我认为,在您的控制器中,您可以编写一个变量来为您创建格式化的地址。
$formattedAddress = $user->address_line_1;
if($user->address_line_2 !== null){
$formattedAddress .= "<br>" . $user->address_line_2;
}
与电话号码相同。您可以将其返回视图:
return view ('user.details')->with("formattedAddress", $formattedAddress);
显然需要根据您的口味和要求来设置样式,但这可能对您有用。