《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的Laravel 是一个具有表现力、优雅语法的 Web 应用程序框架。
Laravel 是一个具有表现力、优雅语法的 Web 应用程序框架,Laravel 致力于提供令人惊叹的开发人员体验,同时提供强大的功能,例如彻底的依赖注入、富有表现力的数据库抽象层、队列和计划作业、单元和集成测试等等,无论你是 PHP Web 框架的新手还是有多年的经验,Laravel 都是一个可以与你一起成长的框架。
Laravel特性
- 简单、快速的路由引擎。
- 强大的依赖注入容器。
- 用于会话和缓存存储的多个后端。
- 富有表现力、直观的数据库 ORM。
- 与数据库无关的模式迁移。
- 强大的后台作业处理。
- 实时事件广播。
Laravel安装
macOS 入门
如果你在 Mac 上开发并且已经安装了Docker Desktop ,你可以使用一个简单的终端命令来创建一个新的 Laravel 项目。例如,要在名为“example-app”的目录中创建一个新的 Laravel 应用程序,您可以在终端中运行以下命令:
curl -s "https://laravel.build/example-app" | bash
当然,您可以将此 URL 中的“example-app”更改为您喜欢的任何内容 - 只需确保应用程序名称仅包含字母数字字符、破折号和下划线。Laravel 应用程序的目录将在您执行命令的目录中创建。
创建项目后,您可以导航到应用程序目录并启动 Laravel Sail。Laravel Sail 提供了一个简单的命令行界面,用于与 Laravel 的默认 Docker 配置进行交互:
cd example-app
./vendor/bin/sail up
第一次运行 Sailup命令时,Sail 的应用程序容器将在您的本地计算机上构建。这可能需要几分钟。不用担心,随后尝试启动 Sail 会快得多。
在 Windows 上开始
在我们在您的 Windows 机器上创建新的 Laravel 应用程序之前,请确保安装Docker Desktop。接下来,您应该确保已安装并启用 Windows Subsystem for Linux 2 (WSL2)。WSL 允许您在 Windows 10 上本地运行 Linux 二进制可执行文件。
启动Windows 终端并为您的 WSL2 Linux 操作系统开始一个新的终端会话。接下来,您可以使用一个简单的终端命令来创建一个新的 Laravel 项目。例如,要在名为“example-app”的目录中创建一个新的 Laravel 应用程序,您可以在终端中运行以下命令:
curl -s https://laravel.build/example-app | bash
当然,您可以将此 URL 中的“example-app”更改为您喜欢的任何内容 - 只需确保应用程序名称仅包含字母数字字符、破折号和下划线。Laravel 应用程序的目录将在您执行命令的目录中创建。
创建项目后,您可以导航到应用程序目录并启动 Laravel Sail。Laravel Sail 提供了一个简单的命令行界面,用于与 Laravel 的默认 Docker 配置进行交互:
cd example-app
./vendor/bin/sail up
第一次运行 Sailup命令时,Sail 的应用程序容器将在您的本地计算机上构建。这可能需要几分钟。不用担心,随后尝试启动 Sail 会快得多。
Linux 入门
如果你在 Linux 上开发并且已经安装了Docker Compose ,你可以使用一个简单的终端命令来创建一个新的 Laravel 项目。例如,要在名为“example-app”的目录中创建一个新的 Laravel 应用程序,您可以在终端中运行以下命令:
curl -s https://laravel.build/example-app | bash
当然,您可以将此 URL 中的“example-app”更改为您喜欢的任何内容 - 只需确保应用程序名称仅包含字母数字字符、破折号和下划线。Laravel 应用程序的目录将在您执行命令的目录中创建。
创建项目后,您可以导航到应用程序目录并启动 Laravel Sail。Laravel Sail 提供了一个简单的命令行界面,用于与 Laravel 的默认 Docker 配置进行交互:
cd example-app
./vendor/bin/sail up
第一次运行 Sailup命令时,Sail 的应用程序容器将在您的本地计算机上构建。这可能需要几分钟。不用担心,随后尝试启动 Sail 会快得多。
Laravel 全栈框架
Laravel 可以作为一个全栈框架。“全栈”框架是指您将使用 Laravel 将请求路由到您的应用程序,并通过Blade 模板或单页应用程序混合技术(如Inertia.js )呈现您的前端。这是使用 Laravel 框架最常见的方式,在我们看来,也是使用 Laravel 最有效的方式。
如果这是您计划使用 Laravel 的方式,您可能需要查看我们关于路由、视图或Eloquent ORM的文档。此外,您可能有兴趣了解Livewire和Inertia.js等社区软件包。这些包允许您将 Laravel 用作全栈框架,同时享受单页 JavaScript 应用程序提供的许多 UI 优势。
Laravel API 后端
Laravel 也可以作为 JavaScript 单页应用程序或移动应用程序的 API 后端。例如,您可以使用 Laravel 作为Next.js应用程序的 API 后端。在这种情况下,您可以使用 Laravel 为您的应用程序提供身份验证和数据存储/检索,同时还可以利用 Laravel 的强大服务,例如队列、电子邮件、通知等。
Laravel 部署
服务器要求
- PHP >= 8.0
- BCMath PHP 扩展
- Ctype PHP 扩展
- cURL PHP 扩展
- DOM PHP 扩展
- 文件信息 PHP 扩展
- JSON PHP 扩展
- Mbstring PHP 扩展
- OpenSSL PHP 扩展
- PCRE PHP 扩展
- PDO PHP 扩展
- 标记器 PHP 扩展
- XML PHP 扩展
Nginx
如果您将应用程序部署到运行 Nginx 的服务器上,您可以使用以下配置文件作为配置 Web 服务器的起点。最有可能的是,需要根据您的服务器配置自定义此文件。
请确保,就像下面的配置一样,您的 Web 服务器将所有请求定向到您的应用程序public/index.php文件。您永远不应尝试将index.php文件移动到项目的根目录,因为从项目根目录提供应用程序会将许多敏感配置文件暴露给公共 Internet:
server {
listen 80;
listen [::]:80;
server_name example.com;
root /srv/example.com/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
部署到生产环境时,请确保您正在优化 Composer 的类自动加载器映射,以便 Composer 可以快速找到要为给定类加载的正确文件:
php artisan config:cache
该命令会将 Laravel 的所有配置文件合并到一个缓存文件中,这大大减少了框架在加载配置值时必须访问文件系统的次数。
Laravel 请求生命周期
第一步
对 Laravel 应用程序的所有请求的入口点是public/index.php文件。所有请求都由您的 Web 服务器(Apache / Nginx)配置定向到该文件。该index.php文件不包含太多代码。相反,它是加载框架其余部分的起点。
该index.php文件加载 Composer 生成的自动加载器定义,然后从bootstrap/app.php. Laravel 本身采取的第一个动作是创建应用程序/服务容器的实例。
HTTP / 控制台内核
接下来,根据进入应用程序的请求类型,将传入请求发送到 HTTP 内核或控制台内核。这两个内核充当所有请求流经的中心位置。现在,让我们只关注位于app/Http/Kernel.php.
HTTP 内核扩展了Illuminate\Foundation\Http\Kernel该类,该类定义了一个数组,该数组bootstrappers将在请求执行之前运行。这些引导程序配置错误处理、配置日志记录、检测应用程序环境,并执行在实际处理请求之前需要完成的其他任务。通常,这些类处理您不需要担心的内部 Laravel 配置。
HTTP 内核方法的方法签名handle非常简单:它接收 aRequest并返回 aResponse。将内核想象成一个代表整个应用程序的大黑匣子。向它提供 HTTP 请求,它将返回 HTTP 响应。
服务供应商
最重要的内核引导操作之一是为您的应用程序加载服务提供者。应用程序的所有服务提供者都在config/app.php配置文件的providers数组中进行配置。
Laravel 将遍历这个提供者列表并实例化它们中的每一个。实例化提供程序后,register将在所有提供程序上调用该方法。然后,一旦注册了所有提供者,boot就会在每个提供者上调用该方法。这样服务提供者可能依赖于每个容器绑定在其boot方法执行时被注册和可用。
服务提供者负责引导框架的所有各种组件,例如数据库、队列、验证和路由组件。基本上 Laravel 提供的每个主要功能都是由服务提供商引导和配置的。由于它们引导和配置框架提供的许多功能,服务提供者是整个 Laravel 引导过程中最重要的方面。
路由
应用程序中最重要的服务提供者之一是App\Providers\RouteServiceProvider. 该服务提供者加载包含在您的应用程序routes目录中的路由文件。
一旦应用程序被引导并且所有服务提供者都已注册,Request将被移交给路由器进行调度。路由器会将请求分派给路由或控制器,并运行任何特定于路由的中间件。
中间件提供了一种方便的机制来过滤或检查进入应用程序的 HTTP 请求。例如,Laravel 包含一个中间件,用于验证您的应用程序的用户是否经过身份验证。如果用户未通过身份验证,中间件会将用户重定向到登录屏幕。但是,如果用户通过了身份验证,中间件将允许请求进一步进入应用程序。
整体
一旦路由或控制器方法返回响应,响应将通过路由的中间件向外传回,使应用程序有机会修改或检查传出响应。
最后,一旦响应通过中间件返回,HTTP 内核的handle方法返回响应对象,并且index.php文件在返回的响应上调用该send方法。该send方法将响应内容发送到用户的网络浏览器。
数据库:入门
配置
Laravel 数据库服务的配置位于应用程序的config/database.php配置文件中。在此文件中,您可以定义所有数据库连接,并指定默认情况下应使用哪个连接。此文件中的大多数配置选项由应用程序环境变量的值驱动。
默认情况下,Laravel 的示例环境配置已准备好与Laravel Sail一起使用,这是用于在本地机器上开发 Laravel 应用程序的 Docker 配置。但是,您可以根据本地数据库的需要随意修改数据库配置。
SQLite 配置
SQLite 数据库包含在文件系统上的单个文件中。touch您可以使用终端中的命令创建一个新的 SQLite 数据库: touch database/database.sqlite. 创建数据库后,您可以轻松地将环境变量配置为指向该数据库,方法是将数据库的绝对路径放在DB_DATABASE环境变量中:
DB_CONNECTION=sqlite
DB_DATABASE=/absolute/path/to/database.sqlite
要为 SQLite 连接启用外键约束,您应该将DB_FOREIGN_KEYS环境变量设置为true:
DB_FOREIGN_KEYS=true
运行 SQL 查询
配置好数据库连接后,您可以使用DB外观运行查询。外观为每种类型的DB查询提供方法:select、update、insert、delete和statement.
要运行基本的 SELECT 查询,您可以使用外观select上的方法:DB
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
class UserController extends Controller
{
/**
* Show a list of all of the application's users.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$users = DB::select('select * from users where active = ?', [1]);
return view('user.index', ['users' => $users]);
}
}
传递给该select方法的第一个参数是 SQL 查询,而第二个参数是需要绑定到查询的任何参数绑定。通常,这些是where子句约束的值。参数绑定提供对 SQL 注入的保护。
该select方法将始终返回一个array结果。数组中的每个结果都是一个 PHPstdClass对象,代表数据库中的一条记录:
use Illuminate\Support\Facades\DB;
$users = DB::select('select * from users');
foreach ($users as $user) {
echo $user->name;
}
—END—
开源协议:MIT license
开源地址:
https://github.com/laravel/laravel