背后的动力
您的 大创意

Laravel 是一个高产的全栈 Web 框架。将 Laravel 及其丰富的生态系统与 Livewire、React 或 Vue 配对,构建您的下一个大创意,并以您从未想过的速度交付。

开始使用 观看 Laracasts

您所需要的一切,成就非凡。

开箱即用,Laravel 为所有现代 Web 应用程序所需的常见功能提供了优雅的解决方案。现在是时候开始构建令人惊叹的应用程序,并停止浪费时间寻找软件包和重复发明轮子了。

身份验证

验证用户就像向 Laravel 路由定义添加一个验证中间件一样简单

Route::get('/profile', ProfileController::class)
->middleware('auth');

用户经过验证后,你可以通过 Auth 外观访问经过验证的用户

use Illuminate\Support\Facades\Auth;
 
// Get the currently authenticated user...
$user = Auth::user();

当然,你可以定义自己的验证中间件,以便自定义验证过程。

有关 Laravel 验证功能的更多信息,请查看 验证文档

授权

你经常需要检查经过验证的用户是否有权执行特定操作。Laravel 的模型策略让它变得轻而易举

php artisan make:policy UserPolicy

在生成的策略类中定义授权规则后,你可以在控制器方法中授权用户的请求

public function update(Request $request, Invoice $invoice)
{
Gate::authorize('update', $invoice);
 
$invoice->update(/* ... */);
}

了解更多

Eloquent ORM

害怕数据库?别害怕。Laravel 的 Eloquent ORM 使与应用程序的数据交互变得轻松,并且模型、迁移和关系可以快速建立

php artisan make:model Invoice --migration

定义模型结构和关系后,你可以使用 Eloquent 强大且富有表现力的语法与数据库交互

// Create a related model...
$user->invoices()->create(['amount' => 100]);
 
// Update a model...
$invoice->update(['amount' => 200]);
 
// Retrieve models...
$invoices = Invoice::unpaid()->where('amount', '>=', 100)->get();
 
// Rich API for model interactions...
$invoices->each->pay();

了解更多

数据库迁移

迁移就像数据库的版本控制,使你的团队能够定义和共享应用程序的数据库架构定义

public function up(): void
{
Schema::create('flights', function (Blueprint $table) {
$table->uuid()->primary();
$table->foreignUuid('airline_id')->constrained();
$table->string('name');
$table->timestamps();
});
}

了解更多

验证

Laravel 拥有 90 多个强大且内置的验证规则,并且使用 Laravel Precognition,可以在前端提供实时验证

public function update(Request $request)
{
$validated = $request->validate([
'email' => 'required|email|unique:users',
'password' => Password::required()->min(8)->uncompromised(),
]);
 
$request->user()->update($validated);
}

了解更多

通知和邮件

使用 Laravel 通过电子邮件、Slack、短信、应用内等方式快速向用户发送设计精美的通知

php artisan make:notification InvoicePaid

生成通知后,你可以轻松地将消息发送给应用程序的其中一个用户

$user->notify(new InvoicePaid($invoice));

了解更多

文件存储

Laravel 提供了一个强大的文件系统抽象层,为与本地文件系统和基于云的文件系统(如 Amazon S3)的交互提供了一个单一的统一 API

$path = $request->file('avatar')->store('s3');

无论文件存储在哪里,都可以使用 Laravel 简单且优雅的语法与它们进行交互

$content = Storage::get('photo.jpg');
 
Storage::put('photo.jpg', $content);

了解更多

作业队列

Laravel 允许你将慢速作业卸载到后台队列,保持 Web 请求的快速响应

$podcast = Podcast::create(/* ... */);
 
ProcessPodcast::dispatch($podcast)->onQueue('podcasts');

你可以根据需要运行任意数量的队列工作程序来处理工作负载

php artisan queue:work redis --queue=podcasts

为了更直观地了解和控制队列,Laravel Horizon 为 Laravel 驱动的 Redis 队列提供了精美的仪表板和代码驱动的配置。

