构建和交付
使用 专为
提高生产力而打造的工具
构建软件

Laravel 为 Web 工匠提供完整的生态系统。我们的开源 PHP 框架、产品、软件包和入门套件提供构建、部署和监控 Web 应用程序所需的一切。

观看视频 2 分钟

受到全球数千家公司的信任

生态系统

一个拥有强大生态系统的 PHP 框架

Laravel 开箱即用,为所有现代 Web 应用程序所需的常用功能提供了优雅的解决方案。我们的第一方软件包为特定问题提供主观的解决方案,因此您无需重新发明轮子。

后端

代码不言自明

简洁、优雅的语法驱动惊人的功能。每个功能都经过深思熟虑,旨在创造周到且有凝聚力的开发体验。

身份验证

1向您的 Laravel 路由添加身份验证中间件

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

2您可以通过 Auth facade 访问已验证的用户

                                                    
1use Illuminate\Support\Facades\Auth;
2 
3$user = Auth::user();

阅读身份验证文档

授权

1为您的模型定义策略

                                                    
1public function update(User $user, Post $post): Response
2{
3 return $user->id === $post->user_id
4 ? Response::allow()
5 : Response::deny('You do not own this post.');
6}

2通过 Gate facade 使用策略

                                                    
1Gate::authorize('update', $post);

阅读授权文档

Eloquent

1为您的数据库表定义模型

                                                    
1<?php
2 
3namespace App\Models;
4 
5use Illuminate\Database\Eloquent\Model;
6 
7class Flight extends Model
8{
9 // ...
10}

2使用 Eloquent 从数据库检索记录

                                                    
1use App\Models\Flight;
2 
3foreach (Flight::all() as $flight) {
4 echo $flight->name;
5}

阅读 Eloquent 文档

迁移

1为您的数据库表创建迁移

                                                    
1php artisan make:migration create_posts_table --create=posts

2在您的迁移文件中定义架构

                                                    
1class CreatePostsTable extends Migration
2{
3 public function up()
4 {
5 Schema::create('posts', function (Blueprint $table) {
6 $table->id();
7 $table->string('title');
8 $table->text('content');
9 $table->foreignId('user_id')->constrained()->onDelete('cascade');
10 $table->timestamps();
11 });
12 }
13}

阅读迁移文档

验证

1在您的控制器中定义验证规则

                                                    
1public function store(Request $request)
2{
3 $validated = $request->validate([
4 'title' => 'required|max:255',
5 'content' => 'required',
6 'email' => 'required|email',
7 ]);
8}

2在您的视图中处理验证错误

                                                    
1@if ($errors->any())
2 <div class="alert alert-danger">
3 <ul>
4 @foreach ($errors->all() as $error)
5 <li>{{ $error }}</li>
6 @endforeach
7 </ul>
8 </div>
9@endif

阅读验证文档

通知和邮件

1定义通知内容

                                                    
1class PostCreated extends Notification
2{
3 public function via()
4 {
5 return ['mail', 'database']; // Send via mail and store in database
6 }
7 
8 public function toMail($notifiable)
9 {
10 return (new MailMessage)
11 ->subject('New Post Created')
12 ->line('A new post has been created: ' . $this->post->title)
13 ->action('View Post', url('/posts/' . $this->post->id))
14 ->line('Thank you for using our application!');
15 }
16}

2向用户发送通知

                                                    
1public function store(Request $request)
2{
3 $post = Post::create($request->all());
4 
5 $request->user()->notify(new PostCreated($post));
6}

阅读通知和邮件文档

文件存储

1配置您的文件系统

                                                    
1FILESYSTEM_DRIVER=s3

2在您的控制器中处理文件上传

                                                    
1public function store(Request $request)
2{
3 if ($request->hasFile('image')) {
4 $path = $request->file('image')->store('images', 'public');
5 }
6}

阅读文件存储文档

作业队列

1定义作业逻辑

                                                    
1class ProcessPost implements ShouldQueue
2{
3 public function handle()
4 {
5 $this->post->update([
6 'rendered_content' => Str::markdown($this->post->content)
7 ]);
8 }
9}

2从您的控制器调度作业

                                                    
1public function store(Request $request)
2{
3 $post = Post::create($request->all());
4 
5 ProcessPost::dispatch($post);
6}

阅读队列文档

任务调度

