我正在构建一个AJAX Web应用程序,使用PHP作为我的后端。我试图设计一个路由系统,它可以让我轻松地删除新页面,并让我专注于Javascript。 PHP将提供的实际页面很简单,只是基本上为Javascript图表容器的视图(使用d3.js构建)。因此,我的控制器甚至不需要与我的模型进行交互,直到我开始进行AJAX调用。控制器什么时候应该实例化?
我是OOP的新手,尤其是后端。我一直在使用Javascript,但我是全新的OOP与MVC &解决路由问题。我知道那里有模块/插件,其中编写了路由类,但由于该项目的后端部分非常简单 - 本质上,如何最好地在博客上提供“关于”页面 - 我想借此机会自己彻底学习。
我有一个控制器:
<?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
对象吗?
你能解释一下多一点点的问题?它是什么样的应用程序? – ZanattMan