# laravel基础
### 一、MVC设计模式
在php的的主流框架中,大多都采用MVC的设计模式,它可以将代码解耦,让视图代码和逻辑代码分开编写,为后期的维护带来了极大的便利。**MVC是模型(model)、视图(view)、控制器(controller)是组合**,它表示将软件系统分成3个核心部分。
- 模型model,用于数据处理
- 视图view,用于显示数据
- 控制器controller,接收用户请求,处理用户交互
MVC示意图如下:
<img src="img\mvc.png" />
### 二、laravel目录结构
laravel一级目录的作用
| 目录 | 作用 |
| ------------- | -------------------------------------------------- |
| **app** | 应用目录,保存项目的控制器、模型等 |
| bootstrap | 框架的启动相关文件 |
| **config** | 存放一些配置文件 |
| **database** | 数据库迁移文件及数据填充文件 |
| **public** | 应用入口文件(index.php)和前端资源文件(CSS,JS) |
| **resources** | 存放视图文件、语言包和未编译的前端资源文件 |
| **routes** | 存放应用中定义的所有路由 |
| storage | 存放编译后的模板、session、缓存文件、日志文件 |
| tests | 自动化测试文件 |
| vendor | 存放通过composer加载的依赖包 |
laravel常用的子目录和文件
| 类型 | 路径 | 作用 |
| ---- | --------------------------------------- | ---------------------- |
| 目录 | app\Http | 存放HTTP请求相关文件 |
| 目录 | **app\Http\Controllers** | 存放控制器 |
| 目录 | app\Http\Controllers\Auth | Auth模块的控制器目录 |
| 文件 | **app\Http\Controllers\Controller.php** | 控制器的基类文件 |
| 目录 | app\Http\Middleware | 中间件目录 |
| 文件 | app\User.php | User模型文件 |
| 文件 | bootstrap\autoload.php | 自动加载文件 |
| 文件 | config\app.php | 全局配置文件 |
| 文件 | config\auth.php | Auth模块的配置文件 |
| 文件 | **config\database.php** | 数据库配置文件 |
| 文件 | config\filesystem.php | 文件系统的配置文件 |
| 目录 | database\factories | 存放工厂模式的数据 |
| 目录 | database\migrations | 存放数据迁移文件 |
| 目录 | database\seeds | 存放数据填充文件 |
| 目录 | resources\lang | 存放语言包文件 |
| 目录 | **resources\views** | 存放视图文件 |
| 文件 | **routers\web.php** | 定义路由文件 |
| 目录 | storage\app | 存放用户上传的文件 |
| 目录 | storage\framework | 存放与框架自身相关文件 |
| 目录 | storage\logs | 存放日志文件 |
| 文件 | **public\index.php** | 入口文件 |
| 文件 | .env | 环境变量配置文件 |
| 文件 | artisan | 脚手架文件 |
| 文件 | composer.json | composer依赖包配置文件 |
### 三、路由
路由用来匹配用户请求的URL地址,laravel框架的路由需要在`routes/web.php`文件中进行配置,打开该文件会看到一个已经存在的路由信息:
```
Route::get('/', function () {
return view('welcome');
});
```
上述代码用来配置laravel中的默认根路由,view()函数表示要显示的视图,参数welcome是视图文件的名称,对应的视图文件为resources\views\welcome.blade.php。
1、路由请求常见方法:
请求方式: **get**、**post**、put、delete、patch、options
(1)、Route::请求方式(请求URI, function(){ return view("页面名字"); });
(2)、多匹配用法: 只能接收定义得请求方式
Route::match([请求方式1,请求方式2...], 请求URI, function(){});
```
Route::match(['get', 'post'], '/test', function () {
return 'match-method';
});
```
(3)、全匹配用法: 所有请求方式都能接收
Route::any(请求URI, function(){});