> 백엔드 개발 > PHP 튜토리얼 > Yii 프레임워크 공식 가이드 시리즈 15 - 기본: 모범 MVC 사례

Yii 프레임워크 공식 가이드 시리즈 15 - 기본: 모범 MVC 사례

黄舟
풀어 주다: 2023-03-05 17:50:02
원래의
985명이 탐색했습니다.



MVC(Model-View-Controller)는 거의 모든 웹 개발자에게 잘 알려져 있지만 실제 애플리케이션 개발에서는 어떻게 사용됩니까? MVC 사용은 여전히 ​​많은 사람들에게 문제를 안겨줍니다. MC의 핵심 아이디어는 코드 재사용성과 로직과 뷰의 분리입니다. 이 섹션에서는 Yii 프레임워크를 사용할 때 MVC를 더 잘 사용하여 애플리케이션을 개발하는 방법을 설명합니다.

더 나은 설명을 위해 웹 애플리케이션에 다음 하위 애플리케이션이 포함되어 있다고 가정합니다.

  • 프런트 엔드: 최종 사용자를 위한 공개 웹 사이트 인터페이스

  • 백엔드: 전체 웹 사이트 애플리케이션을 관리하기 위한 관리 기능을 제공하며 일반적으로 관리자만 액세스하고 사용할 수 있습니다.

  • 콘솔: 터미널 창에서 실행 가능 콘솔 명령이 포함된 애플리케이션

  • 웹 API: 제3자가 이 애플리케이션과 상호 작용할 수 있는 인터페이스를 제공합니다.

이러한 하위 애플리케이션은 모듈 형태로 구현될 수도 있고, 다른 하위 애플리케이션과 코드를 공유하는 Yii 애플리케이션일 수도 있습니다.

1. 모델

모델은 웹 애플리케이션의 기본 데이터 구조를 나타내는 경우가 많습니다. 예를 들어 LoginForm 모델은 다음과 같습니다. 애플리케이션의 프런트엔드와 백엔드 모두에서 사용됩니다. News 모델은 콘솔 명령, 웹 API 및 애플리케이션의 프런트엔드/백엔드에서 사용될 수 있습니다.

  • 특정 데이터를 나타내는 속성을 포함해야 합니다.

  • 표시된 데이터가 설계 요구 사항을 충족하는지 확인하기 위한 비즈니스 논리(예: 유효성 검사 규칙)를 포함해야 합니다.

  • 데이터 조작을 위한 코드가 포함될 수 있습니다. 예를 들어, SearchForm 모델에는 검색 입력 데이터를 나타내는 것 외에도 실제 검색을 구현하는 search 메소드가 포함될 수 있습니다.

때때로 위의 마지막 규칙을 따르면 단일 클래스에 너무 많은 코드가 포함되어 모델이 매우 뚱뚱해질 수 있습니다. 또한 포함된 코드가 다른 용도로 사용되는 경우 모델을 유지 관리하기가 어려워질 수도 있습니다. 🎜> 모델에는 프런트 엔드에서만 사용되는  News라는 메서드가 포함될 수 있으며, 백엔드에서만 사용되는  getLatestNews라는 메서드가 포함될 수도 있습니다. 이는 중소형 애플리케이션에 적합할 수 있습니다. 대규모 애플리케이션의 경우 다음 전략을 사용하여 모델을 보다 쉽게 ​​유지 관리할 수 있습니다.getDeletedNews

  • 다른 하위 애플리케이션에서 공유하는 코드만 포함하는

    모델 클래스를 정의합니다(예: front end, back end);NewsBase

  • 각 하위 애플리케이션에서

    에서 확장하여 News 모델을 정의합니다. NewsBase 모델에서.News

따라서 위의 예에서 이 전략을 사용하려면 프런트엔드 애플리케이션에 다음 항목만 포함하는

모델을 추가합니다. News 메서드를 사용하고 getLatestNews 메서드만 포함하는 또 다른 News 모델을 백엔드 애플리케이션에 추가합니다.getDeletedNews

일반적으로 모델에는 최종 사용자를 직접 처리하는 논리가 포함되어서는 안 됩니다. 보다 구체적으로, 모델

  • , $_GET 또는 최종 사용자 요청과 직접적으로 연결된 기타 유사한 변수를 사용해서는 안 됩니다. 사용자 요청을 나타내기 위해 이러한 변수를 사용할 수 없는 완전히 다른 하위 애플리케이션(예: 단위 테스트, 웹 API)은 컨트롤러에서 처리해야 합니다.$_POST

  • HTML이나 기타 표시 코드를 삽입하지 말아야 합니다. 표시 코드는 최종 사용자 요구 사항에 따라 다르기 때문에(예: 프런트 엔드와 백 엔드는 완전히 다른 형식으로 뉴스의 세부 정보를 표시할 수 있음) 뷰에서 관리하는 것이 좋습니다.

2. 뷰

