首先我會推薦閱讀有關MVC(模型 - 視圖 - 控制器),你可以在此維基百科文章的開始: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
對於一個簡單的情況下,你的問題的一個來回,你的解決方案在我看來,最好的。其他任何事情都會增加不必要的複雜性。這就是說,我會嘗試使用這種簡單的情況,並提供一種可能的方式來將邏輯從表示中分離出來,希望一些基本概念能夠從中解脫出來。
my_controller.php
include("../../externs/includes/connexio.php");
$result = mysqli_query($con, "SELECT * FROM myTable");
$myList = array();
while ($row = mysqli_fetch_array($result))
{
$myList[] = $row;
}
// Now load the view.
include "my_view.php";
my_view.php
<?php foreach ($myList as $row) : ?>
<div class="title" id="<?php echo $row['id']; ?>"><?php echo $row['title']; ?></div>
<div class="subtitle"><?php echo $row['subtitle'];?></div>
<br>
<?php endforeach; ?>
正如你看到的,我只是把你的代碼,這將是業務邏輯和表示分開了。 這裏的想法是,要呈現的數據應該在視圖之外生成。視圖應該對數據如何「生成」一無所知。
在這個例子中,View只知道變量$ myList包含字段:id,title和subtitle。如果您曾更改數據庫或決定從文件甚至Web服務中獲取數據,你根本不需要觸摸視圖。
與此同時,控制器不關心View如何顯示數據。不管來源:數據庫,Web服務,文件等;它將始終生成一個至少包含View所期望的字段的數組。
MVC的下一步是將數據操縱從控制器移動到模型。我不會去那裏的細節,但這是控制器會是什麼樣子:
include "my_model.php";
$myList = fetchData();
include "my_view.php;
的my_model.php
文件將基本上做同樣如上my_controller.php
內的fetchData()
功能。
一個非常值得商榷和爭議的問題是,在View中是否有任何PHP代碼是一種很好的做法。有人認爲應該使用其他模板語言,如Smarty。我的觀點是,通過添加另一種語言來更改語法並不會改變View中需要某些邏輯的不可避免的事實,否則您將無法將動態引入到應用程序中。
正如你感覺閱讀PHP代碼更加舒服一樣,你將能夠看看周圍的幾個框架,看看他們是如何做到的。他們都有一個共同點,那就是它們在表示層都有一些邏輯,無論是PHP還是別的。
我在這裏沒有看到任何問題,我認爲那還是可以的 – Ghost 2014-09-21 11:03:28
沒有問題。有用。我的問題是:有沒有更好的方法來做到這一點?可以/我應該分開的HTML和PHP? – Nrc 2014-09-21 11:04:47
你可以通過將你的邏輯工作在不同的文件中,並將它包含到你的html文件中來始終將php代碼從html上下文中分離出來 – justrohu 2014-09-21 11:11:33