### 慕课网-《快速入门ThinkPHP 5.0--基础篇》学习笔记
[https://www.imooc.com/learn/832](https://www.imooc.com/learn/832)
*****
# 关于MVC
**MVC 模型(model) 视图(view) 控制器(controller)**
> 一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码
![](https://box.kancloud.cn/0561f5890cb3fe1cad8bb514407d2aa3_1165x552.png)
**MVC的优势**
1. 耦合性低
2. 重用性高
3. 可维护性高
4. 有利于软件的工程化
**MVC的变形使用举例**
1. 无Model模式的web开发(企业官网,纯展示)
2. 无View模式的Api接口开发(APP开发,没有view,用Json和xml返回给客户端)
3. Model的再分层和Controller的再分层
*****
# 安装
**composer安装(推荐)**
1. PC [Composer-Setup.exe](https://getcomposer.org/Composer-Setup.exe)
2. MAC 'brew install composer'
```
composer create-project topthink/think tp5
```
**更新Thinkphp框架**
```
composer update topthink/framework
```
**启动服务**
1. Thinkphp内置服务器 'php think run'
2. 使用集成开发环境 PC:wamp MAC:mamp
**使用集成开发环境 根目录新建设置以下文件后 可直接隐藏public实现访问**
- index.php
```
<?php
require 'public/index.php';
```
- web.config (IIS)
```
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<defaultDocument>
<files>
<add value="index.php" />
</files>
</defaultDocument>
<rewrite>
<rules>
<rule name="OrgPage" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^(.*)$" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
```
- htaccess(apache)
```
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
</IfModule>
```
*****
# 目录结构
[https://www.kancloud.cn/manual/thinkphp5_1/353950](https://www.kancloud.cn/manual/thinkphp5_1/353950)
- **application** 应用目录,几乎整个项目的内容都写在这里
application/index 模块
application/admin 模块
- **extend** 文件夹为第三方库不是通过composer下载的或者说一个好用的第三方库是composer上没有的
- **public** 网站根目录,其中的 **static** 文件夹为 css js images
- **runtime** 网站运行时的缓存文件,包括日志缓存和编译文件等等
- **thinkphp** 框架文件,整个框架的文件都在这个文件夹里了
**tpl** 文件夹为默认模板
- **vendor** 通过composer安装框架过程生成的目录,通过composer安装的所有类库都会安装在vendor这个文件中
*****
# 开发规范
[https://www.kancloud.cn/manual/thinkphp5_1/353949](https://www.kancloud.cn/manual/thinkphp5_1/353949)
- 文件夹使用小写+下划线(下划线貌似用的也不多)
- controller,model,validate 类文件采用**驼峰法**命名(首字母大写)
- 方法的命名使用**驼峰法**(首字母小写)
- 属性的命名使用**驼峰法**(首字母小写)
- 以双下划线 __ 打头的函数或方法作为魔术方法(这是啥唷。。。)
- 常量以全部大写字母和下划线命名
- 配置参数以全部小写字母和下划线命名
- 数据库中的**数据表**和**字段**采用全部小写加下划线方式命名
*****
# 模块设计
- Thinkphp默认将common设置成一个公用的模块,并且不允许直接在url上访问
- **实例** 调用公共模块 commom
```
use app\common\controller\Index as commonIndex;
class Index
{
public function index()
{
$common = new commonIndex();
$common -> Index();
}
}
```
- **继承** 调用公共模块 commom
```
use app\common\controller\User as commonUser;
class Index extends commonUser
{
public function index()
{
$this -> getUser();
}
}
```
*****
# 配置
**配置的优先顺序**
> 惯例配置->应用配置->模块配置->动态配置
- 惯例配置 thinkphp/convention.php
- 应用配置 config/app.php
- 模块配置 application/模块/config/
- 动态配置(慎用)
**使用助手函数 config() 获取配置信息**
```
dump(config());
```
**扩展配置**
放在 config 文件夹内即可
```
// config/wechat.php
<?php
return [
'app_id' => '123456',
];
```
**场景配置(还需学习)**
> TP5.1 和 TP5设置方法不同,后期还需要再研究学习下
**模块配置**
> 只对模块有效,放置目录:application/模块/config/
```
<?php
return [
'app_id' => '123456',
];
```
*****
# config
**config类**
```
// 两种方法选一
use think\facade\Config;
use Config;
// 全部
Config::get();
// 读取
Config::get('app_name');
// 动态设置
Config::set('app_trace', true);
// 判断存在返回布尔值
Config::has('oy');
```
**config助手函数**
```
// 全部
config();
// 读取
config('app_name');
config('app.app_name');
config('app.name1.name2');
// 获取一级配置
config('app.');
// 动态设置
config('app_trace', true);
// 判断存在返回布尔值
config('?oy');
```
*****
# 环境变量(还需学习)
**读取所有配置文件**
```
$_ENV
```
**使用 Env 类**
```
// 两种方法选一
use think\facade\Env
use Env;
Env::get('TERM_PROGRAM');
```
> 开发->测试->上线
1. **开发环境** 开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般**打开全部错误报告**。
2. **测试环境** 一般是**克隆一份生产环境**的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。
3. **生产环境** 是值正式提供对外服务的,一般会**关掉错误报告**,**打开错误日志**。
*****