시작하기: MVC 패턴


ThinkPHP6 시작하기

  • ThinkPHP는 기존 MVC(Model-View-Controller) 모드와 인기 있는 MVVM(Model-View-ViewModel)의 애플리케이션 개발을 지원합니다. modeModel-View-Controller)模式以及流行的MVVM(Model-View-ViewModel)模式的应用开发

一、MVC

  • MVC 软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller

  • 1 MVC

MVC 소프트웨어 시스템은 모델(Model), 뷰(View) 및 컨트롤러()의 세 가지 기본 부분으로 나뉩니다. > 컨트롤러)

ThinkPHP는 일반적인 MVC 아키텍처

컨트롤러 - 요청 전달 및 처리를 담당합니다. mvc.gif

View - 인터페이스 디자이너가 그래픽 인터페이스 디자인.

모델 - 프로그래머는 프로그램이 가져야 할 기능(알고리즘 구현 등)을 작성하고, 데이터베이스 전문가는 데이터 관리 및 데이터베이스 설계(특정 기능 구현 가능)를 수행합니다.
2. 단일 애플리케이션 모드 접근

프로젝트 접근 경로: www.xxx.com/index.php/index/index

index.php 항목 파일

index 컨트롤러

index 작업 p APP 애플리케이션 디렉토리

─ CONTROLLLER 컨트롤러 디렉토리

─ 모델 모델 디렉토리

│ ├ ─ ... 더 많은 유형의 라이브러리 디렉토리

│ ├─Common.php 공용 함수 파일

│ └─event.php 이벤트 정의 파일

├─config 구성 디렉터리

│ ├─app.php 애플리케이션 구성

│ ├─cache.php 캐시 구성

│ ├─ console.php 콘솔 구성

│ ├─cookie.php 쿠키 구성

│ ├─database.php 데이터베이스 구성

│ ├─filesystem.php 파일 디스크 구성

│ ├─lang.php 다중 언어 구성

│ ├─log.php │ 로그 구성

│ ├ ─middleware.php 미들웨어 구성

│ ├─route.php URL 및 라우팅 구성

│ ├─session.php 세션 구성

│ ├─trace.php 추적 구성

│ └─view.php 보기 구성

├─view 디렉토리 보기

🎜├─route 경로 정의 디렉토리 🎜

│ ├─route.php 경로 정의 파일

│ └─ ...

├─public 항목 파일

│ ├─router.php 빠른 테스트 파일

│ └─.htaccess Apache 재작성에 사용됩니다.

├─extend 확장 클래스 라이브러리 디렉토리

├─runtime 애플리케이션 런타임 디렉토리(쓰기 가능, 사용자 정의 가능)

├─ 공급업체 Composer 클래스 라이브러리 디렉토리

├─.example.env 환경 변수 예제 파일

├─ Composer.json 작곡가 정의 파일

├─LICENSE.txt 권한 설명 파일

├─README.md README 파일

├─ think                                                          > 출력), 다른 템플릿을 사용해야 하는 경우

ThinkPHP6에는 ThinkTemplate 템플릿 엔진이라는 독립적인 템플릿 세트가 있습니다.

think-템플릿 템플릿 엔진을 사용하려면 think-view를 설치해야 합니다.
    composer require topthink/think-view
  • thinkView类配合视图驱动(也即模板引擎驱动)类一起完成,新版仅内置了PHP原生模板引擎(主要用于内置的异常页面输出),如果需要使用其它的模板引擎需要单独安装相应的模板引擎扩展

ThinkPHP6已独立出一套模版,命名为:ThinkTemplate模板引擎;

使用think-template模板引擎,需安装think-view;

composer require topthink/think-view

  • 视图目录可以在根目录,也可以在app应用目录

四、模版渲染

  • 要使用View,必须先引入 thinkfacadeView

  • 뷰 디렉터리는 루트 디렉터리나 앱 애플리케이션 디렉터리에 있을 수 있습니다.
  • 4. 템플릿 렌더링

