MVC がどのように機能するかを学習する手段として、PHP で基本的な MVC 構造化 CMS を作成しています (したがって、実際に事前に構築されたエンジンを使用していません)。私は、このチュートリアルhereと非常によく似た構造の基本的なバージョンを使用しています。ただし、テンプレート クラスの必要性をバイパスして、ビューが自動的に読み込まれるようにしたいと考えています。これが強く推奨される場合は、テンプレートの概念に固執します (なぜそれが必要なのかを誰かが説明できれば、私はそれを大いに感謝します)。
public function loader() {
/*** check the route ***/
$this->getPath();
/*** if the file is not there diaf ***/
if (is_readable($this->controller_path) == false) {
$this->controller_path = $this->path.'/controller/error404.php';
$this->action_path = $this->path.'/view/error404.php';
}
/*** include the path files ***/
include $this->controller_path;
include $this->action_path;
/*** a new controller class instance ***/
$class = $this->controller . 'Controller';
$controller = new $class($this->registry);
/*** check if the action is callable ***/
if (is_callable(array($controller, $this->action)) == false) {
$action = 'index';
} else {
$action = $this->action;
}
$controller->$action();
}
/**
*
* @get the controller
*
* @access private
*
* @return void
*
*/
private function getPath() {
/*** get the route from the url ***/
$route = (empty($_GET['rt'])) ? '' : $_GET['rt'];
if (empty($route)) {
$route = 'index';
} else {
/*** get the parts of the route ***/
// mywebsite.com/controller/action
// mywebsite.com/blog/hello
$parts = explode('/', $route);
$this->controller = $parts[0];
if(isset( $parts[1])) {
$this->action = $parts[1];
}
}
if( ! $this->controller ) { $this->controller = 'index'; }
if( ! $this->action ) { $this->action = 'index'; }
/*** set the file path ***/
$this->controller_path = $this->path .'/controller/'. $this->controller . '.php';
$this->action_path = $this->path .'/view/'. $this->controller . '/'. $this->action . '.php';
}
これにより、コントローラーによって指定された変数をビュー ファイルが読み込む$this->registry->template->blog_heading = 'This is the blog Index';
ことができなくなります (チュートリアルの Web サイトには、これについてのより良いデモがあります)。基本的に私が求めているのは、どのように template.class をロード関数に移行するのですか?