---
url: /article/0qtfijjj/index.md
---
## 前言

上回说到接手了一个 PHP 项目，使用 Laravel 框架实现，今天将介绍 Laravel 项目的搭建过程。

## 1. 环境安装

### 1.1. 安装 PHP 的开发环境

安装过程请见上一篇文章 [PHP运行环境配置](https://maye.ml/2022021001/#%E4%B8%80php-%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE) 。这里我安装的版本是 **PHP 7.4.27 (cli)** 。

### 1.2. 安装 Composer

[Laravel](https://laravel.com/docs/9.x/installation#why-laravel) 是 PHP 开发应用广泛的框架，创建 Laravel 工程需要使用到 [Composer](https://getcomposer.org/download/)，可以通过命令行安装，或下载安装 **Composer-Setup.exe** 程序。
这里我使用下载 exe 程序安装的方式，注意，有的[教程](https://pkg.xyz/#how-to-use-packagist-mirror)会说设置镜像源，这里不建议设置，因为镜像源中的软件不够全，很容有些软件下载不到。
默认目录安装时，**composer.phar** 文件路径为：**C:\ProgramData\ComposerSetup\bin** ，Conposer 的配置文件目录为：**C:\Users\maye\AppData\Roaming\Composer** 。这里我安装的版本是 **Composer version 2.2.6 2022-02-04 17:00:38** 。

### 1.3. 创建 Laravel 工程

Laravel [英文文档](https://laravel.com/docs/5.5/installation) [中文文档](https://learnku.com/docs/laravel/5.5/installation/1282) 。
在指定目录下打开 cmd 命令行执行：`composer create-project --prefer-dist laravel/laravel laravel-demo "5.5.*"` 。目前 Laravel 版本已经到 8.x 了，这里我创建 5.5.x 是因为接手的项目是 Laravel 5.5.49 版本的。 由于是从国外服务器下载的，注意保持网络畅通，然后用 PhpStorm 打开。
工程创建也可以使用 PhpStorm，具体方式百度，需要指定 composer.phar 文件，然后在创建步骤中搜索 Laravel/Laravel 即可。

### 1.4. 安装 NodeJs

这里我下载的是 [**v14.15.5**](https://nodejs.org/download/release/v14.15.5/) 版本，在列表中找到 **node-v14.15.5-x64.msi** 文件下载安装。
npm 设置淘宝镜像，加速下载：`npm config set registry https://registry.npm.taobao.org`，通过 `npm config get registry` 查看是否配置成功。然后在 Laravel 工程中运行 `npm install` 下载依赖。

## 2. 工程运行

上述操作完成后，我们就成功创建了一个 Laravel 工程，在工程的根目录下执行 `php artisan serve` 即可启动，默认启动在 8000 端口，也可以通过 `php artisan serve --port=9000` 指定端口，然后使用浏览器打开 [localhost:8000](http://127.0.01:8000) 查看。按下 `Ctrl + C` 即可关闭服务。

## 3. 目录说明

Laravel 工程目录结构如下：

::: file-tree

laravel-demo

* app 包含应用程序的核心代码，默认情况下，这个目录位于命名空间 App 下。
  * Console/ 包含了所有自定义的 Artisan 命令
  * Envents/ 包含了事件类。可以使用事件来提醒应用其他部分发生了特定的操作，为应用提供了大量的灵活性和解耦
  * Exceptions/ 包含了应用的异常处理器
  * Http/ 包含了控制器、中间件和表单请求。几乎所有的进入应用的请求的处理逻辑都被放在这里
  * Jobs/ 此目录默认不存在，在运行 Artisan 命令 make:job 时生成，用于存放应用中的队列任务
  * Listeners/ 包含了用来处理事件的类。事件监听器接收事件实例并执行响应该事件被触发的逻辑。例如，UserRegistered 事件可能由 SendWelcomeEmail 监听器处理
  * Mail/ 此目录默认不存在，在运行 Artisan 命令 make:mail 时生成，目录包含应用所有的邮件发送类
  * Notifications/ 此目录默认不存在，在运行 Artisan 命令 make:notification 时生成，目录包含应用发送的所有事务性通知
  * Policies/ 此目录默认不存在，在运行 Artisan 命令 make:policy 时生成，目录包含了应用的授权策略类
  * Providers/ 包含了应用的所有 服务提供器。服务提供器通过在服务容器中绑定服务、注册事件、以及执行其他任务来为即将到来的请求做准备来启动应用
  * Roles/ 此目录默认不存在，在运行 Artisan 命令 make:rule 命令时生成，目录包含应用自定义验证规则对象
* bootstarp/ 包含引导框架并配置自动加载的文件。该目录还包含了一个 cache 目录，存放着框架生成的用来提升性能的文件，比如路由和服务缓存文件
* config/ 包含应用程序所有的配置文件
* databse/  包含数据填充和迁移文件。你还可以把它作为 SQLite 数据库存放目录
* public/ 包含了入口文件 index.php，它是进入应用程序的所有请求的入口点。此目录还包含了一些资源文件，图片、JavaScript 和 CSS
* resources/ 包含了视图和未编译的资源文件（如 LESS、SASS 或 JavaScript）。此目录还包含所有的语言文件
* routes 包含了应用的所有路由定义，Laravel 默认包含了几个路由文件：web.php、api.php、 console.php 和 channels.php
  * web.php 包含 RouteServiceProvider 放置在 web 中间件组中的路由，它提供会话状态、CSRF 防护和 cookie 加密。如果应用不提供无状态的、RESTful 风格的 API，则所有的路由都应该在 web.php 文件中定义
  * api.php 包含 RouteServiceProvider 放置在 api 中间件组中的路由，它提供了频率限制。这些路由都是无状态的，所以通过这些路由进入应用请求旨在通过令牌进行身份认证，并且不能访问会话状态
  * console.php 定义所有基于闭包的控制台命令的地方。每个闭包都被绑定到一个命令实例并且允许和命令行 IO 方法进行简单的交互。尽管这些文件没有定义 HTTP 路由，但它也将基于控制台的入口点（路由）定义到应用程序中
  * channels.php 用来注册你的应用支持的所有的事件广播渠道的地方
* storage/ 包含编译的 Blade 模板、基于文件的会话和文件缓存、以及框架生成的其他文件
  * app/ 可以用来存储应用生成的任何文件
  * framework/ 用来存储框架生成的文件和缓存
  * logs/ 包含应用的日志文件
* tests/ 包含自动化测试文件
* vendor/ 包含 Composer 依赖包

:::

以上列出了 Laravel 工程的部分目录，详见 [Laravel 的文件夹结构](https://learnku.com/docs/laravel/5.5/structure/1284#04793c)。Laravel 没有严格地限制任何给定的类的位置，你可以按照喜好整理应用的目录结构，只要它们能被 Composer 自动加载。

Laravel 框架的所有配置文件都保存在 config 目录中。在新安装好的 Laravel 应用程序中，其根目录会包含一个`.env.example`文件。如果是通过 Composer 安装的 Laravel，该文件会自动更名为`.env`。否则，需要你手动更改一下文件名。
应用程序当前所处环境是通过`.env`文件中的 APP\_ENV 变量确定的。

PHP 中与数据库交互的模型称之为 **Eloquent**，它并不需要像 Java 一样定义 Entity 实体，倒像是 Java 的 Dao 层。默认把 Eloquent 的模型放在 app 目录下，并且允许开发者自行选择放置在何处。

## 4. 部署方式

使用 Nginx 部署 Laravel 工程，常见[文档](https://laravel.com/docs/5.5/deployment#nginx)
