我想知道什麼是最好的方法來分割HTML視圖和CSV導出(相同的視圖數據)的責任。我不想重複寫同一塊CSV代碼時,它幾乎是在做同樣的事情。爲HTML <table>和CSV分割職責?
下面的示例代碼,首先從數據庫中獲取數據,然後將其處理成多維數組。你可以看到我用了很多foreach
來生成報告。我有重複這個CSV導出嗎?必須有DRY解決方案。
下面的示例代碼,您將如何拆分CSV和HTML的職責?
function report($campaign, $agent, $startDate, $endDate) {
$sql = "SELECT count(*) as total, group_name, field, field, field, FROM table some ... inner joins table .. WHERE ... group by agent";
$q = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($q)) {
$report[ $row['group_name'] ][ $row['item'] ] ['total'] = 0;
$report[ $row['group_name'] ][ $row['item'] ] ['total'] += $row['total'];
$report[ $row['group_name'] ][ $row['item'] ] ['agent'][$row['agent']] = $row;
if (!array_key_exists($row['agent'], $fieldsAgent)) {
.....
}
}
$html = "<table>";
$html .= " <tr>";
$html .= " <td>Group</td>";
$html .= " <td>Item</td>";
foreach($fieldsAgent as $agentCol => $agentTotal) {
$html .= "<td>$agentCol</td>";
}
$html .= " <td>Total</td>";
$html .= " </tr>";
foreach ($report as $category => $items) {
foreach($items as $itemName => $itemData) {
$html .= "<tr>";
$html .= " <td>" . $category . "</td>";
$html .= " <td>" . $itemName . "</td>";
foreach($fieldsAgent as $fieldAgentName => $totalAgentUser) {
$total = $itemData['agent'][ $fieldAgentName ][ 'total' ];
$html .= "<td>" . $total . "</td>";
}
$html .= " <td>" . $itemData['total'] . "</td>";
$html .= "</tr>";
}
}
$html .= "</table>";
echo $html;
}
乾的解決方案是您的演示文稿從您的數據邏輯分開,然後有兩個獨立的表示層(一個用於HTML,其他csv)....這是什麼MVC是關於 –