我只是想知道在PHP web項目中將邏輯組件與佈局分開的最佳方式是什麼?在PHP中正確分離邏輯/風格
內容存儲在MySQL中,邏輯是PHP,模板是HTML/CSS當然。 我的問題是,如何最好地解決這個問題(不使用CMS)。
格爾茨,poeschlorn
我只是想知道在PHP web項目中將邏輯組件與佈局分開的最佳方式是什麼?在PHP中正確分離邏輯/風格
內容存儲在MySQL中,邏輯是PHP,模板是HTML/CSS當然。 我的問題是,如何最好地解決這個問題(不使用CMS)。
格爾茨,poeschlorn
使用一個Template Engine,例如Smarty。
另外,只要使用HTML與嵌入式PHP的模板,只是要小心,不要把太多的邏輯放入模板。
只需使用一些模板引擎。
最熟悉的是PHP本身。
這裏是CRUD應用程序的非常簡單的例子:
邏輯部分只做數據操作
<?
mysql_connect();
mysql_select_db("new");
$table = "test";
if($_SERVER['REQUEST_METHOD']=='POST') { //form handler part:
$name = mysql_real_escape_string($_POST['name']);
if ($id = intval($_POST['id'])) {
$query="UPDATE $table SET name='$name' WHERE id=$id";
} else {
$query="INSERT INTO $table SET name='$name'";
}
mysql_query($query) or trigger_error(mysql_error()." in ".$query);
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
exit;
}
if (!isset($_GET['id'])) { //listing part:
$LIST=array();
$query="SELECT * FROM $table";
$res=mysql_query($query);
while($row=mysql_fetch_assoc($res)) $LIST[]=$row;
include 'list.php';
} else { // form displaying part:
if ($id=intval($_GET['id'])) {
$query="SELECT * FROM $table WHERE id=$id";
$res=mysql_query($query);
$row=mysql_fetch_assoc($res);
foreach ($row as $k => $v) $row[$k]=htmlspecialchars($v);
} else {
$row['name']='';
$row['id']=0;
}
include 'form.php';
}
?>
,並負責輸出兩個簡單的模板,
form.php的
<? include TPL_TOP ?>
<form method="POST">
<input type="text" name="name" value="<?=$row['name']?>"><br>
<input type="hidden" name="id" value="<?=$row['id']?>">
<input type="submit"><br>
<a href="?">Return to the list</a>
</form>
<? include TPL_BOTTOM ?>
和list.php
<? include TPL_TOP ?>
<a href="?id=0">Add item</a>
<? foreach ($LIST as $row): ?>
<li><a href="?id=<?=$row['id']?>"><?=$row['name']?></a>
<? endforeach ?>
<? include TPL_BOTTOM ?>
雖然有很多其他模板引擎,不同類型和意識形態。
作爲一個旁觀者,PHP代碼是否只能存在於正在提供的頁面中,還是可以被分離出來,像支持類庫一樣? – 2010-06-29 13:02:01
@jdk PHP可以包含()或require()其他文件,例如函數或類的庫 – 2010-06-29 13:21:31
嘗試的MVC框架,像
或CakePHP的: http://cakephp.org/
(蛋糕已經得到了一個陡峭的學習曲線,但可以做更多的東西自動的)
以下是MVC的內容: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
*(tipp)*環顧四周,尋找** MVC **。 – Gordon 2010-06-29 12:55:00