PHP MVC 프레임워크 튜토리얼
⚡ 스마트 요약
PHP MVC 프레임워크는 모델, 뷰, 컨트롤러를 사용하여 애플리케이션의 데이터와 비즈니스 로직을 프레젠테이션과 분리하는 설계 방식을 채택하고 있습니다. CodeIgniter는 이러한 패턴을 실용화하여 PHP 개발자가 안전하고 유지 관리하기 쉬운 웹 애플리케이션을 더 빠르게 구축할 수 있도록 합니다.
PHP MVC 프레임워크란 무엇입니까?
PHP MVC는 애플리케이션 데이터와 비즈니스 로직(모델)을 프레젠테이션(뷰)에서 분리하는 애플리케이션 디자인 패턴입니다. MVC는 모델(Model), 뷰(View) 및 컨트롤러(Controller)를 나타냅니다.
컨트롤러는 모델과 뷰 사이를 중재합니다.
MVC 디자인 패턴을 자동차와 운전자로 생각해보세요.
자동차에는 운전자(조종사)가 앞쪽 교통 상황을 살피고, 앞쪽 상황에 따라 속도를 높이거나 줄이는(모델) 데 사용하는 앞유리(시야)가 있습니다.
다음으로, 이러한 패턴을 기반으로 구축된 프레임워크를 사용할 가치가 있는 이유를 살펴보겠습니다.
PHP MVC 프레임워크를 사용하는 이유는 무엇입니까?
PHP MVC 프레임워크는 다음과 같은 방식으로 복잡한 기술 작업을 간소화합니다.
- 모든 복잡한 구현 세부 사항 숨기기
- 우리가 애플리케이션을 구축하는 데 사용할 수 있는 표준 방법을 제공합니다.
- 데이터베이스 연결 및 사용자 입력 검증과 같은 기본 구현이 이미 부분적으로 완료되어 있으므로 개발자 생산성이 향상됩니다.
- 전문적인 코딩 표준 준수 장려
PHP MVC 디자인 패턴
이제 MVC 디자인 패턴의 각 구성 요소에 대해 간략하게 살펴보겠습니다.
모델 – 이 부분은 비즈니스 로직 및 애플리케이션 데이터와 관련이 있습니다. 데이터 검증을 수행하고, 데이터를 처리하고, 저장하는 데 사용할 수 있습니다. 데이터는 다음에서 가져올 수 있습니다.
- 플랫 파일
- 데이터베이스
- XML 문서
- 기타 유효한 데이터 소스.
제어 장치 – 이 부분은 사용자가 서버에 리소스를 요청하는 것을 처리하는 부분입니다.
예를 들어, 사용자가 요청할 때 URL …/index.php?products=list컨트롤러는 제품 모델을 로드하여 제품 데이터를 가져온 다음 결과를 목록 보기에 출력합니다.
간단히 말해서 컨트롤러는 요청된 리소스에 따라 모델과 뷰를 함께 연결합니다.
조회수 이 부분은 사용자에게 데이터를 표시하는 방법을 다룹니다. 일반적으로 HTML 페이지 형태로 제공됩니다.
PHP MVC 프레임워크의 유형
최고의 PHP 프레임워크를 선택하는 것은 어려운 일입니다.
MVC의 이점을 활용하기 위해 자체 프레임워크를 작성할 필요는 없습니다.
MVC 프레임워크가 작동하는 방식을 이해하려면 자체 MVC 관련 애플리케이션 디자인을 만들어 보아야 합니다.
MVC 프레임워크 작동 방식에 익숙해지면 성숙하고 이미 테스트된 프레임워크로 전환해야 합니다.
아래 표는 인기 있는 PHP 프레임워크 몇 가지와 각 프레임워크가 제공하는 기능을 간략하게 설명합니다.
| 뼈대 | 기술설명 |
|---|---|
|
|
PHP MVC 프레임워크 중 가장 인기 있는 프레임워크 중 하나이며, 현재 네 번째 주요 버전이 출시되었습니다.CodeIgniter 4)는 가볍고 학습 곡선이 짧습니다. 웹사이트와 애플리케이션을 빠르게 구축하는 데 도움이 되는 풍부한 라이브러리 세트를 제공합니다. 객체 지향 프로그래밍에 대한 지식이 부족한 사용자도 사용할 수 있습니다. Igniter로 구축된 애플리케이션은 다양한 기능을 제공합니다. Code점화기 포함 사항;
|
|
이는 계층적 모델-뷰-컨트롤러(HMVC) 구조를 기반으로 하는 안전하고 가벼운 프레임워크입니다. 참고 : Kohana는 2017년에 공식적으로 개발이 중단되었으며, 마지막 안정 버전은 3.3.6(2016년 7월)입니다. 커뮤니티 포크인 Koseven은 Kohana의 코드베이스를 이어받았습니다. Kohana를 사용했던 회사들은 다음과 같습니다. |
|
이 프레임워크는 Ruby on Rails를 모델로 삼아 만들어졌으며, 현재까지도 활발하게 유지보수되고 있습니다(버전 5.x). 소프트웨어 디자인 패턴, 설정보다 관례를 중시하는 접근 방식, ActiveRecord 등의 개념으로 잘 알려져 있습니다. CakePHP 전원이 공급되는 애플리케이션에는 다음이 포함됩니다. |
|
|
이는 강력한 프레임워크입니다.
개발에 이상적입니다ping 비즈니스 애플리케이션. 2020년, Zend Framework는 오픈 소스 Laminas 프로젝트로 전환되었습니다. Zend/Laminas 기반 애플리케이션은 다음과 같습니다.
Zend 프레임워크를 사용한 기업은 다음과 같습니다.
|
PHP MVC 프레임워크와 순수 PHP의 주요 차이점
프레임워크는 실제로 어떤 변화를 가져올까요? 순수 PHP는 완전한 자유를 주지만, 모든 프로젝트에서 라우팅, 유효성 검사, 데이터베이스 접근 등을 처음부터 다시 구현해야 하는 단점이 있습니다. PHP MVC 프레임워크는 이러한 반복적인 작업을 표준화하여 프로젝트와 팀 간에 코드 일관성을 유지하도록 도와줍니다.
| 아래 | 일반 PHP | PHP MVC 프레임워크 |
|---|---|---|
| Code 조직 | HTML, SQL 및 로직이 하나의 파일에 혼합되어 있습니다. | 모델, 뷰, 컨트롤러로 구분됩니다. |
| 데이터베이스 액세스 | 모든 페이지에 손으로 쓴 질문 | 내장 쿼리 빌더 또는 파라미터 바인딩을 지원하는 ORM |
| 보안 | 개발자는 모든 안전장치를 기억해야 합니다. | 입력 필터링, XSS 및 CSRF 보호 기능이 포함되어 있습니다. |
| 유지보수 | 변경 사항은 파일 전체에 예측할 수 없이 파급 효과를 미칩니다. | 각 레이어는 독립적으로 변경될 수 있습니다. |
💡 Tip 아래 설문조사처럼 먼저 간단한 PHP 프로젝트 하나를 만들어 보세요. 코드가 섞여 있는 환경에서 발생하는 문제점을 통해 MVC 분리의 가치를 명확히 알 수 있습니다.
여론조사 애플리케이션을 포팅하기 Code이그나이터
이번에 지도 시간우리는 PHP 기반 설문조사 애플리케이션을 개발했습니다. 여기서는 해당 코드를 다른 플랫폼으로 포팅하겠습니다. Code이그나이터
- 다운로드 최신 버전 Code그들의 점화기 웹 사이트를 방문 하십시오.
- Extrac압축된 파일의 내용을 웹 서버 디렉터리 내의 개발 디렉터리에 복사하세요. 이 강의에서는 폴더 이름을 ciopinionpoll로 지정하겠습니다.
- 찾아보기 URL http://localhost/ciopinionpoll/
The Code위의 Igniter 환영 페이지는 프레임워크가 올바르게 설치되었음을 확인시켜 줍니다. 이제 우리의 여론 조사 애플리케이션을 다른 프레임워크로 포팅해 보겠습니다. Code점화기. 우리 애플리케이션은 크게 세 가지 구성 요소로 나뉘었다는 것을 기억하세요.
- 프런트 컨트롤러 - 이 부분은 응답하는 부분입니다. URL 요청을 보내고 요청된 페이지를 반환합니다. 이 코드는 컨트롤러에 들어갑니다.
- 모델 – 이 코드는 데이터 요청에 응답하고 요청된 데이터를 반환합니다. 이 코드는 모델에 포함됩니다.
- 뷰 – 데이터 형식 지정 및 표시를 담당하는 코드입니다. 이 코드는 뷰에 들어갈 것입니다
데이터베이스 구성 설정
데이터베이스 연결을 구성하려면 다음 단계를 따르세요.
- ciopinionpoll 폴더를 찾아보세요
- 열기 데이터베이스.php 해당 파일은 application/config 디렉터리에 있습니다.
- 다음 코드 줄을 찾으세요
- 사용자 이름을 루트로 설정
- 비밀번호를 로컬 호스트 루트 비밀번호로 설정하세요.
- 데이터베이스 이름을 opinion_poll로 설정하세요. 이전 수업에서 생성한 데이터베이스를 사용할 예정입니다.
- 변경 사항을 저장하고 파일을 닫습니다.
모델 만들기
다음으로 CI_Model을 확장할 모델을 만들겠습니다. CI_Model은 다음의 일부입니다. CodeIgniter 라이브러리. 모델은 application/models 폴더에 있습니다. 의견_poll_model.php
<?php
class Opinion_poll_model extends CI_Model
{
public function __construct()
{
parent::__construct();
$this->load->database();
}
public function total_votes()
{
$query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries');
return $query->row()->choices_count;
}
public function get_results()
{
$libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
$table_rows = '';
for ($i = 1; $i < 5; $i++)
{
$query = $this->db->select('COUNT(choice) as choices_count')
->where('choice', $i)
->get('js_libraries');
$table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $query->row()->choices_count . "</b> votes</td></tr>";
}
return $table_rows;
}
public function add_vote($choice)
{
$ts = date("Y-m-d H:i:s");
$data = array('choice' => $choice, 'ts' => $ts);
$this->db->insert('js_libraries', $data);
}
}
?>
이리,
- "class Opinion_poll_model은 CI_Model을 확장합니다..."는 CI_Model을 확장하는 모델입니다.
- “parent::__construct();”는 CI_Model 생성자를 호출합니다.
- "$this->로드->데이터베이스();" 애플리케이션이 데이터베이스와 상호 작용할 수 있도록 데이터베이스 라이브러리를 로드합니다.
- “$this->db->”는 CodeIgniter의 활성 기록을 확인하세요. 링크 활성 레코드에 대한 자세한 내용은
컨트롤러 제작
이제 컨트롤러를 생성해 보겠습니다. 기본 컨트롤러를 사용하겠습니다. CodeIgniter 컨트롤러는 application/controllers/welcome.php에 있습니다. 해당 소스 코드를 다음 코드로 교체하십시오.
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('opinion_poll_model');
}
public function index() {
if ($this->input->post('submitbutton') && !$this->input->post('vote')) {
echo "<script>alert('You did not vote!');</script>";
}
if ($this->input->post('vote')) {
$this->opinion_poll_model->add_vote($this->input->post('vote'));
$data['total_votes'] = $this->opinion_poll_model->total_votes();
$data['rows'] = $this->opinion_poll_model->get_results();
$this->load->view('results', $data);
} else {
$this->load->view('opinion_poll_form');
}
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
?>
이리,
- "if (!definated('BASEPATH'))exit('직접 스크립트 액세스가 허용되지 않습니다.');" 사용자가 컨트롤러 클래스에 직접 액세스하지 못하도록 보장
- "class Welcome은 CI_Controller를 확장합니다..." 컨트롤러는 CI_Controller 클래스를 확장합니다.
- “공개 함수 __construct()”는 CI_Controller 클래스의 생성자 메서드를 호출하고 Opinion_poll_model 모델을 로드합니다.
- “public function index()…”는 index.php에 해당하는 함수입니다. 이 함수는 다음을 사용합니다. CodeIgniter의 입력 클래스를 사용하여 투표가 제출되었는지 확인하고, 제출된 투표를 데이터베이스에 추가한 후 결과를 표시합니다. 입력 클래스의 `post` 배열이 비어 있으면 투표 페이지를 로드합니다.
- “$this->input->post('…')”는 CodeIgniter 입력 클래스로, 전역 변수 $_POST의 내용을 가져옵니다.
- "$this->opinion_poll_model->add_vote($this->input->post('vote'))"는 모델의 add_vote 메소드를 호출하여 데이터베이스에 투표를 추가합니다.
뷰 만들기
이전 예제에서 투표용 HTML 페이지와 결과 표시용 HTML 페이지, 이렇게 두 개의 HTML 페이지가 있었던 것을 기억하시죠? 이제 동일한 HTML 코드를 약간 수정하여 뷰를 생성해 보겠습니다. application/views 디렉터리에 다음 파일들을 생성하세요.
opinion_poll_form.php
<html>
<head>
<title>
JavaScript Libraries - Opinion Poll
</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<form method="POST" action="index.php">
<p>
<input type="radio" name="vote" value="1" /> JQuery
<br />
<input type="radio" name="vote" value="2" /> MooTools
<br />
<input type="radio" name="vote" value="3" /> YUI Library
<br />
<input type="radio" name="vote" value="4" /> Glow </p>
<p>
<input type="submit" name="submitbutton" value="OK" />
</p>
</form>
</body>
</html>
이제 결과 페이지를 만들어 보겠습니다. results.php
<html>
<head>
<title>JavaScript Libraries - Opinion Poll Results</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll Results</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p>
<p><table><tr><td>
<?php print($rows); ?>
</tr></td></table></p>
<p><a href="#">Return to voting page</a></p>
</body>
</html>
응용 프로그램 테스트
애플리케이션의 루트 디렉토리가 ciopinionpoll이라고 가정하면, 다음 경로로 이동하세요. http://localhost/ciopinionpoll/
위의 투표 페이지는 opinion_poll_form 보기에서 가져온 것입니다. 옵션을 선택하지 않고 확인을 클릭하면 다음과 같은 경고 메시지가 표시됩니다.
마음에 드는 도서관에 투표하신 후 확인을 클릭하세요. 그러면 결과 페이지가 나타납니다.
이는 세 계층이 서로 협력하여 작동함을 확인시켜 줍니다. 컨트롤러는 투표를 수신하고, 모델은 이를 저장하고 집계하며, 뷰는 총합을 표시합니다.









