【问题标题】:A better way to improve blade template?改进刀片模板的更好方法?
【发布时间】:2015-03-16 14:06:56
【问题描述】:

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

当用户准备下订单时,它将显示一个包含包裹名称信息和成本的摘要视图。如果选择电话套餐或宽带和电话套餐,则某些摘要信息不需要显示。

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

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

【问题讨论】:

  • $summary 是 Eloquent 模型吗?
  • @lukasgeiter No. $summary 已通过 generateSummary() 方法在 OrderController.php 文件中声明。 generateSummary() 通过会话和数据库计算成本、总价等。
  • @lukasgeiter 你能建议我在刀片上改进什么
  • 你能把完整的代码发布到像 pastebin 这样的网站上,这样我就可以看到这里发生了什么?
  • 谢谢,但我实际上是指完整视图代码;)

标签: php laravel laravel-4 blade


【解决方案1】:

您的代码对我来说看起来不错。不过,这里有一些提示可能有助于减少 if 或使您的代码更具可读性。

简写三元 if

有时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">
{{-- ... --}}

【讨论】:

    猜你喜欢
    • 2019-12-02
    • 2018-10-15
    • 2014-03-01
    • 1970-01-01
    • 2014-04-16
    • 2013-04-29
    • 1970-01-01
    • 2019-01-06
    相关资源
    最近更新 更多