了解更多

任务计划

使用富有表现力的语法安排定期作业和命令,告别复杂的配置文件

$schedule->job(NotifySubscribers::class)->hourly();

Laravel 的调度程序甚至可以处理多个服务器,并提供内置的重叠预防

$schedule->job(NotifySubscribers::class)
->dailyAt('9:00')
->onOneServer()
->withoutOverlapping();

了解更多

测试

Laravel 是为测试而构建的。从单元测试到浏览器测试,你会对部署应用程序更有信心

$user = User::factory()->create();
 
$this->browse(fn (Browser $browser) => $browser
->visit('/login')
->type('email', $user->email)
->type('password', 'password')
->press('Login')
->assertPathIs('/home')
->assertSee("Welcome {$user->name}")
);

了解更多

事件和 WebSockets

Laravel 的事件允许您在整个应用程序中发送和侦听事件,并且可以轻松地将侦听器分派到后台队列

OrderShipped::dispatch($order);
class SendShipmentNotification implements ShouldQueue
{
public function handle(OrderShipped $event): void
{
// ...
}
}

您的前端应用程序甚至可以使用 Laravel Echo 和 WebSockets 订阅您的 Laravel 事件,从而允许您构建实时动态应用程序

Echo.private(`orders.${orderId}`)
.listen('OrderShipped', (e) => {
console.log(e.order);
});

了解更多

我们只是触及了皮毛。Laravel 涵盖了您构建 Web 应用程序所需的一切,包括电子邮件验证、速率限制和自定义控制台命令。查看 Laravel 文档 以继续学习或立即开始我们的 Laravel 培训营

一个框架,
多种风格。

有数十种方法可以构建应用程序的前端。值得庆幸的是,Laravel 为您提供了广泛的选择。无论您是喜欢传统的 PHP 后端、使用 Laravel Livewire 的现代前端,还是对 React 和 Vue 欲罢不能,Laravel 都允许您在极短的时间内交付精雕细琢且可维护的应用程序。

Laravel Inertia 处理 Laravel 后端和前端之间的路由和数据传输——无需构建 API 或维护两组路由。使用 Laravel 的所有功能,将数据轻松地从您的数据库直接传递到您的前端页面组件的道具中,所有这些都集中在一个奇妙的单一仓库中

UserController.php
1class UserController
2{
3 public function index()
4 {
5 $users = User::active()
6 ->orderByName()
7 ->get(['id', 'name', 'email']);
8 
9 return Inertia::render('Users', [
10 'users' => $users,
11 ]);
12 }
13}
Users.jsx
1import Layout from './Layout'
2 
3export default function Users({ users }) {
4 return (
5 <Layout>
6 {users.map(user => (
7 <Link href={route('users.show', user)}>
8 {user.name} ({user.email})
9 </Link>
10 ))}
11 </Layout>
12 )
13}

Inertia 为您提供了开发体验和创建服务器渲染的多页面应用程序的简单性,同时还具有 JavaScript SPA 的用户体验和响应能力。

您的前端组件可以专注于用户交互,而不是 API 调用和数据处理——无需再手动触发 HTTP 请求和处理响应。

Inertia 甚至为受益于搜索引擎优化的应用程序在初始页面加载时提供服务器端渲染。

了解更多

它是如何工作的?

您的应用程序的初始页面加载将在单个请求中返回由 Inertia 提供支持的 SPA 和页面属性。来自单击链接或提交表单的后续请求将自动仅返回所需的页面属性。

当您部署新资产时,Inertia 将自动执行下一个请求作为完整页面加载,因此您的用户将拥有最新的资产,而不会错过任何内容。

Livewire 是一种使用服务器渲染模板(而不是 JavaScript 框架)构建动态界面的现代方式。它将构建服务器渲染应用程序的简单性和速度与 JavaScript SPA 的用户体验相结合。您必须看到才能相信。

