私はFrontPage/Page Controllerとして次のものを使用しています。これまでのところうまくいきましたが、私が直面している2つの問題を除いて、$ pages配列とswitch私がここに貼り付けたものよりもはるかに長い。新しいページコントローラが必要になるたびに、それを$ pages配列に追加し、そのリストを非常に長くするスイッチを切り替えなければなりません。どのようにしてこの問題を克服し、このコードの他の改善が見えますか?ページコントローラ内のloadLogic()
は、/ controllername/logic/function.phpページの下で機能を取得するために使用されます。PHPのFrontPage /ページコントローラ
フロントページコントローラ - の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ページ目、PAGE2、PAGE3} .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
をhome.phpに行きますこれまでのあなたの提案では、一般的なフロントページ/ページコントローラについて私に教えてくれるものがありますか?任意のヒント?もう1時間か2時間待つつもりです。この質問にもう答えがない場合、私はあなたの名前を受け入れたものとしてマークします。 – afarazit
まあ、ユーザーが?p = pageoneに行くと、/ pageoneとして表示されるように、.htaccess書き換えルールの実行方法を調べることを検討するかもしれません。また、フロントページコントローラーと同じ種類のロジックを使用して、サブページのサブページを制御することもできます。私は似たようなシステムを一度、テキストファイルのライブラリで使いました。そして、?p = libraryは単に書籍のインデックスに行き、?p = library&lib = book1は本に行きます。ライブラリのページにはデフォルトのインクルードのブックインデックスがあり、file_exists()で指定されたディレクトリのtxtファイルに対して$ _GET ['lib']をチェックしていました。 – Phoenix
また、別の形式の難読化が拡張を変更しています。インクルードされたファイルは文字通り任意の拡張子を持つことができ、home.gobbledygookにすることができます。それはそれを実行します、内部にPHPコードを見つける場合、すべての同じを含むかなりの扱いを含める。 .phpの名前を.jpgに変更すると、コードが実行されます。ちょうど誰かが名前と拡張子を推測したならば、ソースがダウンロード可能になるので、あなたが直接要求された場合にはApacheやそれが使用しているサーバをphpファイルとして扱うようにしてください。あなたがしなかったとしてもそれはまだ動くでしょう。 – Phoenix