2013-01-31 38 views
3

我正在构建一个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对象吗?

+0

你能解释一下多一点点的问题?它是什么样的应用程序? – ZanattMan

回答

1

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

这是一个黄金的链接,我从来不删除:

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

+0

不幸的是,你的“黄金链接”包含非常可怕的做法和建议。另外,它里面没有MVC。只有另一个类似Rails的混乱。 –

+0

我会喜欢这里的一些指导。我似乎无法找到关于这些东西的确切信息来源。 –

+0

@tereško,这篇文章是相当古老的,但有关于完成MVC项目的良好做法。控制器部分是一个很好解释的部分,对于初学者来说,它确实有一些好东西。当然,现代的MVC与旧的MVC有很大不同,但这是学习东西的问题。 – MahanGM

相关问题