뷰는 일반적으로 최종 사용자가 원하는 형식으로 모델을 제시하는 역할을 합니다.

  • 주로 HTML과 같은 표현 코드와 데이터를 탐색하고 형식을 지정하고 렌더링하는 간단한 PHP 코드를 포함합니다.

  • 명시적인 DB 쿼리를 수행하는 코드는 포함하지 않아야 합니다. 이러한 코드는 모델에 배치하는 것이 좋습니다. .

  • , $_GET 또는 최종 사용자 요청을 나타내는 기타 유사한 변수에 대한 직접 액세스를 피해야 합니다. 이는 컨트롤러의 작업에 초점을 맞춰야 합니다. 컨트롤러 및/또는 모델이 제공한 데이터의 표시 및 레이아웃을 수행하지만 요청 변수나 데이터베이스에 직접 액세스하려고 시도하지는 않습니다.$_POST

  • 컨트롤러와 모델의 속성과 메서드에 직접 액세스할 수 있습니다. 그러나 이는 프레젠테이션 목적으로만 수행되어야 합니다.

뷰는 다양한 방법으로 재사용할 수 있습니다.

  • 레이아웃: 공통 프레젠테이션 영역 (예: 페이지 머리글, 바닥글)을 레이아웃 보기에 넣을 수 있습니다.

  • 부분 보기: 부분 보기(레이아웃으로 장식되지 않은 보기)를 사용하여 표현 코드 조각을 재사용합니다. 예를 들어 모델 생성 및 업데이트 페이지 모두에 사용되는 모델 입력 양식을 렌더링하기 위해 _form.php 부분 보기를 사용합니다.

  • 위젯: 표시하는 데 많은 로직이 필요한 경우 부분 보기인 경우, 부분 보기는 클래스 파일이 이 논리를 포함하기에 가장 적합한 위치인 위젯으로 바뀔 수 있습니다. 많은 HTML 마크업을 생성하는 위젯의 경우 마크업을 포함하기 위해 해당 위젯과 관련된 보기 파일을 사용하는 것이 가장 좋습니다.

  • 도우미 클래스: 보기에서는 종종 일부 코드 조각이 필요합니다. 데이터 형식 지정이나 HTML 태그 생성과 같은 작은 작업을 수행합니다. 이 코드를 뷰 파일에 직접 배치하는 것보다 더 나은 접근 방식은 이러한 모든 코드 조각을 뷰 도우미 클래스에 배치하는 것입니다. 그런 다음 보기 파일에서 도우미 클래스를 사용하세요. Yii는 이러한 접근 방식의 예를 제공합니다. Yii에는 일반적으로 사용되는 HTML 코드를 생성할 수 있는 강력한 CHtml 도우미 클래스가 있습니다. 도우미 클래스는 명시적인 클래스 포함 없이 사용할 수 있도록 자동 로드 가능한 디렉터리에 배치될 수 있습니다.

3. 控system器

컨트롤러는 모델, 뷰 및 기타 구성 요소를 실행 가능한 애플리케이션에 함께 묶는 접착제입니다. 컨트롤러는 최종 사용자 요청을 직접 처리할 책임이 있습니다. 따라서 컨트롤러

  • $_GET, $_POST 및 사용자 요청을 나타내는 기타 PHP 변수에 액세스할 수 있습니다.

  • 모델 인스턴스를 생성하고 수명주기를 관리합니다. 예를 들어 일반적인 모델 업데이트 작업에서 컨트롤러는 먼저 모델 인스턴스를 생성할 수 있습니다. 그런 다음 $_POST의 사용자 입력으로 모델을 채웁니다. 모델을 성공적으로 저장한 후 컨트롤러는 사용자 브라우저를 모델 세부 정보 페이지로 리디렉션할 수 있습니다. 모델을 저장하는 실제 구현은 컨트롤러가 아닌 모델에 있어야 합니다.

  • 임베디드 SQL 문을 포함하지 않아야 하며 모델에 보관하는 것이 좋습니다.

  • HTML이나 기타 표시용 마크업을 포함하지 않아야 합니다. 이는 뷰에 보관하는 것이 더 좋습니다.

잘 설계된 MVC 애플리케이션에서 컨트롤러는 매우 얇아서 수십 줄의 코드만 포함하는 경우가 많습니다. 모델은 데이터를 표현하고 조작하는 대부분의 코드를 포함하고 있어 매우 뚱뚱합니다. 이는 모델이 나타내는 데이터 구조와 비즈니스 논리가 일반적으로 특정 애플리케이션에 매우 구체적이고 특정 애플리케이션 요구 사항을 충족하기 위해 크게 사용자 정의해야 하기 때문입니다. 컨트롤러 로직은 애플리케이션 전체에서 유사한 패턴을 따르는 경우가 많으므로 기본 프레임워크나 기본 클래스에 의해 단순화될 수 있습니다.

以上就是Yii框架官方指南系列15——基础知识:最佳MVC实践的内容,更多相关内容请关注PHP中文网(www.php.cn)!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