1定义命令逻辑

                                                    
1class SendEmails extends Command
2{
3 protected $signature = 'emails:send';
4 
5 protected $description = 'Send scheduled emails';
6 
7 public function handle()
8 {
9 // Send your emails...
10 }
11}

2调度任务

                                                    
1Schedule::command('emails:send')->daily();

阅读任务调度文档

测试

1使用 Pest 编写您的测试

                                                    
1it('can create a post', function () {
2 $response = $this->post('/posts', [
3 'title' => 'Test Post',
4 'content' => 'This is a test post content.',
5 ]);
6 
7 $response->assertStatus(302);
8 
9 $this->assertDatabaseHas('posts', [
10 'title' => 'Test Post',
11 ]);
12});

2在命令行上运行测试

                                                    
1php artisan test

阅读测试文档

事件和 WebSockets

1创建您的事件

                                                    
1class PostCreated implements ShouldBroadcast
2{
3 use Dispatchable, SerializesModels;
4 
5 public $post;
6 
7 public function __construct(Post $post)
8 {
9 $this->post = $post;
10 }
11}

2在您的控制器中调度事件

                                                    
1public function store(Request $request)
2{
3 $post = Post::create($request->all());
4 
5 PostCreated::dispatch($post);
6}

3在您的 JavaScript 文件中,监听事件

                                                    
1Echo.channel("posts." + postId).listen("PostCreated", (e) => {
2 console.log("Post created:", e.post);
3});

阅读事件文档

前端

适用于任何技术栈的前端

无论您喜欢传统的 PHP 后端、使用 Laravel Livewire 的现代前端,还是对 React 和 Vue 百用不厌,Laravel 都使您能够在极短的时间内交付高度完善且可维护的应用程序。

                                                    
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}
                                                    
1export default ({ users }) => {
2 return (
3 <div>
4 <h1>Users</h1>
5 <ul>
6 {users.map((user) => (
7 <li key={user.id}>{user.name}</li>
8 ))}
9 </ul>
10 </div>
11 );
12};

Inertia

现代巨石应用

Laravel Inertia 为您的 Laravel 体验增添动力,并与 React、Vue 和 Svelte 无缝协作。Inertia 处理后端和前端之间的路由和数据传输,无需构建 API 或维护两组路由。

阅读 Inertia 文档

                                                    
1class Counter extends Component
2{
3 public $count = 1;
4 
5 public function increment()
6 {
7 $this->count++;
8 }
9 
10 public function decrement()
11 {
12 $this->count--;
13 }
14 
15 public function render()
16 {
17 return view('livewire.counter');
18 }
19}
                                                    
1<div>
2 <h1>{{ $count }}</h1>
3 
4 <button wire:click="increment">+</button>
5 
6 <button wire:click="decrement">-</button>
7</div>

Livewire

超能力 Blade

Laravel Livewire 通过将动态、响应式界面直接引入您的 Blade 模板,从而改变您的 Laravel 应用程序。Livewire 无缝地弥合了服务器端渲染和客户端交互之间的差距,使您能够在 Laravel 的舒适环境中创建现代、交互式组件。

阅读 Livewire 文档

                                                    
1Route::get('/api/user', function (Request $request) {
2 return $request->user();
3})->middleware('auth:sanctum');

SPA 和移动应用

内置身份验证

Laravel 使开发人员能够轻松高效地为单页应用程序 (SPA) 和移动应用程序构建强大的后端。凭借对 RESTful API、身份验证和数据库管理的内置支持,Laravel 简化了将后端连接到 Vue.js 或 React 等现代前端框架的过程。

阅读 Sanctum 文档

部署

托管或自托管部署平台

Laravel Cloud 为 Laravel 应用程序提供完全托管的应用程序平台,而 Forge 允许您自行管理运行 Laravel 应用程序的 VPS 服务器。

Cloud

云端

产品

一个完全托管的应用程序平台,专为只想交付下一个伟大创意的开发人员和团队而构建。

计划起价 $0.00 / 月

Forge

Forge

产品

在 DigitalOcean、Akamai、Vultr、Amazon、Hetzner 等平台上配置 VPS 服务器并部署无限的 PHP 应用程序。

计划起价 $12.00 / 月

监控

应用监控,日志记录和测试

每个 Laravel 应用程序都可以通过监控、可观测性和测试工具实现企业级质量,这些工具使您能够自信地交付产品。

Nightwatch

Nightwatch

产品

专为 Laravel 开发人员和需要确切了解其应用程序中发生情况的团队构建的监控工具。