Search.php
1use Livewire\Component;
2 
3class Search extends Component
4{
5 public $search = '';
6 
7 public function render()
8 {
9 $users = User::search($this->search)->get();
10 
11 return view('livewire.search', [
12 'users' => $users,
13 ]);
14 }
15}
search.blade.php
1<div>
2 <input wire:model="search"
3 type="text"
4 placeholder="Search users..." />
5 
6 <ul>
7 @foreach ($users as $user)
8 <li>{{ $user->username }}</li>
9 @endforeach
10 </ul>
11</div>

使用 Livewire 时,您不需要 JavaScript 来管理 DOM 或状态 - 您只需将其用于一些深思熟虑的交互即可。 Alpine.js 是与您的 Livewire 应用程序配对的完美的轻量级 JavaScript 库。

随着 Livewire 组件状态的变化,您的前端将自动更新。但是,Livewire 并没有止步于此。它包括对实时验证、事件处理、文件下载、授权等的全面支持。

了解更多

它是如何工作的?

Livewire 使用 Blade 模板语言在服务器上渲染您的 HTML。它会自动添加使页面具有响应性的 JavaScript,并随着数据的变化自动重新渲染组件并更新 DOM。

不需要前端?没问题。Laravel 是您 JavaScript SPA 和移动应用程序的完美后端 API。您将可以使用 Laravel 的所有功能,同时保留您习惯的前端开发工作流。

UserController.php
1class UserController
2{
3 public function index()
4 {
5 return User::active()
6 ->orderByName()
7 ->paginate(25, ['id', 'name', 'email']);
8 }
9}
result.json
1{
2 "data": [
3 {
4 "id": 1,
5 "name": "Taylor Otwell",
6 "email": "[email protected]",
7 },
8 // ...
9 ],
10 "from": 1,
11 "to": 25,
12 "total": 50,
13 "per_page": 25,
14 "current_page": 1,
15 "last_page": 2,
16 "first_page_url": "https://api.laravel.app/users?page=1",
17 "last_page_url": "https://api.laravel.app/users?page=2",
18 "next_page_url": "https://api.laravel.app/users?page=2",
19 "prev_page_url": null,
20 "path": "https://api.laravel.app/users",
21}

对于身份验证,您可以利用 Laravel 安全的基于 cookie 的身份验证。或者,如果您正在构建移动应用程序或您的前端与后端 API 分开托管,则可以使用 Laravel Sanctum 或 Laravel Passport。

如果您的 API 运行在极端规模上,请将您的 Laravel 应用程序与 Laravel OctaneLaravel Vapor 配对,以便在不费吹灰之力的情况下处理您的流量。

深入了解 入门工具包。

无论您喜欢 Livewire 还是 React,Laravel 的入门工具包都能让您快速上手。在几分钟内,您就可以拥有一个功能齐全的应用程序,它将 Laravel 和 Tailwind 与您选择的任何前端配对。

Laravel Breeze

Laravel Breeze 是一个轻量级的入门工具包,它包含了 Tailwind 样式的身份验证用户个人资料管理模板。

  • 用户注册和登录
  • 密码重置
  • 电子邮件验证
  • 用户个人资料管理
  • Blade 或 Inertia(使用 Vue 或 React)
  • 可选 TypeScript 支持
  • 可选深色模式支持

了解更多

Laravel Jetstream 是一个功能强大的入门工具包,它具有身份验证视图、用户个人资料管理、团队管理等等。

  • 用户注册和登录
  • 密码重置
  • 电子邮件验证
  • 用户个人资料管理
  • 用户个人资料照片
  • Livewire 或 Inertia(使用 Vue)
  • 可选团队管理
  • 可选深色模式等等...

了解更多

社区
和生态系统。

Laravel 最大的优势在于其充满激情的社区和生态系统。享受在全球各地举办的会议,或参加您当地的聚会。从 Laracasts(我们的专用课程平台)中学习,并享受大量的软件包和教程。