View를 사용하려면 먼저 페이지를 렌더링하기 위한 thinkfacadeView 파사드 클래스

fetch 메소드를 소개합니다

매개변수: 정적 페이지의 경로, 기본 해당 정적 페이지

컨트롤러 코드

<? php

namespace appcontroller;

use thinkfacadeView;

class Index{

Public function index(){

} return View::fetch();

}

}
  • 코드 보기

  • 참고: Index 클래스는 view
  • 아래의 디렉터리에 해당합니다. 참고: index 메서드는 view

  • 5 아래 디렉터리의 정적 파일에 해당합니다. 템플릿 변수

할당 메서드 할당은 전역 변수 할당

에 속합니다. 템플릿 출력 { $name}

controller code

🎜namespace appcontroller;🎜🎜use thinkfacadeView;🎜🎜class Index{🎜🎜 public function index(){🎜🎜 // 템플릿 변수 할당🎜

       보기::할당('이름','Ouyang Ke');

         보기::할당('email','oyk@php.cn') [

'이름' = & gt; ,

'이메일' = & gt;'oyk@php.cn'

])

}

}

코드 보기

<!DOCTYPE html>

<html>

<head>

  <meta charset="UTF-8"> ;

< title>ThinkPHP6</title>

</head>

<body>

이름: {$name}

<br>

이메일: {$email}

</body&g t;

</html>

6. 항목

공용 디렉토리는 웹에서 액세스할 수 있는 유일한 디렉토리입니다

리소스 파일을

에 넣습니다.
  • 항목 파일, 기본값은 index.php
  • public/static

  • 7. 예제

html 페이지를 ThinkPHP 프레임워크에 넣기

12870f3d5e20e2e356baf864a59c6ee.png

이 페이지 정적 파일입니다.

  • <!DOCTYPE html>
  • <html>

    < head>
<title>목록 페이지</title>

<link rel="stylesheet" 유형 ="text/css" href="layui/css/layui.css">

<script type="text/javascript" src="layui/layui.js"></script>

< ;style type="text/css">