价格即将推出

Pulse

Pulse

软件包

一目了然地洞察您应用程序的性能和使用情况。 追踪慢作业和端点等瓶颈,查找最活跃的用户等等。

免费

Telescope

Telescope

软件包

一个优雅的调试助手,可深入了解进入您应用程序的请求、异常、日志条目、数据库查询、排队的作业等等。

免费

Pest

Pest

软件包

Pest 是一个专注于简洁性的测试框架,经过精心设计,旨在带回 PHP 测试的乐趣。

免费

社区

受到开发人员、初创公司和企业的信任

加入全球成千上万的开发人员和公司的行列。

“我使用 Laravel 已经将近十年了,从未想过要换用其他任何东西。”
Adam Wathan Tailwind 创始人
Adam Wathan
“Laravel 是我们用于大大小小的 Web 项目的酵母和多功能工具。 10 年过去了,它仍然新鲜且有用。”
Ian Callahan 哈佛艺术博物馆
Ian Callahan
“Laravel 消除了构建现代、可扩展 Web 应用程序的痛苦。”
Aaron Francis Try Hard Studios 联合创始人
Aaron Francis
“Laravel 成长为一个了不起且活跃的社区。Laravel 不仅仅是一个 PHP 框架。”
Bobby Bouwmann Enrise 开发人员
Bobby Bouwmann
“Laravel 是 PHP 生态系统中的一股清流,周围有一个出色的社区。”
Erika Heidi Minicli 创建者
Erika Heidi
“框架、生态系统和社区 - 这是一个完美的组合。”
Zuzana Kunckova Larabelles 创始人
Zuzana Kunckova
“使用 Laravel 交付应用程序意味着在性能、灵活性和简洁性之间取得平衡,同时确保出色的开发人员体验。”
Peter Steenbergen Elastic
Peter Steenbergen
“AI 开发进展迅速。借助 Laravel,交付 AI 驱动的应用程序从未如此简单。”
Jordan Price Bestie AI
Jordan Price
“借助 Laravel,我们可以在几个月内为客户构建可扩展、高性能的 Web 应用程序和 API,否则这将需要数年时间。”
Matt Stauffer Tighten
Matt Stauffer
“Laravel 一流的测试工具让我安心快速交付强大的应用程序。”
Michael Dyrynda Laravel Artisan + Laracon AU 组织者
Michael Dyrynda
“Laravel 使创建每天处理数亿个请求和数十亿后台任务的服务变得非常简单。”
Sebastien Armand Square 开发人员
Sebastien Armand
“Laravel 帮助我比任何其他解决方案更快地推出产品,使我能够随着社区的发展更快地进入市场。”
Steve McDougall Laravel Transporter 创建者
Steve McDougall
“Laravel 就像我职业和事业的火箭燃料。”
Chris Arter Bankrate 开发人员
Chris Arter
“在过去的十年中,我一直将 Laravel 用于每个项目,直到今天,仍然没有其他框架可以与之媲美。”
Philo Hermans Anystack 创始人
Philo Hermans
“我已经使用 Laravel 超过 10 年了,我无法想象没有它如何使用 PHP。”
Eric L. Barnes Laravel News 创始人
Eric L. Barnes
“Laravel 适合那些因为能够编写代码而编写代码,而不是因为不得不编写代码的开发人员。”
Luke Downing 创作者 + 开发人员
Luke Downing
“Laravel 生态系统是我们业务成功的不可或缺的一部分。该框架使我们能够快速行动并定期交付产品。”
Jack Ellis Fathom Analytics 创始人
Jack Ellis
“多年来,我一直很欣赏 Laravel 专注于将 DX 推向新的高度。 它设计精良,文档非常出色。”
Freek Van der Herten Spatie 所有者
Freek Van der Herten
“Laravel 简直是一种乐趣。 它让我在创纪录的速度和喜悦中构建任何我想要的 Web 相关的东西。”
Caleb Porzio Livewire 和 Alpine.js 创建者
Caleb Porzio
“直到我尝试了(许多)不同的生态系统,我才充分体会到 Laravel 的一站式解决方案。 Laravel 是独一无二的!”
Joseph Silber Bouncer 创建者
Joseph Silber

准备好创建您的下一个伟大创意了吗?

立即开始并交付一些令人惊叹的东西。

Laravel 是构建、部署和监控软件的最有效方式。
构建、部署和监控软件。