私は最小限のことを行う単純なphp mvcを開発していますが、必要に応じて機能します。手続き型よりもmvcアプローチを使用するのは初めてなので、学習しながら..
開発中に誤って奇妙なスタイルで作成してしまいましたが、現在、メイン.htaccess
にはほとんどすべての物理的な書き換えが含まれています。たとえば、フォーラムは次のとおりです。
RewriteRule ^forum/([a-zA-Z0-9_]+)_([0-9]+)/$ index.php?controller=forum&method=showThread&urlTitle=$1&threadId=$2 [L]
RewriteRule ^forum/([a-zA-Z0-9_]+)_([0-9]+)/all/([0-9]+)$ index.php?controller=forum&action=showThread&urlTitle=$1&threadId=$2&page=$3 [L]
現時点でどのように機能するかは、すべての URL が index.php に向けられ、次に使用する URL から使用するコントローラーとメソッドを取得することです。
index.php
$actionName = $_GET['action'];
$controllerName = ucfirst(strtolower($_GET['type'])).'controller';
$controller = new $controllerName;
$controller->$actionName();
コントローラー/フォーラムコントローラー.php
class forumcontroller{
function showThread() {
$thread = new Thread($_GET['threadId'], $_GET['uriTitle']);
require "templates/thread.php";
}
ただし、これは、ユーザーがアクセスしたくない場所に移動する可能性があることを意味します。たとえば、次のようなものです。
/public_html/templates/index.php
私が必要だと思うものは何ですか?
代わりに、メインの .htaccess は次のようになるべきだと思いますか?
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
次に、index.php で次のようなものを使用します。
$url = explode("/", `$_SERVER['QUERY_STRING']);`
$controller = $url[0]; //Returns "forum"
$data = $url[1]; //Returns the forum title and id
しかし、このアプローチでは、データだけでコントローラー内のアクションを呼び出す方法がわかりませんか?
次のようなことをする必要はありませんか?
if(!$data)
$controller->loadForum();
elseif($data)
$controller->loadForumThread($data);
結論
さまざまな形式の seo に適した URL が多数あるサイトのルーティングを最適に行う方法を理解していないだけです。mvc がどのように機能するかは理解していますが、ルーティング部分とすべての例を把握するのに苦労しています。全体が非常に複雑に見えます。
.htaccess
次のように、さまざまな形式の多くの URL を処理するために および コントローラーをコーディングする方法を理解するのに本当に苦労しています。
domain.com
domain.com/uploads
domain.com/profiles/username
domain.com/messages/inbox
domain.com/messages/createnew/userId
domain.com/forum/all/2
domain.com/forum/title_1/
domain.com/forum/title_1/all/3