1. 安装 Laravel
首先 laravel 安装 保您的本地机器已安装 PHP 和 Composer。然后执行以下命令安装 Laravel:
1 | #指定版本用这个 |
通过 composer 安装的laravel 都是根据你安装的PHP版本进行安装的,如果强行安装其他版本会导致安装不了,所以具体需要看各版本需要安装php版本及其所需环境。
我使用docker 搭建laravel环境。 以下是我编写的11版本需要的php环境的dockerfile。
1 | 使用官方PHP镜像作为基础镜像 |
2. 配置 Laravel
首选 laravel 默认使用的是sqlite 数据库.如果你习惯使用mysql 数据库,可以修改 .env
文件中的数据库配置。
如果你使用了docker 环境,DB_HOST 需要docker的php 内 Gateway ip 地址 。
3. 路由
在laravel 中 路由主要由 web路由
与 api路由
。
Web 路由是有序的:主要用于定义 Web 应用程序的页面和交互。常与特定的用户会话和状态相关联。它们处理用户的登录、注册、会话管理以及其他与用户身份和状态相关的操作。
通俗来说就是在web路由里写的api,除get请求外,其他请求都需要csrf验证 即表单提交携带字段_token=csrf_token() 或 header中需要包含X-CSRF-TOKEN = csrf_token()
,都是系统 默认加载了中间键的验证。
Api 路由是无序的:主要用于为前端应用、移动应用或其他服务提供数据接口。这些接口通常是无状态的,意味着它们不依赖于任何特定的用户会话或状态。每次请求都是独立的,并且可以通过身份验证令牌(如 JWT)或其他机制进行身份验证。
- Api路由是一个无状态的 API,可以使用 install:api Artisan 命令启用 API 路由:
php artisan install:api
- API 路由是无序的:主要用于定义 API 接口。它们处理客户端应用程序的请求,并返回 JSON 格式的数据。它们不与特定的用户会话和状态相关联。它们处理用户的注册、登录、会话管理以及其他与用户身份和状态无关的操作。
routes/api.php
中的路由是无状态的,并被分配到 api 中间件群组。/api URI 前缀会自动应用到这些路由上,所以你不需要手动将它应用到文件中的每一个路由上。你可以通过修改应用程序的 bootstrap/app.php 文件来更改前缀. 即访问api路由都要携带前缀/api,如:http://localhost:8000/api/user
4. 中间件
- 中间件提供了一种便捷的机制,用于检查和过滤进入应用程序的 HTTP 请求。
- 所有自定义中间件通常位于应用程序的 app/Http/Middleware 目录中
创建一个中间件
1 | php artisan make:middleware EnsureTokenIsValid |
1 |
|
如你所见,如果给定的token
不匹配我们的密钥,中间件将向客户端返回一个 HTTP 重定向;否则,请求将传递进入应用程序。为了传递请求进入应用程序的更深层次(允许中间件 “通过”),你应该用 $request
调用 $next
回调。
Laravel 默认的中间件组
- Laravel 包含预定义的 web 和 api 中间件组,包含了你可能希望应用于 Web 和 API 路由的常用中间件。
- Laravel 自动将这些中间件组应用于相应的 routes/web.php 和 routes/api.php 文件:
web 中间件组
1 | Illuminate\Cookie\Middleware\EncryptCookies |
api 中间件组
1 | Illuminate\Routing\Middleware\SubstituteBindings |
5.控制器
- 与其将所有的请求处理逻辑定义为路由文件中的闭包,你可能希望使用“控制器(controller)”类来组织这些行为。
- 控制器可以将相关的请求处理逻辑组织到单个类中。
- 默认情况下,控制器被存储在
app/Http/Controllers
目录中。
编写控制器
1 | php artisan make:controller UserController |
6.请求
- Laravel 的 Illuminate\Http\Request 类提供了一种面向对象的方式来与您的应用程序当前正在处理的 HTTP 请求进行交互,以及检索提交的输入、cookies 和文件。
请求路径、主机 、方法、头、IP 地址
1 | #检索请求路径 如果传入的请求针对 http://example.com/foo/bar,path 方法将返回 foo/bar |
检索输入
1 | # 检索所有输入数据 |
7.视图
创建和渲染视图
你可以通过在应用程序的 resources/views
目录中放置一个带有 .blade.php
扩展名的文件,或者使用 make:view
Artisan
命令来创建视图:
1 | php artisan make:view greeting |
嵌套视图目录
视图也可以嵌套在 resources/views
目录的子目录中。”点” 符号可用于引用嵌套视图。例如,如果你的视图存储在 resources/views/admin/profile.blade.php
,你可以从应用程序的一个路由/控制器
返回它,如下所示:
1 | return view('admin.profile', $data); |
与所有视图共享数据
- 有时,你可能需要与你的应用程序渲染的所有视图共享数据。
- 你可以使用
View
facade 的share
方法来做到这一点。 - 通常,你应该在服务提供者的
boot
方法中放置对share
方法的调用。你可以将它们添加到App\Providers\AppServiceProvider
类,或者生成一个单独的服务提供者来容纳它们:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace App\Providers;
use Illuminate\Support\Facades\View;
class AppServiceProvider extends ServiceProvider
{
/**
* 注册任何应用程序服务。
*/
public function register(): void
{
// ...
}
/**
* 启动任何应用程序服务。
*/
public function boot(): void
{
View::share('key', 'value');
}
}
优化视图
- 默认情况下,Blade 模板视图是按需编译的。当执行渲染视图的请求时,Laravel 将确定是否存在视图的已编译版本。
- 如果文件存在,Laravel 然后会确定未编译的视图是否比编译过的视图更近期地被修改过。
- 如果编译的视图不存在,或未编译的视图已被修改,Laravel 将重新编译视图。
在请求期间编译视图可能会对性能略有影响,因此 Laravel 提供了 view:cache
Artisan 命令来预编译你的应用程序使用的所有视图。为了提高性能,你可能希望将此命令作为你的部署过程的一部分:
1 | php artisan view:cache |
数据库迁移
- 迁移就像数据库的版本控制,允许你的团队定义和共享应用程序的数据库架构定义。
- 如果你曾经不得不告诉团队成员在从代码控制中拉取更新后手动添加字段到他们的本地数据库,那么你就遇到了数据库迁移解决的问题。
一些相关的常用的shell指令,其他更加详细可参考官方文档。
1 | # 生成迁移 即创建表结构 用来 |
迁移类包含两个方法:up
和 down
。up
方法用于向数据库中添加新表、列或索引,而 down
方法用于撤销 up
方法执行的操作。
1 |
|
返回 php 系列