laravel 官方文档

1. 安装 Laravel

首先 laravel 安装 保您的本地机器已安装 PHP 和 Composer。然后执行以下命令安装 Laravel:

1
2
3
4
5
#指定版本用这个
composer create-project laravel/laravel:^11.0 example-app

#根据php版本安装最新版本
composer create-project laravel/laravel example-app

通过 composer 安装的laravel 都是根据你安装的PHP版本进行安装的,如果强行安装其他版本会导致安装不了,所以具体需要看各版本需要安装php版本及其所需环境。

我使用docker 搭建laravel环境。 以下是我编写的11版本需要的php环境的dockerfile。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 使用官方PHP镜像作为基础镜像
FROM php:8.3.7-fpm

# vim 安装
RUN apt-get update && apt-get install -y vim

# 安装wget
RUN apt-get install -y wget


# 安装unzip
RUN apt-get install unzip

##初始化php 核心扩展
RUN docker-php-source extract

# 安装PHP扩展
RUN docker-php-ext-install pdo_mysql mysqli bcmath

# 安装redis扩展
RUN echo "extension=redis.so" > /usr/local/etc/php/conf.d/docker-php-ext-redis.ini
RUN pecl install redis

# 安装xdebug扩展 https://xdebug.org/ 从 Xdebug 2 升级到 3 https://xdebug.org/docs/upgrade_guide#changed-xdebug.remote_enable
RUN wget https://xdebug.org/files/xdebug-3.3.2.tgz \
&& tar -xzvf xdebug-3.3.2.tgz && cd xdebug-3.3.2 \
&& phpize && ./configure && make \
&& cp modules/xdebug.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831 \
&& echo "zend_extension = xdebug" > /usr/local/etc/php/conf.d/docker-xdebug.ini \
&& echo "xdebug.client_host = host.docker.internal" >> /usr/local/etc/php/conf.d/docker-xdebug.ini \
&& echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/docker-xdebug.ini \
&& echo "xdebug.remote_handler=dbgp" >> /usr/local/etc/php/conf.d/docker-xdebug.ini \
&& echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/docker-xdebug.ini \
&& echo "xdebug.client_port=9003" >> /usr/local/etc/php/conf.d/docker-xdebug.ini \
&& echo "xdebug.idekey=phpstorm" >> /usr/local/etc/php/conf.d/docker-xdebug.ini


# 可选:安装composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN chmod +x /usr/local/bin/composer

# 设置工作目录
WORKDIR /var/www

# 可选:启动时运行php内置的服务器
#CMD ["php", "-S", "0.0.0.0:80", "-t", "/var/www"]


#执行命令 docker build -t php:8.37-fpm . (最后的 . 代表本次执行的上下文路径,)

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class EnsureTokenIsValid
{
/**
* 处理传入请求。
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return \Symfony\Component\HttpFoundation\Response
*/
public function handle(Request $request, Closure $next): Response
{
if ($request->input('token') !== 'my-secret-token') {
return redirect('home');
}

return $next($request);
}
}

如你所见,如果给定的token不匹配我们的密钥,中间件将向客户端返回一个 HTTP 重定向;否则,请求将传递进入应用程序。为了传递请求进入应用程序的更深层次(允许中间件 “通过”),你应该用 $request 调用 $next 回调。

Laravel 默认的中间件组

  • Laravel 包含预定义的 web 和 api 中间件组,包含了你可能希望应用于 Web 和 API 路由的常用中间件。
  • Laravel 自动将这些中间件组应用于相应的 routes/web.php 和 routes/api.php 文件:

web 中间件组

1
2
3
4
5
6
Illuminate\Cookie\Middleware\EncryptCookies
Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse
Illuminate\Session\Middleware\StartSession
Illuminate\View\Middleware\ShareErrorsFromSession
Illuminate\Foundation\Http\Middleware\ValidateCsrfToken
Illuminate\Routing\Middleware\SubstituteBindings

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#检索请求路径 如果传入的请求针对 http://example.com/foo/bar,path 方法将返回 foo/bar
$uri = $request->path();

#检索请求 URL. 要检索传入请求的完整 URL,您可以使用 url 或 fullUrl 方法
$url = $request->url();

$urlWithQueryString = $request->fullUrl();

#检索请求主机
$request->host();
$request->httpHost();
$request->schemeAndHttpHost();

# 检索请求方法
$request->method();

# 请求头
$value = $request->header('X-Header-Name');

#请求 IP 地址
$ipAddress = $request->ip();

检索输入

1
2
3
4
5
6
7
8
9
# 检索所有输入数据
$input = $request->all();
# 检索输入值
$name = $request->input('name');
# 从查询字符串检索输入
$name = $request->query('name');
# 检索 JSON 输入值
$name = $request->input('user.name');

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
    <?php
    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
2
3
php artisan view:cache
# 你可以使用 view:clear 命令清除视图缓存:
php artisan view:clear

数据库迁移

  • 迁移就像数据库的版本控制,允许你的团队定义和共享应用程序的数据库架构定义。
  • 如果你曾经不得不告诉团队成员在从代码控制中拉取更新后手动添加字段到他们的本地数据库,那么你就遇到了数据库迁移解决的问题。

一些相关的常用的shell指令,其他更加详细可参考官方文档。

1
2
3
4
5
6
7
8
9
10
11
# 生成迁移 即创建表结构 用来
php artisan make:migration create_flights_table

# 执行迁移 运行所有未执行过的迁移,在对应数据库生成表。
php artisan migrate

# 查看目前已经执行了哪些迁移
php artisan migrate:status

# 要回滚最后一次迁移操作
php artisan migrate:rollback

迁移类包含两个方法:updownup 方法用于向数据库中添加新表、列或索引,而 down 方法用于撤销 up 方法执行的操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* 执行迁移
*/
public function up(): void
{
Schema::create('flights', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('airline');
$table->timestamps();
});
}

/**
* 回滚迁移
*/
public function down(): void
{
Schema::drop('flights');
}
};


返回 php 系列
avatar
懒觉猫先生
欢迎你们的到来!
关注我吧
最新文章
最新评论
正在加载中...
网站资讯
文章数目 :
176
已运行时间 :
本站总字数 :
119.7k
本站访客数 :
本站总访问量 :
最后更新时间 :