gpt4 book ai didi

php - 什么时候应该实例化 Controller ?

转载 作者:搜寻专家 更新时间:2023-10-31 21:38:00 25 4
gpt4 key购买 nike

我正在构建一个 AJAX 网络应用程序,后端使用 PHP。我正在尝试设计一个路由系统,让我可以轻松地放入新页面,并让我专注于 Javascript。 PHP 将提供的实际页面很简单,只是本质上是 Javascript 图表容器的 View (使用 d3.js 构建)。因此,在我开始进行 AJAX 调用之前,我的 Controller 甚至不必与我的模型交互。

我是 OOP 的新手,尤其是后端。我一直在使用 Javascript 做一些工作,但我对将 OOP 与 MVC 结合并解决路由问题是全新的。我知道有一些模块/插件已经编写了路由类,但由于这个项目的后端部分非常简单——本质上,如何最好地在博客上提供“关于”页面——我喜欢借此机会自己好好学习一下。

我有一个 Controller :

<?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 的开头实例化我的 Controller :

<?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 对象的合适位置吗?

最佳答案

首先,您的架构面临一些重大问题。您需要一个路由器来处理用户请求的 URI,接下来您需要系统的初始化状态。创建 Controller 的通常方法是 extend 一个父类,然后在你的父类 __construct 方法中你可以初始化你的子 Controller ,但是,您的系统状态不佳。

这是我永远不会删除的黄金链接:

http://johnsquibb.com/tutorials/mvc-framework-in-1-hour-part-one

关于php - 什么时候应该实例化 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14635899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com