본문 바로가기
개발/PHP

MVC모델을 적용한 블로그(게시판) 만들기 - 2. Controller

by 똘똘이박사 2018. 6. 26.

PHP MVC 모델을 적용한 블로그 만들기




2. Controller


각 요구사항의 첫번째 내용을 확인했다면

이제 두번째로 세부적인 기능을 구현할 차례 입니다.

즉, URL의 두번째 인자를 분석하여 각각의 기능을 수행할 수 있도록 기능을 구현하는 것입니다.



Controller


각각의 메뉴에 해당하는 컨트롤러(HomeController, BoardController) 들은 모두 Controller 를 상속 받아 작성을 하였습니다.

따라서 각 Controller 의 모태가 될 Controller class 를 먼저 작성해야 합니다.

이 Controller class는 두번째 인자 값을 기준으로 필요한 기능을 호출하는 역활을 합니다.



application/controllers/Controller.php


<?php

namespace application\controllers;


class Controller

{

    public function __construct($menu, $action, $category, $idx, $pageNo)

    {

        if (!file_exists(_ROOT.'/application/models/'.$menu.'Model.php')) {

            var_dump('Model Class not found.(application/models/'.$menu.'Model.php)');

            exit();

        }

        $this->$action($category, $idx, $pageNo);

    }

}



application.php 의 마지막에서 HomeController 를 호출하게 되면

application/controllers/HomeController.php 의 HomeController 객체를 생성하게 되는데

HomeController class 는 application/controller/Controller.php 의 Controller class 를 상속받은 클래스 입니다.


Controller class에는 생성자 하나만 정의 되어 있습니다.

이 생성자는 HomeController 객체 생성시 넘겨준 인자를 받아 필요한 기능(method)을 호출합니다.

HomeController 에는 이렇게 각각의 기능에 맞는 method를 구현합니다.

우선은 블로그의 게시판 목록 호출에 필요한 화면은 index 로 구현 하도록 하겠습니다.


application/controllers/BoardController.php


<?php

namespace application\controllers;


class BoardController extends Controller

{

    public function index($category, $idx, $pageNo)

    {

        $model = new \application\models\BoardModel();

        $list = $model->selectList($category, $idx, $pageNo);


        require_once 'application/views/board/index.php';

    }

}

 

현재는 목록을 조회하는 메소드 하나만 정의하여 놓았습니다.

(남아 있는 기능은 앞으로 기능을 계속 추가해 가면서 추가할 계획 입니다.)


index method 에서는 DB에 접속할 모델 객체를 불러 옵니다.

모델 객체 역시 Controller 과 마찬가지로 각 메뉴에 대응하는 클래스 들이 존재하도록 구성되어 있습니다.


BoardModel의 객체를 생성한 후 selectList() 메소드를 호출하여

게시판의 목록 데이터를 $list 에 저장 합니다.


그리고 게시판 목록 화면(application/views/board/index.php)을 불러와서 게시판 목록을 출려하게 됩니다.



반응형