我使用以下作爲Frontpage/Page Controller(s)並且目前工作正常,除了兩個我正面臨的問題,您可以看到$ pages數組和開關,它們是實際上我在這裏粘貼的時間要長得多。每次都需要一個新的頁面控制器,我必須將它添加到$ pages數組中,並切換使列表很長的列表。你如何克服這個問題,你看到這個代碼有任何其他的改進? loadLogic()
在頁面控制器中它用於獲取pages/controllername/logic/function.php下的函數。PHP首頁/頁面控制器
頭版控制器 - 的index.php:
include 'common/common.php';
if(!isset($_GET['p']) OR $_GET['p'] == ''){
$_GET['p'] = 'home';
header('Location: index.php?p=home');
}
$pages = array('home','register','login','logout','page1','page2','page3');
$_GET['p'] = trim($_GET['p']);
if(isset($_GET['p'])){
if(in_array($_GET['p'], $pages)){
switch ($_GET['p']) {
case 'home':
include 'home.php';
break;
case 'register':
include 'register.php';
break;
case 'login':
include 'login.php';
break;
case 'logout':
include 'logout.php';
break;
case 'page1':
include 'page1.php';
break;
case 'page2':
include 'page2.php';
break;
case 'page3':
include 'page3.php';
break;
}
}else{
echo '404!';
}
}
頁控制器 - {家,註冊,登錄,註銷,第1頁,第2頁,第3頁} .PHP:
include 'tpl/common/header.php';
contentStart();
if(isset($_SESSION['logged'])){
loadLogic('dashboard');
}else{
loadLogic('nologin');
}
//Display login form in logic page instead links
//
if(!isset($_SESSION['logged'])){
contentEnd();
loadLogic('nologinForm');
}else{
contentEnd();
include'tpl/common/rcol.php';
}
include 'tpl/common/footer.php';
功能loadLogic() :
function loadLogic($logic) {
$path = dirname(__DIR__) . '/pages';
$controller = preg_split('/&/',$_SERVER['QUERY_STRING']);
$controller = trim($controller[0],"p=");
$logicPath = 'logic';
$logic = $logic . '.php';
$err = 0;
$logicFullPath = $path.'/'.$controller.'/'.$logicPath.'/'.$logic;
if($err == '0'){
include "$logicFullPath";
}
}
文件夾結構:
projectName
|
---> common
|
---> pages
| |
| --->home
| |
| --->register
| |
| --->login
| |
| --->logout
| |
| --->page1
| |
| --->page2
| |
| --->page3
|
---> tpl
| |
| ---> common
|
--> home.php
|
--> register.php
|
--> login.php
|
--> logout.php
|
--> page1.php
|
--> page2.php
|
--> page3.php
@Phoenix謝謝對於你的建議到目前爲止,還有什麼其他的你可以告訴我有關FrontPage /頁面控制器的一般情況嗎?有小費嗎?我會再等一兩個小時,如果這個問題沒有更多的答案,我會將你的標記標記爲已接受。 – afarazit 2011-01-05 05:28:38
那麼,你可能會考慮查找如何執行.htaccess重寫規則,以便當用戶轉到?p = pageone時,它將顯示爲/ pageone。您也可以使用與首頁控制器相同的邏輯來控制子頁面的子頁面。我有一個類似的系統,只有一個文本文件庫,並且?p = library只會去一個書籍索引,並且?p = library&lib = book1會去找這本書。圖書館頁面具有圖書索引,因爲它是默認包含,並且使用file_exists()檢查了$ _GET ['lib']與指定目錄中的txt文件並將其包含在其中,或者在默認情況下檢查了它。 – Phoenix 2011-01-05 05:40:20
另外,另一種形式的混淆正在改變擴展。包含的文件可以字面上有任何擴展名,可以是home.gobbledygook。包括幾乎包括所有相同,如果它發現內部的PHP代碼,它會運行它。您可以將.php重命名爲.jpg,它將運行代碼。只要確保apache或任何你使用的服務器將它視爲一個php文件,如果直接請求的話,或者不允許從服務器外部訪問,否則如果有人猜到了這個名字和擴展名,這個源代碼將是可下載的,但是即使你沒有,它仍然會運行。 – Phoenix 2011-01-05 05:51:39