2013-01-31 2 views
3

저는 백 엔드 용 PHP를 사용하여 AJAX 웹 응용 프로그램을 구축하고 있습니다. 나는 쉽게 새 페이지를 놓을 수있는 라우팅 시스템을 디자인하려고 노력 중이며 자바 스크립트에 집중하겠습니다. PHP가 제공 할 실제 페이지는 단순한 것으로, 자바 스크립트 차트 (기본적으로 d3.js으로 작성)의 컨테이너 인 뷰입니다. 따라서 AJAX 호출을 만들기 전까지 컨트롤러가 내 모델과 상호 작용할 필요조차 없습니다.컨트롤러가 언제 인스턴스화되어야합니까?

저는 OOP를 처음 접했습니다. 특히 백엔드에서. 나는 자바 스크립트를 조금 해왔지만, MVC & 라우팅 문제를 해결하면서 OOP를 통합하는 것은 아주 새로운 것이다. 라우팅 클래스를 작성한 모듈/플러그인이 있다는 것을 알고 있지만이 프로젝트의 백 엔드 부분은 매우 간단합니다. 기본적으로 블로그의 '정보'페이지를 제공하는 것이 가장 좋습니다. 이 기회를 통해 철저히 배울 수 있습니다.

<?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의 자동 로더에 대해 조금 읽었습니다

<?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; 

} 

?> 

을하지만, 내가 좋아하는 것 처음부터 수동으로 내려야합니다. 왜냐하면 제가 기본을 확실히 이해하고 싶기 때문입니다.

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

관련 문제