2. 팔콘에서 mvc 생성 의미 (Model, View, Controller)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  RSS 방지선  ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------





일단, MVC 는 Model, View, Controller의 조합으로 이루어진 웹어플리케이션 모델이다. 

팔콘도 MVC 모델로 이루어져 있다.



팔콘에서 처음에 프로젝트를 생성한다. 

프로젝트가 생성되면, 해당 프로젝트 안으로 이동하여 phalcon 명령어를 사용할 수 있다.

명렁어는 아래와 같다.

phalcon project 프로젝트이름




Model 은 데이터베이스와 연계되어 생성된다. 명령어는 아래와 같다.

여기서 중요한 것은, app\config\config.php 파일에서, 사용할 DB정보를 미리 지정해줘야 한다는 것이다. 만약 잘못된 정보를 넣어두면 에러메시지가 나오게 될 것이다.

phalcon model DB테이블이름




성공적으로 Model 을 하나 생성하게 되었다면, 

해당 파일은 app\models\테이블이름.php 로 생성되어져 있을 것이다.

여기서 중요한 것은, 팔콘의 모델을 생성할때 명명법은 테이블이름.php 로 자동생성된다는 것과, '파스칼' 표기법을 따른 다는 것이다.




파스칼 표기법이란?

 - 클래스, 열거형, 이벤트, 함수 이름 표기

 - 변수명이 대문자로 시작함

 - 복합어일 경우 중간에서 시작하는 새로운 단어는 대문자로 표기

 - 예제) UserProfile, Infomation, TestUnit, UserDetailEmail


만약, phalcon model user_info 명령어로 모델을 만들게 된다면,

만들어진 모델파일의 이름은 UserInfo.php 로 생성될 것이다.





Controller 는 Model 과 View 를 중개해주는 역할을 맡는다.

Model 에서 데이터를 가져온다면, 그 데이터를 가공하여, View 에게 전달해준다.

Controller 를 생성하는 명령어는 아래와 같다.

phalcon controller 이름


성공적으로 Controller 를 하나 생성하게 되었다면,

해당 파일은 app\controllers\이름Controller.php 로 생성되어져 있을 것이다.

여기서 Controller 는 무조건 이름뒤에 접미어로 Controller 가 붙게 되어있다.

또한 Model 과 마찬가지로 '파스칼' 표기법을 따른다.





View 는 사용자가 최종적으로 보는 화면을 나타낸다. 

View 는 팔콘 명령어로 생성하는 것이 아닌, 직접 폴더구조에 생성해줘야 한다.

생성할 위치는 app\views\뷰이름\index.volt 또는

생성할 위치는 app\views\뷰이름\index.phtml 이다.


View 는 확장자로 volt 또는 phtml 만 사용하도록 한다.




1. 그렇다면, 처음 생성되는 index 페이지말고, 다른 페이지를 하나 만들어보도록 하자.

 - 일단 기능없이 페이지 하나만 보여주고 싶다. 어떻게 해야 할까?

 - http://localhost 로 접속하게되면, 프로젝트 생성시 자동생성된 화면을 보여준다.

 - http://localhost/board 페이지를 일단 보여주게 하고 싶다.

 - 간단하다, Controller 만 먼저 생성해 주면 된다.

 - phalcon controller board 로 생성해준다.

 - http://localhost/board 에 접속하게 되면 에러가 나지 않는 빈화면을 볼 수 있다.

 - 그렇다면 간단하게, 'hello world' 를 화면에 보여줘보자.

 - app\controllers\BoardController.php 의 내용을 아래와 같이 바꾸어 주자.

<?php

class BoardController extends \Phalcon\Mvc\Controller
{

public function indexAction()
{
echo "hello world";
}

}


 - 그리고 나서 다시 화면을 확인해보면 hello world 라고 출력되어져 있을 것이다.

 - 그렇다면 여기서 view 파일을 새로 만들어줘보자.

 - 만들어야 할 폴더는 app\views\board 이고,

 - 만들어야 할 파일은 app\views\board\index.phtml 이다.

 - 그리고 만든 index.phtml 을 아래와 같이 수정해주자.


hello world this is view file<p>


 - 그리고나서 다시 localhost/board 에 접속해보자.

 - echo 로 출력하던 hello world 는 보이지 않고, 새로만든 index.phtml 화면이 보인다.

 - 자, 그렇다면 왜 그럴까?

 - BoardController 파일에서 기본적으로 생성된 indexAction() 함수는 Controller 와 이름이 같은 폴더를 Views 폴더내에서 찾아간다.

 - 그리고 Action 앞에붙은 index 와 일치하는 파일을 찾아서 화면에 보여주는 것이다.

 - 만약 index.phtml 파일을 indexa.phtml 이라는 이름으로 바꾸면, 다시 hello world 만 화면에 보여주는 것을 확인할 수 있을 것이다.


 - 그러면 하나 궁금증이 생긴다.

 - BoardController.php 파일에서 function 이름만 맞추어 바꾸어주면 되지 않을까?

 - 바꾸어 실행해본다. 에러가 날 것이다.

 - Action 'index' was not found on handler 'board'

 - index Action 을 찾을수 없다, handler board (BoardController.php) 에서.

 - indexAction() 함수는 무조건 있어야 하는 기본함수인걸 알 수가 있다.


 - 하지만 나는 app\views\board\indexa.phtml 을 보여주고 싶다.

 - 어떻게 해야 할까? 

 - 알아본 바, Controller 단에서만 처리는 불가능하다.

 - BoardController -> view(index.phtml) -> BoardController -> view(indexa.phtml)

 - 위 순서로만 가능한 것 같다. 그리고 위와 같은 과정이 MVC 모델에 적합하다고 한다.


 - 해보자.

 - app\controllers\BoardController.php 는 아래와 같다.

<?php

class BoardController extends \Phalcon\Mvc\Controller
{

public function indexAction()
{
return $this->dispatcher->forward(array(
'action' => 'indexa',
'params' => array('controll ok')
));
}

public function indexaAction($text)
{
$text = $text." indexaAction ";
$this->view->message = $text;
}
}



 - app\views\board\index.phtml 은 아래와 같다.


hello i'm index.phtml


 - app\views\board\indexa.phtml 은 아래와 같다.


hello world this is view file (indexa.phtml) <p>

<?php
echo $message;
?>


 - 그리고 localhost/board 에 접속하게 되면 아래와같은화면을 확인할 수 있다.

 - 훌륭하게 리턴시켰다.




2. 그렇다면, 웹구조를 아무래도 신경써서 만들어야겠다는 생각이 든다.

 - localhost -> localhost/channel 로 자동으로 





'PHALCON' 카테고리의 다른 글

1. 팔콘 프로젝트 생성시, 기본 생성되는 파일구조  (0) 2018.12.20

댓글

Designed by JB FACTORY