.header{width:100%;height: 50px ;line-height: 50px;ground: #2e6da4;color:#ffffff;}

.title{margin-left : 20px;글꼴 크기: 20px;}

.userinfo{float: 오른쪽;여백-오른쪽: 10px ;}

.userinfo a{color:#ffffff;}

.menu{너비: 200px;배경:# 333744;위치:절대;}

.main{위치: 절대;왼쪽:200px;오른쪽:0px; }

.layui-collapse{border: none;}

.layui-colla-item{border -top:none;}

.layui-colla-title{배경:#42485b;색상:#ffffff ;}

        .layui-colla-content{border-top:none;padding:0px;}


        .content 범위{배경: #009688;여백 왼쪽: 30px;padding: 10px;color:#ffffff;}

        .content div{border-bottom: solid 2px #009688;margin-top: 8px;}

        .content 버튼{float: right;margin-top: -5px;}

    </style>

< /head>

<body>

    <div>

        <span><span style="font-size: 20px;">XXX</span>--后台管理系统</span> ;

        <span>【欧阳克】<span><a href="javascript:;">退출</a></span></span>

    </div>

    <div id="menu">

        <divlay-accordion>

            <div>

                <h2>商城管리< /h2>

                <div class="layui- colla-contentlayui-show">

                    <ul class="layui-navlayui-nav-tree"lay-filter="test">

                        <li><a href="list.html ">商品列表</a></li>

                        <li><a href="list.html">商品列表</a></li>

                       <li> ;<a href="list.html">商product列表</a></li>

                        <li><a href="list.html">商product列表</a>

                    </ul>

                </div>

            </div>> "> 상품 목록</a></li>

                                                                          lt;li> ;< a href="list.html">제품 목록</a></li>

                                                                                            div>

                                               

                            >                                              <a href="list.html"> ;제품 목록</li>

                                                 ;/li>

                   ~ >                                                    ;

        </div>

    </div>

    <div style="padding:10px;">

        <div>

            <span> ;商品列表</span>

            <div></div>

        </div>

                                                                        번째> > >                     lt;/td>

                                                                                >                                        드롭 숄더 소매 도톰한 스웨트 BF 스타일 ~ <td>2019-12-12< /td>

                                                                                                            d>2</td> 화려한 울 코트의 새로운 여성 기질 슈트 칼라 & lt;/td & gt;

& lt; td & gt; ;

& lt; td & gt;ㅋㅋㅋ >                     새 여성복의 대비되는 울 코트 & lt;/td & gt; & lt; td & gt; gt; 699 & lt;/td & lt; td & gt; 열기 & lt;/ td>

                                                                        > 겨울 의류 2019 새로운 스타일의 여성 정장 칼라 대비 컬러 울 코트 코트 td>

                                                                                                    </td> ;

                                                                                           ~ >                                               td>닫기</td>

ㅋㅋㅋ >                         새 여성복의 대비되는 울 코트 & lt;/td & gt;

& lt;/TD & gt; gt; 699 & lt;/td & lt; td & gt; 열기 & lt;/ td>

                                      ~                         </table>;

</body>

</html>

<script>

layui.use(['element','layer','laypage'], function(){

  var 요소 = layui.element;

var laypage = layui.laypage;

$ = layui.jquery;

layer = layui.layer; documentElement.clientHeight - 50;

$('#menu').height(height);

}

</script>

컨트롤러 코드, 이 데이터는 테스트 데이터이며 나중에 데이터베이스에서 읽혀집니다.

namespace appcontroller;

use thinkfacadeView;

class Index{

  public function index(){

                                                   ~ ~ ~ ~ ~ ~                  '제목' = >> ~                                                                                                     사용자 목록',
ㅋㅋㅋ     '제목' => '장바구니',

                                                                 '제목' => 사용자 주소',                                                                                                       > ~ ~ ~ '제목' = > '개인 센터'

                                                                                   '제목'

'제목' => '왼쪽 메뉴 모음',

                                                                                                                                                                ㅋㅋㅋ 긴팔 살구탑 후드 루즈한 자수 아트 드롭숄더 소매 두꺼운 스웨트셔츠 BF style',           '고양이' => '여성의류',

            '가격' => 189,

            '할인' => 6,

            '상태' => 1 ,

                        8080000'

],

[

'ID' = & gt; 2,

'제목' = & gt; 'Qiushui Yiren 양면 모직 겨울 2019 신상 여성 기질 양복 콜라보레이션 대비 울 코트 아우터 재킷',

'고양이' = & gt; '여성복 여성 의류',

                            ~ ~ ~ -12',

                                                                                >                                                                                                     '마이크로-미들 하이-웨이스트 스트레이트 발 청바지 남성',

'고양이' = & gt; '남성 의류',

'가격' = & gt; 179,

'할인' = & gt; 8,

'상태' = > 2,

00'

'id'= & gt; ' = & gt; '남성 의류',

                                                                                                                                 ’ ’ s s ’ s ’ // '상태' => '열림',

              'add_time' => ; 019-12- ~ ~ >   '로그인' = & gt; $ 로그인,

'왼쪽' = & gt; $ 왼쪽,

'오른쪽' = & gt $ 오른쪽;]; 코드, 컨트롤러 데이터는 view

<!DOCTYPE html>

<html>

<head>

<title>{$title}--백엔드 관리 시스템</title>

<link rel="stylesheet" type="text/css" href="/static/layui/css/layui.css">

<script type="text/javascript " src="/static/ layui/layui.js"></script>

<style type="text/css">

.header{width:100%;height: 50px;line-height: 50px; background: # 2e6da4;color:#ffffff;}

.title{margin-left: 20px;font-size: 20px;}

.userinfo{float: right;margin-right: 10px;}

.userinfo a{color: #ffffff;}

        .menu{폭: 200px;배경:#333744;위치:절대;}

        .main{위치: 절대;왼쪽:200px;오른쪽:0px;}


        .layui-collapse{경계: 없음; }

        .layui-colla-item{border-top:none;}

        .layui-colla-title{배경:#42485b;color:#ffffff;}

        .layui-colla-content{border-top: none;padding:0px;}


        .contentspan{배경: #009688;margin-left: 30px;padding: 10px;color:#ffffff;}

        .content div{border-bottom: solid 2px # 009688;margin-top: 8px;}

        .content 버튼{float: right;margin-top: -5px;}

    </style>

</head>

<body>

    < ;div>

        <span><span style="font-size: 20px;">{$title}</span>--后台管理系统</span>

        <span>【 {$login}】<span><a href="javascript:;">退출</a></span></span>

    </div>

    <div id ="menu">

        <divlay-accordion>

            <div>

                <h2>{$left.0.title}</h2>

               <div class="layui- colla-contentlayui-show">

                    <ul class="layui-navlayui-nav-tree"lay-filter="test">

                        <li><a href="index.html ">{$left.0.lists.0.title}</a></li>

                        <li><a href="index.html">{$left.0.lists .1.title}</a></li>

                    </ul>

                </div>

            </div>

            <div>

                <h2>{$left[1]['title']}</h2>

                <div>

                    <ul class="layui-nav layui-nav-tree" lay-filter="test">

                        <li><a href="index.html">{$left.1.lists.0.title}</a></li>

                        <li><a href="index.html">{$left.1.lists.1.title}</a></li>

                        <li><a href="index.html">{$left.1.lists.2.title}</a></li>

                        <li><a href="index.html">{$left.1.lists.3.title}</a></li>

                    </ul>

                </div>

            </div>

            <div>

                <h2>{$left.2.title}</h2>

                <div>

                    <ul class="layui-nav layui-nav-tree" lay-filter="test">

                        <li><a href="index.html">{$left.2.lists.0.title}</a></li>

                        <li><a href="index.html">{$left.2.lists.1.title}</a></li>

                        <li><a href="index.html">{$left.2.lists.2.title}</a></li>

                    </ul>

                </div>

            </div>

        </div>

    </div>

    <div style="padding:10px;">

        <div>

            <span> ;商品列表</span>

            <div></div>

        </div>

        <테이블>

            <머리>

               

                      <번째>ID ;

                    <번째>商品标题</th>

                    <번째>分类

                    <번째>价格

                    <번째>折扣

                   <일>状态</일>

                    <일>添加时间< ;/th>

                </tr>

            </thead>

            <tbody>

                <tr>

                    <td>{$right.0.id}</td>

ㅋㅋㅋ      <td>{$right.0.price }</td>

                    <td>{$right.0.discount}</td>

                    <td>{$right.0.status}</td>

                    <td> {$right.0.add_time}</td>

                </tr>

                <tr>

             

                    <td> ;{$right.1.title}</td>

                    <td>{$right.1.cat}</td>

                    <td>{$right.1.price}</ ㅋㅋㅋ>

ㅋㅋㅋ        <td>{$right.1.add_time }</td>

                </tr>

                <tr>

                    <td>{$right.2.id}</td> ;

                    <td>{$right.2. title}</td>

                    <td>{$right.2.cat}</td>

                    <td>{$right.2.price}</td>

                    <td> ;{$right.2.status}</td>

                    <td>{$right.0.discount}</td>

                    <td>{$right.2.add_time}</ td>

                </tr>

                <tr>

                    <td>{$right.3.id}</td>

                    <td>{$right.3.title}< /td>

                    <td>{$right.3.cat}</td>

                    <td>{$right.3.price}</td>

                   <td>{$right ...

</tr>

            </tbody>

        </table>

    </div>

</body>

</html>

<script>

   layui.use(['element','layer','laypage'], function(){

        var 요소 = layui.element;

        varlaypage =layui.laypage;

        $ =layui.jquery;

       layer =layui.layer;

        ResetMenuHeight();

    });

    // 새로워진 设置菜单容器고도

ㅋㅋㅋ