1

現在、ミニ「フレームワーク」に取り組んでおり、いくつかの問題があります。ほとんどの MVC で利用されている基本概念の理解を深めるために、これを試みています (少なくとも私が見たものから)。そうです、フレームワークを使用する方が簡単であり、私がやっていることすべてが理想的ではないことを理解しています. 私はただもっと学ぼうとしています。

そのため、現在作業中のファイルが2つあります。

FrontController.php

<?php   
class FrontController {
    public function __construct() {
        $this->go(); // RUNS GO FUNCTION UPON LOADING
    }

    public function go() {          
        $url = $_SERVER['REQUEST_URI']; // GRABS URL
        $action = explode("/", $url); // SPLITS UP URL INTO SECTIONS

        $object = ucfirst($action[2]) . "Controller"; // SETS 2ND SECTION OF URL TO UPPERCASE AND IDENTIFIES THE CONTROLLER
        $file = APP_DIR . "/" . $object . ".php"; // IDENTIFIES THE FILE THAT WILL BE USED

        if(!is_file($file)){ // DETERMINES IF FILE EXISTS
            $this->fail(); // IF NOT, FAILS
        } else {
            require_once $file; // IF EXISTS, PULLS IT IN
            $method = ucfirst($action[3]); // THE 3RD SECTION OF THE URL IS THE METHOD
            $controller = new $object(); // CREATE INSTANCE OF THE IDENTIFIED OBJECT

            if(!method_exists($controller, $method)){ // DETERMINES IF METHOD EXISTS IN THE CLASS
                $this->fail(); // IF NOT, FAILS
            }

            $controller->$method(); // RUN METHOD
            exit(0);
        }
    }

    public function fail() {
        echo "<h1>Failure</h1>"; // FAILURE MESSAGE
    }
}

/application/BaseController.php

<?php   
class BaseController {
    public function __construct() {
        $this->session();
    }

    public function session() {
        session_start();
        $_SESSION['is_logged_in'] = 1;
        echo "hi";
    }
}

だから私ができるようにしたいのは、BaseController を FrontController で拡張することです。BaseController を拡張すると、アプリケーション全体に共通の機能を追加できると考えました。問題は、これを適切に行う方法がわからないことです。何らかの形で BaseController.php を FrontController.php に「要求」する必要があることはわかっていますが、さまざまな方法を見てきましたが、どれが最も正しいかを知りたいと思っています。

私が試したのは、「require_once("/application/BaseController.php");」を追加するだけです。FrontController.php の先頭に移動し、FrontController クラスを拡張しますが、これは機能しません (空白のページ)。私が読んだことから、これは最善の方法ではありません。

__autoload() を読み込みましたが、効果的な使い方がわかりません。これを FrontController.php ファイルの先頭に置き、その後クラスを拡張するだけですか?

要約すると、FrontController クラス (および必要に応じて他の将来のクラス) を BaseController で拡張したいと思います。このタスクを効果的に達成する方法についてアドバイスをお願いします。ひょっとして、私の考えが逆なのかもしれませんが、もしそうなら教えてください!!

4

2 に答える 2

1

次のようなクラスを拡張します。

<?php
class FrontController extends BaseController {
 ..code...
}


?>

__autoload は、クラスを自動的にロードする魔法のメソッドです。したがって、これを FrontController に例として追加し、必要に応じてコントローラーをロードできます。クラスの自動ロードについては、次を参照してください。

http://php.net/manual/en/language.oop5.autoload.php

また、アプリケーションをより適切に定義するのに役立つ PHP の SPL を利用してください。

于 2012-05-21T14:43:20.487 に答える