我正在尝试为我的项目编写自己的小MVC框架,我可以直接进入并快速启动和运行,主要用于学习目的。每个请求都通过index.php
进行路由,其中包含以下代码:
<?php
// Run application
require 'application/app.php';
$app = new App();
$app->run();
这是我的应用程序类:
<?php
class App {
public function run() {
// Determine request path
$path = $_SERVER['REQUEST_URI'];
// Load routes
require_once 'routes.php';
// Match this request to a route
if(isset(Routes::$routes[$path])) {
} else {
// Use default route
$controller = Routes::$routes['/'][0];
$action = Routes::$routes['/'][1];
}
// Check if controller exists
if(file_exists('controllers/' . $controller . '.php')) {
// Include and instantiate controller
require_once 'controllers/' . $controller . '.php';
$controller = new $controller . 'Controller';
// Run method for this route
if(method_exists($controller, $action)) {
return $controller->$action();
} else {
die('Method ' . $action . ' missing in controller ' . $controller);
}
} else {
die('Controller ' . $controller . 'Controller missing');
}
}
}
这是我的路线档案:
<?php
class Routes {
public static $routes = array(
'/' => array('Pages', 'home')
);
}
当我尝试加载根目录(/
)时,我得到了这个:
Controller PagesController缺失
由于某种原因,file_exists
功能无法看到我的控制器。这是我的目录结构:
/application
/controllers
Pages.php
/models
/views
app.php
routes.php
因此,使用if(file_exists('controllers/' . $controller . '.php'))
中的app.php
,它应该能够找到controllers/Pages.php
,但它不能。{/ p>
任何人都知道如何解决这个问题?
答案 0 :(得分:2)
您正在使用包含的相对路径。随着应用程序的增长,它将成为一场噩梦。
我建议你
示例:
// Run application
define('ROOT', dirname(__FILE__) );
require ROOT . '/application/app.php';
$app = new App();
$app->run();
后来:
// Check if controller exists
if(file_exists(ROOT . '/application/controllers/' . $controller . '.php')) {
// Include and instantiate controller
require_once ROOT. '/application/controllers/' . $controller . '.php';
$controller = new $controller . 'Controller';