我目前正在研究一个迷你“框架”,但遇到了一些困难。我尝试这样做是为了加强我对大多数 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";
}
}
所以我想做的是用 FrontController 扩展 BaseController。我认为扩展 BaseController 可以让我向整个应用程序添加通用功能。问题是我不确定如何正确执行此操作。我知道我需要以某种方式将 BaseController.php '要求'到 FrontController.php 中,但我已经看到了许多不同的方法,我想知道哪种方法最正确。
我尝试过的只是添加'require_once(“/application/BaseController.php”);' 到 FrontController.php 的顶部,然后扩展 FrontController 类,但这不起作用(空白页),从我读过的内容来看,这不是最好的方法。
我阅读了 __autoload() 但我不明白如何有效地使用它。我只是把它放在我的 FrontController.php 文件的顶部,然后扩展我的类吗?
所以,总而言之,我想用我的 BaseController 扩展我的 FrontController 类(以及其他未来的类,必要时)。我只是想要一些关于如何有效完成这项任务的建议。甚至有可能我的想法是倒退的,如果是这样,请告诉我!!