0

扱いが難しいのでMVC構造は使っていません。だから、私のすべてのWebプロジェクトでは、ステップバイステップでまっすぐに使用しています。(正確な言葉はわかりませんが、WordPress で使用する構造です。つまり、ファイルを 1 つずつロードします。)

index.phpすべての URL リクエストをファイル Usingにリダイレクトし.htaccess、そこから URL クエリを取得します。次に、そのクエリを使用して、適切なページを読み込みます。

サイトのindex.phpファイル

// load all configuration files, function files here.

$query = ( isset ($_GET['q']) ) ? $_GET['q'] : "index";
if ( !userLoggedIn() ) {
     if ($query == "index") {
          include_once ("pages/index.php");
     } elseif ($query == "signup") {
          include_once ("pages/signup.php");
     } else {
          include_once ("pages/404.php");
     }
} else {
     if (in_array($query, get_list_of_usernames())) {
          include_once ("pages/users.php");
     } elseif () {
          // and so on...
     } else {
          include_once ("pages/404.php");
     }
}

さて、私の質問は、

  • URL ルートを正しく使用していますか? または、これを行うための他のより効率的な方法はありますか?
  • この構造は MVC より優れていますか、それとも MVC の方が優れていますか?
4

1 に答える 1

1

ルーティングは MVC の一部であり、コントローラー部分の一部です。MVC パターンは、理論的には、ルーティング方法とは異なるものと見なされる可能性があります。MVC は、コードをどのように構造化するかに関するものです。

私はかつて、ルーティングのための自作アプローチのためにこのようなことをしました。これは、アクション メソッドを持つコントローラー クラスに依存します。

基本クラスを呼び出す必要がありController、すべてのコントローラー クラスがそれを拡張する必要があります。したがって、ベースコントローラーは次のようにclass Controller {}なり、コントローラーは次のようになりclass someController extends Controller { function someAction() {} }ます...メソッドの呼び出しは次のようになりますhttp://mysite/someController/someAction

Index.php:

// include callable controllers here
$partsA = explode("?", $_SERVER['REQUEST_URI']); // split querystring
$partsB = explode("/", $partsA[0]); // get url parts
if (count($partsB) < 2)
    die("missing controller in url");
elseif (count($partsB) < 3)
    die("missing action in url");
$className = $partsB[1];
$methodName = $partsB[2];
if (class_exists($className))
    if (!is_subclass_of($className, "controller"))
        die(htmlspecialchars("Class $className doesn't extend controller")); // prevents use of unauthorized classes
    else
        $controller = new $className();
else
    die(htmlspecialchars("Class $className doesn't exist"));

if (!method_exists($controller, $methodName))
    die(htmlspecialchars("Method $methodName doesn't exist"));
else
    $controller->$methodName();

Controller.php: (ベースコントローラー)

class Controller {}

これで任意のコントローラー....例 SomeController.php:

class someController extends Controller {
    function someAction() {
        echo "test";
    }
}

... メソッドの呼び出しはsomeAction()で行われhttp://mysite/someController/someActiontest

于 2013-04-17T12:37:03.027 に答える