모델, 뷰 및 컨트롤러
MVC란 무엇인가요?
어플리케이션을 만들 때마다 적절한 파일을 쉽게 찾고 유지 관리하기 쉽도록 코드를 구성하는 방법을 찾아야합니다. 대부분의 웹 프레임워크와 마찬가지로 CodeIgniter는 MVC(Model, View, Controller) 패턴을 사용하여 파일을 구성합니다. 이렇게 하면 데이터, 프리젠테이션 및 어플리케이션의 흐름이 별도의 부분으로 유지됩니다. 각 요소의 정확한 역할에 대한 많은 견해가 있다는 것을 유념해야 하지만, 이 문서에서는 이에 대한 우리의 견해를 설명합니다. 다르게 생각하면 필요에 따라 각 조각을 사용하는 방법을 자유롭게 수정할 수 있습니다.
Models 어플리케이션의 데이터를 관리하고 어플리케이션이 필요로 할 수 있는 특별한 비즈니스 규칙을 시행하는 데 도움을 줍니다.
Views 논리가 거의없는 간단한 파일로 사용자에게 정보를 표시합니다.
Controllers 뷰(또는 뷰를 보는 사용자)와 데이터 사이에서 데이터를 정리하는 접착(glue) 코드 역할을 합니다.
기본적으로 컨트롤러와 모델은 특정 작업을 수행하는 클래스입니다. 그것들은 분명히 사용할 수 있는 유일한 클래스 유형은 아니지만 이 프레임워크가 사용되도록 설계된 방식의 핵심을 구성합니다. 이를 저장하기 위해 app 디렉토리에 지정된 디렉토리를 가지고 있지만, 네임스페이스가 제대로 지정되어 있으면 원하는 위치에 자유롭게 저장할 수 있습니다. 우리는 아래에서 그것에 대해 좀 더 자세히 논의할 것입니다.
이 세 가지 주요 구성 요소를 각각 자세히 살펴보겠습니다.
구성요소
뷰(View)
뷰는 가장 단순한 파일이며, 일반적으로 매우 적은 양의 PHP 코드를 가진 HTML입니다. PHP 코드는 매우 간단해야 하며, 보통 변수의 내용을 표시하거나, 일부 항목을 순환(looping)시켜 표(table)에 정보를 표시합니다.
컨트롤러는 표시할 데이터를 간단한 echo
호출로 표시 할 수 있는 변수에 담아 뷰에 전달합니다.
또한 뷰 내에서 다른 뷰를 표시할 수 있으므로 모든 페이지에 공통 머리글(header)이나 바닥글(footer)을 쉽게 표시할 수 있습니다.
뷰는 일반적으로 app/Views에 저장되지만, 어떤 방식으로 정리하지 않으면 관리하기 어려워질 수 있습니다.
CodeIgniter는 어떤 유형의 정리 방법도 강제하지 않지만, 경험상 각 컨트롤러에 대해 Views 디렉토리에 새 디렉토리를 작성하는 것이 좋은 방법입니다.
그런 다음 메소드 이름으로 뷰 이름을 지정하십시오. 이렇게하면 나중에 뷰를 찾기 쉽습니다.
예를 들어 사용자 프로필은 User
라는 컨트롤러와 profile
이라는 이름으로 나타낼 수 있습니다.
이 방법을 사용하여 뷰 파일을 app/Views/user/profile.php로 저장할 수 있습니다.
습관적으로 이 방법을 사용하여 뷰를 관리하면 좋을 것 입니다. 때로는 이와는 다른 방법으로 정리할 필요도 있을겁니다. 하지만 CodeIgniter가 파일을 찾기만 한다면 표시하는데 문제가 없기 때문에 별 문제가 되지 않을겁니다.
모델(Model)
모델의 역활은 어플리케이션에 대한 단일 유형의 데이터를 유지 관리하는 것입니다. 사용자, 블로그 게시물, 거래 등일 수 있습니다. 이 경우 모델은 데이터베이스에서 데이터를 가져 오거나, 넣을 때 비즈니스 규칙을 적용하는 것과, 데이터베이스에 데이터를 실제 저장하거나 검색합니다.
많은 개발자에게 어떤 비즈니스 규칙을 적용할지 결정하는 것은 혼란을 초래합니다. 이를 간단히 표현하면 데이터에 대한 제한이나 요구 사항이 모델에서 처리됨을 의미합니다. 여기에는 원시 데이터를 저장하기 전에 회사 표준에 맞게 정규화하거나 컨트롤러에 전달하기 전에 특정 방식으로 열을 형식화하는 것이 포함될 수 있습니다. 이러한 비즈니스 요구 사항을 모델로 유지하면 여러 컨트롤러에서 코드를 반복하지 않고 업데이트를 놓치는 실수를 줄일 수 있습니다.
모델은 일반적으로 app/Models에 저장되지만 필요에 따라 네임스페이스를 사용하여 그룹화 할 수 있습니다.
컨트롤러(Controller)
컨트롤러에는 몇 가지 다른 역할이 있습니다. 가장 분명한 것은 사용자로부터 입력을 받은 다음 처리 방법을 결정하는 것입니다. 이것은 종종 데이터를 저장하기 위해 모델로 데이터를 전달하거나 모델에서 데이터를 요청하여 뷰로 전달하여 표시하도록 요청하는 것과 필요한 경우 모델의 범위를 벗어난 특수 작업을 처리하기 위해 다른 유틸리티 클래스를 로드하는 것도 포함됩니다.
컨트롤러의 다른 역할은 HTTP 요청과 관련된 모든 것을 처리하는 것입니다 - 리디렉션, 인증, 웹 안전(safety), 인코딩 등. 요약하자면 컨트롤러는 사람들이 그 곳에 있을수 있게하고, 필요한 데이터를 그들이 사용할 수있는 형식으로 얻는 곳입니다.
컨트롤러는 일반적으로 /app/Controllers에 저장되지만 필요에 따라 네임스페이스를 사용하여 그룹화 할 수 있습니다.