Annuaire d'articles
Démarrage de ThinkPHP6
- ThinkPHP prend en charge le développement d'applications du modèle traditionnel MVC (Model-View-Controller) et du modèle populaire MVVM (Model-View-ViewModel)
1. CVM
MVC
Un système logiciel est divisé en trois parties de base : modèle (Model), vue (View) et contrôleur (Controller)ThinkPHP
est uneMVC
architecture typique
Contrôleur - responsable de la transmission des demandes et de leur traitement. Vue - les concepteurs d'interface réalisent la conception de l'interface graphique. Les modélisateurs-
programmeurs écrivent les fonctions que le programme doit avoir (implémenter des algorithmes, etc.), les experts en bases de données effectuent la gestion des données et la conception des bases de données (peuvent réaliser des fonctions spécifiques).
2. Accès au mode application unique
- Chemin d'accès au projet : www.xxx.com/index.php/index/index
fichier d'entrée index.php opération d'
index du contrôleur d'index
├─app 应用目录
│ ├─controller 控制器目录
│ ├─model 模型目录
│ ├─view 视图目录
│ ├─ ... 更多类库目录
│ │
│ ├─BaseController.php 默认基础控制器类
│ ├─ExceptionHandle.php 应用异常定义文件
│ ├─common.php 全局公共函数文件
│ ├─middleware.php 全局中间件定义文件
│ ├─provider.php 服务提供定义文件
│ ├─Request.php 应用请求对象
│ └─event.php 全局事件定义文件
│
├─config 配置目录
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─console.php 控制台配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─filesystem.php 文件磁盘配置
│ ├─lang.php 多语言配置
│ ├─log.php 日志配置
│ ├─middleware.php 中间件配置
│ ├─route.php URL和路由配置
│ ├─session.php Session配置
│ ├─trace.php Trace配置
│ └─view.php 视图配置
│
├─view 视图目录
├─route 路由定义目录
│ ├─route.php 路由定义文件
│ └─ ...
│
├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写
│
├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor Composer类库目录
├─.example.env 环境变量示例文件
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件
3. Vue d'installation
- La fonction d'affichage est complétée par la classe \think\View avec la classe de pilote d'affichage. La nouvelle version ne dispose que d'un moteur de modèle natif PHP intégré (principalement utilisé pour la sortie de page anormale intégrée). Si vous avez besoin d'utiliser d'autres moteurs de modèles, vous devez installer l'extension de moteur de modèles correspondante séparément
- ThinkPHP6 a créé indépendamment un ensemble de modèles, nommé : ThinkTemplate template engine
- Pour utiliser le moteur de modèles think-template, think-view doit être installé
composer require topthink/think-view
- Le répertoire d'affichage peut se trouver dans le répertoire racine ou dans le répertoire d'application de l'application
4. Rendu du modèle
- Pour utiliser View, vous devez d'abord introduire la classe de façade think\facade\View
- La méthode de récupération rend la page
- Paramètre : le chemin de la page statique, la page statique correspondante par défaut
code du contrôleur
<?php
namespace app\controller;
use think\facade\View;
class Index{
public function index(){
return View::fetch();
}
}
afficher le code
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Thinkphp6</title>
</head>
<body>
<div style="color:red;">红色欧阳克</div>
</body>
</html>
- Préparation : La classe Index correspond au répertoire sous la vue
- Remarque : La méthode index correspond aux fichiers statiques du répertoire sous la vue
5. Variables de modèle
assign
L'affectation de méthode appartient à l'affectation de variable globale- sortie du modèle
{$name}
code du contrôleur
namespace app\controller;
use think\facade\View;
class Index{
public function index(){
// 1、模板变量赋值
View::assign('name','欧阳克');
View::assign('email','[email protected]');
// 2、批量赋值
View::assign([
'name' => '欧阳克',
'email' => '[email protected]'
]);
// 模板输出
return View::fetch();
}
}
afficher le code
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>ThinkPHP6</title>
</head>
<body>
姓名:{$name}
<br />
邮箱:{$email}
</body>
</html>
6. Entrée
public
Le répertoire est le seul répertoire accessible sur le Web- Mettre les fichiers de ressources
public/static
dans - fichier d'entrée, la valeur par défaut est
index.php
7. Exemple
- mettre
html
la pageThinkPHP
dans le cadre - Cette page est un fichier statique
<!DOCTYPE html>
<html>
<head>
<title>列表页</title>
<link rel="stylesheet" type="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;
background: #2e6da4;
color: #ffffff;
}
.title {
margin-left: 20px;
font-size: 20px;
}
.userinfo {
float: right;
margin-right: 10px;
}
.userinfo a {
color: #ffffff;
}
.menu {
width: 200px;
background: #333744;
position: absolute;
}
.main {
position: absolute;
left: 200px;
right: 0px;
}
.layui-collapse {
border: none;
}
.layui-colla-item {
border-top: none;
}
.layui-colla-title {
background: #42485b;
color: #ffffff;
}
.layui-colla-content {
border-top: none;
padding: 0px;
}
.content span {
background: #009688;
margin-left: 30px;
padding: 10px;
color: #ffffff;
}
.content div {
border-bottom: solid 2px #009688;
margin-top: 8px;
}
.content button {
float: right;
margin-top: -5px;
}
</style>
</head>
<body>
<div class="header">
<span class="title"><span style="font-size: 20px;">XXX</span>--后台管理系统</span>
<span class="userinfo">【欧阳克】<span><a href="javascript:;">退出</a></span></span>
</div>
<div class="menu" id="menu">
<div class="layui-collapse" lay-accordion>
<div class="layui-colla-item">
<h2 class="layui-colla-title">商城管理</h2>
<div class="layui-colla-content layui-show">
<ul class="layui-nav layui-nav-tree" lay-filter="test">
<li class="layui-nav-item"><a href="list.html">商品列表</a></li>
<li class="layui-nav-item"><a href="list.html">商品列表</a></li>
<li class="layui-nav-item"><a href="list.html">商品列表</a></li>
<li class="layui-nav-item"><a href="list.html">商品列表</a></li>
</ul>
</div>
</div>
<div class="layui-colla-item">
<h2 class="layui-colla-title">商城管理</h2>
<div class="layui-colla-content">
<ul class="layui-nav layui-nav-tree" lay-filter="test">
<li class="layui-nav-item"><a href="list.html">商品列表</a></li>
<li class="layui-nav-item"><a href="list.html">商品列表</a></li>
<li class="layui-nav-item"><a href="list.html">商品列表</a></li>
<li class="layui-nav-item"><a href="list.html">商品列表</a></li>
</ul>
</div>
</div>
<div class="layui-colla-item">
<h2 class="layui-colla-title">商城管理</h2>
<div class="layui-colla-content">
<ul class="layui-nav layui-nav-tree" lay-filter="test">
<li class="layui-nav-item"><a href="list.html">商品列表</a></li>
<li class="layui-nav-item"><a href="list.html">商品列表</a></li>
<li class="layui-nav-item"><a href="list.html">商品列表</a></li>
<li class="layui-nav-item"><a href="list.html">商品列表</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="main" style="padding:10px;">
<div class="content">
<span>商品列表</span>
<div></div>
</div>
<table class="layui-table">
<thead>
<tr>
<th>ID</th>
<th>商品标题</th>
<th>分类</th>
<th>价格</th>
<th>状态</th>
<th>添加时间</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>
熙世界2019秋冬新款长袖杏色上衣连帽宽松刺绣文艺落肩袖加厚卫衣BF风
</td>
<td>女装</td>
<td>189</td>
<td>开启</td>
<td>2019-12-12</td>
</tr>
<tr>
<td>2</td>
<td>
秋水伊人双面呢冬装2019年新款女装气质西装领撞色羊毛大衣外套女
</td>
<td>女装</td>
<td>699</td>
<td>开启</td>
<td>2019-12-12</td>
</tr>
<tr>
<td>3</td>
<td>
秋水伊人双面呢冬装2019年新款女装气质西装领撞色羊毛大衣外套女
</td>
<td>女装</td>
<td>699</td>
<td>开启</td>
<td>2019-12-12</td>
</tr>
<tr>
<td>4</td>
<td>
秋水伊人双面呢冬装2019年新款女装气质西装领撞色羊毛大衣外套女
</td>
<td>女装</td>
<td>699</td>
<td>开启</td>
<td>2019-12-12</td>
</tr>
<tr>
<td>5</td>
<td>
秋水伊人双面呢冬装2019年新款女装气质西装领撞色羊毛大衣外套女
</td>
<td>女装</td>
<td>699</td>
<td>关闭</td>
<td>2019-12-12</td>
</tr>
<tr>
<td>6</td>
<td>
秋水伊人双面呢冬装2019年新款女装气质西装领撞色羊毛大衣外套女
</td>
<td>女装</td>
<td>699</td>
<td>开启</td>
<td>2019-12-12</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
<script>
layui.use(["element", "layer", "laypage"], function () {
var element = layui.element;
var laypage = layui.laypage;
$ = layui.jquery;
layer = layui.layer;
resetMenuHeight();
});
// 重新设置菜单容器高度
function resetMenuHeight() {
var height = document.documentElement.clientHeight - 50;
$("#menu").height(height);
}
</script>
controller
Code, ces données sont des données de test, qui seront lues ultérieurement à partir de la base de données
namespace app\controller;
use think\facade\View;
class Index{
public function index(){
$title = '商城';
$login = '欧阳克';
$left = [
[
'title' => '商品管理',
'lists' => [
[
'id' => 1,
'title' => '商品列表',
],
[
'id' => 2,
'title' => '商品分类',
]
]
],
[
'title' => '用户管理',
'lists' => [
[
'id' => 3,
'title' => '用户列表',
],
[
'id' => 4,
'title' => '购物车',
],
[
'id' => 5,
'title' => '用户地址',
],
[
'id' => 6,
'title' => '订单管理',
]
]
],
[
'title' => '后台管理',
'lists' => [
[
'id' => 7,
'title' => '管理员列表',
],
[
'id' => 8,
'title' => '个人中心',
],
[
'id' => 9,
'title' => '左侧菜单列',
]
]
]
];
$right = [
[
'id' => 1,
'title' => '熙世界2019秋冬新款长袖杏色上衣连帽宽松刺绣文艺落肩袖加厚卫衣BF风',
'cat' => '女装',
'price' => 189,
'discount' => 6,
// 'status' => 1,
'status' => '开启',
'add_time' => '2019-12-12',
// 'add_time' => '1576080000'
],
[
'id' => 2,
'title' => '秋水伊人双面呢冬装2019年新款女装气质西装领撞色羊毛大衣外套女',
'cat' => '女装',
'price' => 699,
'discount' => 7,
// 'status' => 1,
'status' => '开启',
'add_time' => '2019-12-12',
// 'add_time' => '1576080000'
],
[
'id' => 3,
'title' => '微弹中高腰直脚牛仔裤男',
'cat' => '男装',
'price' => 179,
'discount' => 8,
// 'status' => 2,
'status' => '关闭',
'add_time' => '2019-12-12',
// 'add_time' => '1576080000'
],
[
'id' => 1,
'title' => '男士长袖t恤秋季圆领黑白体恤T 纯色上衣服打底衫',
'cat' => '男装',
'price' => 99,
'discount' => 9,
// 'status' => 1,
'status' => '开启',
'add_time' => '2019-12-12',
// 'add_time' => '1576080000'
],
];
View::assign([
'title' => $title,
'login' => $login,
'left' => $left,
'right' => $right
]);
return View::fetch();
}
}
afficher le code, les données du contrôleur sont utilisées dans la vue
<!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 {
width: 200px;
background: #333744;
position: absolute;
}
.main {
position: absolute;
left: 200px;
right: 0px;
}
.layui-collapse {
border: none;
}
.layui-colla-item {
border-top: none;
}
.layui-colla-title {
background: #42485b;
color: #ffffff;
}
.layui-colla-content {
border-top: none;
padding: 0px;
}
.content span {
background: #009688;
margin-left: 30px;
padding: 10px;
color: #ffffff;
}
.content div {
border-bottom: solid 2px #009688;
margin-top: 8px;
}
.content button {
float: right;
margin-top: -5px;
}
</style>
</head>
<body>
<div class="header">
<span class="title"><span style="font-size: 20px;">{$title}</span>--后台管理系统</span>
<span class="userinfo">【{$login}】<span><a href="javascript:;">退出</a></span></span>
</div>
<div class="menu" id="menu">
<div class="layui-collapse" lay-accordion>
<div class="layui-colla-item">
<h2 class="layui-colla-title">{$left.0.title}</h2>
<div class="layui-colla-content layui-show">
<ul class="layui-nav layui-nav-tree" lay-filter="test">
<li class="layui-nav-item">
<a href="index.html">{$left.0.lists.0.title}</a>
</li>
<li class="layui-nav-item">
<a href="index.html">{$left.0.lists.1.title}</a>
</li>
</ul>
</div>
</div>
<div class="layui-colla-item">
<h2 class="layui-colla-title">{$left[1]['title']}</h2>
<div class="layui-colla-content">
<ul class="layui-nav layui-nav-tree" lay-filter="test">
<li class="layui-nav-item">
<a href="index.html">{$left.1.lists.0.title}</a>
</li>
<li class="layui-nav-item">
<a href="index.html">{$left.1.lists.1.title}</a>
</li>
<li class="layui-nav-item">
<a href="index.html">{$left.1.lists.2.title}</a>
</li>
<li class="layui-nav-item">
<a href="index.html">{$left.1.lists.3.title}</a>
</li>
</ul>
</div>
</div>
<div class="layui-colla-item">
<h2 class="layui-colla-title">{$left.2.title}</h2>
<div class="layui-colla-content">
<ul class="layui-nav layui-nav-tree" lay-filter="test">
<li class="layui-nav-item">
<a href="index.html">{$left.2.lists.0.title}</a>
</li>
<li class="layui-nav-item">
<a href="index.html">{$left.2.lists.1.title}</a>
</li>
<li class="layui-nav-item">
<a href="index.html">{$left.2.lists.2.title}</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="main" style="padding:10px;">
<div class="content">
<span>商品列表</span>
<div></div>
</div>
<table class="layui-table">
<thead>
<tr>
<th>ID</th>
<th>商品标题</th>
<th>分类</th>
<th>价格</th>
<th>折扣</th>
<th>状态</th>
<th>添加时间</th>
</tr>
</thead>
<tbody>
<tr>
<td>{$right.0.id}</td>
<td>{$right.0.title}</td>
<td>{$right.0.cat}</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.id}</td>
<td>{$right.1.title}</td>
<td>{$right.1.cat}</td>
<td>{$right.1.price}</td>
<td>{$right.1.status}</td>
<td>{$right.0.discount}</td>
<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.3.status}</td>
<td>{$right.0.discount}</td>
<td>{$right.3.add_time}</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
<script>
layui.use(["element", "layer", "laypage"], function () {
var element = layui.element;
var laypage = layui.laypage;
$ = layui.jquery;
layer = layui.layer;
resetMenuHeight();
});
// 重新设置菜单容器高度
function resetMenuHeight() {
var height = document.documentElement.clientHeight - 50;
$("#menu").height(height);
}
</script>