3

バックエンドに PHP を使用して、AJAX Web アプリを構築しています。新しいページを簡単にドロップして Javascript に集中できるルーティング システムを設計しようとしています。PHP が提供する実際のページはシンプルで、基本的には Javascript チャート ( d3.jsで構築) のコンテナーであるビューのみです。したがって、AJAX 呼び出しを開始するまで、コントローラーはモデルと対話する必要さえありません。

私はOOP、特にバックエンドが初めてです。私はJavascriptで少しやっていますが、OOPをMVCに組み込み、ルーティングの問題を解決するのは初めてです。ルーティング クラスが記述されたモジュール/プラグインが存在することは知っていますが、このプロジェクトのバックエンド部分は非常に単純なので、基本的に、ブログの「概要」ページを提供する最善の方法です。この機会に自分で徹底的に学びたい。

私は1つのコントローラーを持っています:

<?php
//controller.php
include 'views/view.php';

class Controller
{

    public function homeAction() {
        $view = new View();
        $view->setTemplate('views/home.php');
        $view->render();
    }

    public function categoryAction($category) {
        $view = new View();
        $view->setTemplate("views/Monitor/{$category}/{$category}.php");
        $view->setCategory($category);
        $view->render();
    }

    public function monitorAction($category, $monitor) {
        $view = new View();
        $view->setTemplate("views/Monitor/{$category}/{$monitor}.php");
        $view->setCategory($category);
        $view->setMonitor($monitor);
        $view->render();
    }

}

?>

今、私は自分のコントローラーを の先頭でインスタンス化しますindex.php:

<?php
// Load libraries
require_once 'model.php';
require_once 'controller.php';

$controller = new Controller();

$uri = str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']);

// home action
if ($uri == '/') {
  $controller->homeAction();

// /{category}/{monitor}
} elseif (preg_match("#/(.+)/(.+)#", $uri, $matches) ) {
  $category = $matches[1];
  $monitor  = $matches[2];
  $controller->monitorAction($category, $monitor);

// /{category}
} elseif (preg_match("#/([^/.]+)#", $uri, $matches) ) {
  $category = $matches[1];
  $controller->categoryAction($category);

// 404  
} else {
    header('Status: 404 Not Found');
    echo '<html><body><h1>Page Not Found</h1></body></html>';
}



if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && (!empty($_GET)) && $_GET['action'] == 'get_data') {

    $function = $_GET['chart'] . "_data";
    $dataJSON = call_user_func($function);
    header('Content-type: application/json');
    echo $dataJSON;

}

?>

PHPのオートローダについて少し読んだことがありますが、基本を確認して理解したいので、最初に手動でダウンロードしたいと思います。

Controllerこれは、オブジェクトをインスタンス化する適切な場所ですか?

4

1 に答える 1

1

まず、アーキテクチャがいくつかの大きな問題に直面しています。ユーザーが要求した URI を処理するルーターが必要です。次に、システムの初期化状態が必要です。Controllersを作成する通常の方法はextend、親クラスに対して行います。その後、親クラスの__constructメソッドで子コントローラーを初期化できますが、システムは適切な状態ではありません。

これは決して削除しないゴールド リンクです。

http://johnsquibb.com/tutorials/mvc-framework-in-1-hour-part-one

于 2013-01-31T23:18:00.973 に答える