更好的方法来改进刀片模板?

时间:2015-01-18 12:53:39

标签: php laravel laravel-4 blade

客户可以选择两种类型的包:电话包或宽带&电话套餐。

当用户准备下订单时,它将显示包含包裹名称信息和费用的摘要视图。某些摘要信息无需显示是否选择手机套餐或宽带&电话套餐。

有没有更好的方法来提高可读性和可维护性?例如

order-sidebar.blade.php

注意:这是代码块的一个小例子。在实际的应用程序中,它很大,有很多if语句broadbandphonephone

@if ($summary['service'] == "phone" ||  $summary['service'] == "broadbandphone")
    <div class="x5">

        <h4>Phone Line x <span class="summary-lines">{{$summary['lines']}}</span></h4>


        <ul class="clearfix">
            @if ($summary['service'] == "phone")
                <li>
                    <p class="x5-details">
                        @if ($summary['line_type'] == "newline")
                            New Line(s)
                        @endif

                        @if ($summary['line_type'] == "switch")
                            Switch line(s)
                        @endif
                    </p>
                </li>
            @endif

            @if ($summary['service'] == "phone" && $summary['lines'] > 1)
                <li>
                    <p class="x5-details">{{$summary['linesWithMulitpleNumbers']}}</p>
                </li>
            @endif

            <li>
                <p class="x5-details">{{$summary['package']->name}}</p>

                <p class="x5-price">£{{$summary['monthlyLinesCost']}}</p>
            </li>
        </ul>

    </div>
@endif

或者我应该为摘要视图执行两个单独的文件,例如order-sidebar-phone.blade.phporder-sidebar-broadbandphone.blade.php

所以它会是这样的:

   @if ($summary['service'] == "phone")
        @include('sections.order-sidebar-phone')
   @end

   @if ($summary['service'] == "broadbandphone")
        @include('sections.order-sidebar-broadbandphone')
   @end

1 个答案:

答案 0 :(得分:1)

你的代码对我来说没问题。但是,这里有一些技巧可能有助于减少问题或使代码更具可读性。

简写三元如果

有时候shorthand if看起来更干净,更具可读性:

@if($summary['service'] == "phone")
    Foo
@else
    Bar
@endif

可以写成:

{{ ($summary['service'] == "phone" ? "Foo" : "Bar") }}

对于根据条件而变化的小块文本特别有用。

压痕

我不应该这么说。正确地缩进你的代码(不是说你没有在你的问题中......)而你的if语句将不那么令人困惑;)

局部模板

虽然可以像你建议的那样完全拆分它,但这会导致很多重复的代码......

但你也可以分割你的文件,使它们不那么大,并且不包含那么多if语句(即使总数仍然相同,它的结构更清晰,更清晰)

例如,而不是:

{{-- ... --}
</div> 

@if ($summary['newSetup'] == false)
    <div class="installation">
        <h4>Phone Line x <span class="summary-lines">{{$summary['lines']}}</span></h4>
        <ul class="clearfix">
            <li>
                <p class="installation-details">Installation</p>
                <p class="installation-price">£{{$summary['installationCharge']}}</p>
            </li>
        </ul>
    </div>
@endif

<div class="off-costs bg-gray">
     <div class="off-costs-header clearfix">
{{-- ... --}}

installation部分放入其自己的文件中并将其包含在内:

{{-- ... --}
</div> 

@if ($summary['newSetup'] == false)
    @include('installation')
@endif

<div class="off-costs bg-gray">
     <div class="off-costs-header clearfix">
{{-- ... --}}