重複の可能性:
MVC での CMS ルーティング
MVC 設計構造を実装したいと考えており、現在、要求されたビューを解析するための適切なソリューションに苦労しています。
ルーティング ファイルには、次のコードがあります。
public function parseRequestedView() {
$this->ressource_requested = explode('/', trim($_GET['view'], '/'));
// e.g.: http://www.foo.com/article/{id}/comments/show
if (!empty($this->ressource_requested[3])) {
// Format: [0] viewpoint (article), [1] child (comments), [2] action (show), [3] reference ({id}),
// [4] additional information (from $_POST)
return array($this->ressource_requested[0], $this->ressource_requested[2], $this->ressource_requested[3],
$this->ressource_requested[1], $_POST);
// e.g.: http://www.foo.com/article/{id}/show
} elseif (!empty($this->ressource_requested[2])) {
return array($this->ressource_requested[0], NULL, $this->ressource_requested[2], $this->ressource_requested[1],
$_POST);
// e.g.: http://www.foo.com/archive/show
} else {
return array($this->ressource_requested[0], NULL, $this->ressource_requested[1], NULL, NULL);
}
}
アイデアは、訪問者がブラウザーに何を入力しても、関数はリクエストを解析し、常に同じフォーマットの配列/出力を返すというものです。ホスト名に続く URL の最初のセグメントは、常にメイン ビューポイントです (例: 記事)。最後に、includeTemplateFile() という別の関数を使用してビューを含めます。ファイルの命名規則は次のとおりです。
viewpoint.child.action.template.php
e.g.: article.comments.show.template.php
私の質問は次のとおりです。よりエレガントなソリューションはありますか? このトピックに関するいくつかのチュートリアル/記事 (例: http://johnsquibb.com/tutorials/mvc-framework-in-1-hour-part-one )を読みましたが、ほとんどのソリューションは好きではありません。よく設計されています。
.htaccess ファイルの内容は次のとおりです。
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?view=$1 [L,QSA]
前もって感謝します。