2

这是场景;在网站的管理部分,我有很多 CRUD 表,需要在执行操作(例如删除记录)时显示成功/信息/错误消息。我相信每个人都对此很熟悉。

这通常涉及包裹在其中的消息<div class="alert alert-success">User updated</div>或类似的东西。

在我正在创建的当前 Laravel 应用程序中,我有一个配置文件:

<?php

return array(

    'info'    => array(

        'start'   => '<div class="callout callout-info"><h3><i class="icon-info-sign-sign"></i> Information</h3>',
        'opening' => '<i class="icon-caret-right"></i> ',
        'closing' => '<br>',
        'end'     => '</div>',

    ),

    'success' => array(

        'start'   => '<div class="callout callout-success"><h3><i class="icon-ok-sign"></i> Success</h3>',
        'opening' => '<i class="icon-caret-right"></i> ',
        'closing' => '<br>',
        'end'     => '</div>',

    ),

    'warning' => array(

        'start'   => '<div class="callout callout-warning"><h3><i class="icon-warning-sign"></i> Warning</h3>',
        'opening' => '<i class="icon-caret-right"></i> ',
        'closing' => '<br>',
        'end'     => '</div>',

    ),

    'error'   => array(

        'start'   => '<div class="callout callout-danger"><h3><i class="icon-remove-sign"></i> Warning</h3>',
        'opening' => '<i class="icon-caret-right"></i> ',
        'closing' => '<br>',
        'end'     => '</div>',

    )

);

格式化程序类使用它来将一个对象MessageBag(存储一个数组,例如验证错误,如无效电子邮件)呈现为可读的 HTML。这并不完全将 HTML 存储在 Formatter 类中,但它确实在其中呈现。

格式化程序类简单地呈现带有配置选项的 MessageBag 对象,因此:

$formatter = new Formatter('success', $messageBag);
$html = $formatter->render();

然后从控制器传递到视图并显示。

return View::make('admin.template')->with('message', $html);

此方法允许我更新 HTML 以及它如何在一个类中在整个管理部分呈现。从而顺应了DRY原则。它减少了foreach我模板中的所有循环。

所以这引出了一个问题……

在视图模板中重复自己而不是混淆业务和表示层是否更好?或相反亦然?

我个人的观点(目前)是,将配置文件与类结合使用是一个很好的解决方案。我也认为在一个类中存储 HTML 是不好的做法,因此是配置文件。

4

1 回答 1

2

这真的是一个判断电话。

大多数时候,我更喜欢将 HTML 排除在类和配置文件之外。相反,我将尽可能多的 HTML 放在模板中。不同视图共享的模板可以存储在共享位置,并由模板引擎在正确的上下文中解析。

顺便说一句,在编写小型应用程序和扩展时,我对这个概念提出了很大的例外。虽然我认为两者都很重要,但我想我更看重务实的思考方式。

真正的问题是,分离所有不同的数据类型需要多少时间,这样做的回报是否足以证明您投入的时间和精力是合理的?

于 2013-09-22T15:41:21.577 回答