MVC構造を使用してWebサイトを作成しています。以下は、クリーンURLを使用して適切なファイルをロードするために使用したコードです。ただし、これは最初のレベルでのみ機能します。
私が訪問したかったと言ってmywebsite.com/admin
、それはうまくいくでしょう、しかしそうでmywebsite.com/admin/dashboard
はありません。問題は配列にあります。2番目のレベルと2番目のレベルの後にコンテンツをロードするように配列を取得するにはどうすればよいですか。
このような配列を作成するのが最善でしょうか?
Array
- controller
- view
- dashboard
ここでの助けは素晴らしいでしょう。副次的な質問としても。「カスタム」URLを設定するための最良の方法は何でしょうか。したがって、これをmywebsite.com/announcement
挿入すると、コントローラーが取得されているかどうかが確認され、失敗した場合は、カスタムコンテンツ(「customs」フォルダー内の同じ名前のファイル)が取得されているかどうかが確認され、何も実行されない場合は404が実行されます。ページが見つかりません)これは優先度の高い質問ではありませんが、コードの動作に大まかに関連しているため、追加するのが最善だと思いました。
function hook() {
$params = parse_params();
$url = $_SERVER['REQUEST_URI'];
$url = str_replace('?'.$_SERVER['QUERY_STRING'], '', $url);
$urlArray = array();
$urlArray = explode("/",$url);
var_dump($urlArray);
if (isset($urlArray[2]) & !empty($urlArray[2])) {
$route['controller'] = $urlArray[2];
} else {
$route['controller'] = 'front'; // Default Action
}
if (isset($urlArray[3]) & !empty($urlArray[3])) {
$route['view'] = $urlArray[3];
} else {
$route['view'] = 'index'; // Default Action
}
include(CONTROLLER_PATH.$route['controller'].'.php');
include(VIEW_PATH.$route['controller'].DS.$route['view'].'.php');
var_dump($route['controller']);
var_dump($route['view']);
var_dump($urlArray);
var_dump($params);
// reseting messages
$_SESSION['flash']['notice'] = '';
$_SESSION['flash']['warning'] = '';
}
// Return form array
function parse_params() {
$params = array();
if(!empty($_POST)) {
$params = array_merge($params, $_POST);
}
if(!empty($_GET)) {
$params = array_merge($params, $_GET);
}
return $params;
}