2013-09-22 65 views
2

這裏是場景;在網站的管理部分中,我有很多CRUD表,當執行某個操作(如刪除記錄)時,需要顯示成功/信息/錯誤消息。我相信每個人都熟悉這一點。在類中呈現HTML?

這通常涉及包裝在<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以及如何在一個類中從整個管理部分呈現HTML。因此遵循DRY原則。它減少了我的模板中的所有foreach循環。

因此,這引出了一個問題...

是更好地視圖模板內重複自己,而不是混淆了業務和表示層?或相反亦然?

我個人認爲(目前)是與配合使用配置文件是一個很好的解決方案。我也認爲將HTML存儲在類中是不好的習慣,因此也是配置文件。

回答

2

這確實是一個判斷呼籲。

大多數情況下,我更喜歡將HTML保留在類和配置文件之外。相反,我將盡可能多的HTML放在模板中。不同視圖共享的模板可以存儲在共享位置,並由模板引擎在正確的上下文中解析。

順便說一下,在編寫小應用程序和擴展時,我會對這個概念做出巨大的例外。雖然我認爲兩者都很重要,但我認爲我更重視保持一致的實用主義思想。

真正的問題是,需要多少時間來分離所有不同的數據類型,並且這樣做的回報會足夠大以證明您將付出的時間和精力?