Laravel

技术栈
后端框架
phpmvceloquentartisanbladefull-stack

概览

Laravel\n\nLaravel 是 PHP 生态中最流行的全栈 Web 框架,由 Taylor Otwell 于 2011 年创建。它遵循 MVC 架构模式,以优雅简洁的语法著称。\n\n### 核心特性\n\n- Eloquent ORM:直观的 Active Record 数据库操作\n- Artisan CLI:强大的命令行工具,自动生成代码\n- Blade 模板引擎:轻量、高效的视图层\n- 路由系统:RESTful 路由,支持中间件\n- 队列 & 任务调度:内置队列系统和 Cron 调度\n- 广播 & WebSocket:实时事件广播\n- Sanctum / Passport:API 认证方案\n- 生态丰富:Forge、Vapor、Nova、Spark 等

安装

1. 环境准备

  • OS:Linux / macOS / Windows (WSL2 推荐)
  • PHP:>= 8.1(Laravel 10),>= 8.2(Laravel 11)
  • PHP 扩展:BCMath, Ctype, cURL, DOM, Fileinfo, JSON, Mbstring, OpenSSL, PCRE, PDO, Tokenizer, XML
  • Composer:最新稳定版
  • 数据库:MySQL 5.7+ / PostgreSQL 12+ / SQLite 3+ / SQL Server
  • 可选:Node.js 16+(用于 Vite 前端构建)

2. 安装命令

通过 Composer 创建项目(推荐)

# 全局安装 Laravel 安装器
composer global require laravel/installer

# 创建新项目
laravel new my-app

# 或直接通过 Composer
composer create-project laravel/laravel my-app

启动开发服务器

cd my-app
php artisan serve
# 访问 http://localhost:8000

配置数据库

# 编辑 .env 文件
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

# 运行迁移
php artisan migrate

3. 常见安装问题

权限问题

# Linux/macOS: 确保 storage 和 bootstrap/cache 可写
chmod -R 775 storage bootstrap/cache

Composer 内存不足

COMPOSER_MEMORY_LIMIT=-1 composer create-project laravel/laravel my-app

国内镜像加速

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

应用密钥未生成

php artisan key:generate

示例

Hello World:Laravel 路由与控制器

目标

创建一个 Laravel API 端点,展示路由定义、控制器和 JSON 响应。

完整代码

1. 创建控制器

php artisan make:controller HelloController

2. 编辑 app/Http/Controllers/HelloController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\JsonResponse;

class HelloController extends Controller
{
    public function index(): JsonResponse
    {
        return response()->json([
            'message' => 'Hello, Vibe!',
            'framework' => 'Laravel',
            'php_version' => PHP_VERSION,
            'timestamp' => now()->toIso8601String(),
        ]);
    }

    public function greet(string $name): JsonResponse
    {
        return response()->json([
            'message' => "Hello, {$name}!",
            'powered_by' => 'Laravel',
        ]);
    }
}

3. 编辑 routes/api.php

<?php

use App\Http\Controllers\HelloController;
use Illuminate\Support\Facades\Route;

Route::get('/hello', [HelloController::class, 'index']);
Route::get('/hello/{name}', [HelloController::class, 'greet']);

运行步骤

php artisan serve

预期输出

# 请求
curl http://localhost:8000/api/hello

# 响应
{
  "message": "Hello, Vibe!",
  "framework": "Laravel",
  "php_version": "8.2.12",
  "timestamp": "2024-01-01T00:00:00.000000Z"
}

# 带参数
curl http://localhost:8000/api/hello/World
# {"message": "Hello, World!", "powered_by": "Laravel"}

教程

Laravel 入门教程:从零构建一个 Task API

1. 背景

Laravel 是目前 PHP 生态最流行的框架。本教程带你从零搭建一个 RESTful Task API,学会路由、控制器、模型、迁移和 Eloquent ORM 的核心用法。

2. 前置概念

概念 说明
路由 (Route) 将 URL 映射到控制器方法
控制器 (Controller) 处理 HTTP 请求逻辑
模型 (Model) Eloquent ORM 的数据实体
迁移 (Migration) 数据库版本控制
中间件 (Middleware) 请求过滤层

3. 分步操作

步骤一:创建项目

composer create-project laravel/laravel task-api
cd task-api
php artisan serve

步骤二:创建 Task 模型和迁移

php artisan make:model Task -m

编辑 database/migrations/xxxx_create_tasks_table.php

Schema::create('tasks', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('description')->nullable();
    $table->enum('status', ['pending', 'in_progress', 'done'])->default('pending');
    $table->timestamps();
});

运行迁移:

php artisan migrate

步骤三:编辑模型

app/Models/Task.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    use HasFactory;

    protected $fillable = ['title', 'description', 'status'];

    protected $casts = [
        'status' => 'string',
    ];
}

步骤四:创建控制器

php artisan make:controller Api/TaskController

app/Http/Controllers/Api/TaskController.php

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Task;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class TaskController extends Controller
{
    public function index(): JsonResponse
    {
        return response()->json(Task::all());
    }

    public function store(Request $request): JsonResponse
    {
        $validated = $request->validate([
            'title' => 'required|string|max:255',
            'description' => 'nullable|string',
        ]);

        $task = Task::create($validated);

        return response()->json($task, 201);
    }

    public function show(Task $task): JsonResponse
    {
        return response()->json($task);
    }

    public function update(Request $request, Task $task): JsonResponse
    {
        $validated = $request->validate([
            'title' => 'sometimes|string|max:255',
            'description' => 'nullable|string',
            'status' => 'sometimes|in:pending,in_progress,done',
        ]);

        $task->update($validated);

        return response()->json($task);
    }

    public function destroy(Task $task): JsonResponse
    {
        $task->delete();
        return response()->json(null, 204);
    }
}

步骤五:注册 API 路由

routes/api.php

Route::apiResource('tasks', \App\Http\Controllers\Api\TaskController::class);

4. 验证

# 创建
curl -X POST http://localhost:8000/api/tasks \
  -H "Content-Type: application/json" \
  -d '{"title":"学习 Laravel","description":"阅读官方文档"}'

# 列表
curl http://localhost:8000/api/tasks

# 更新
curl -X PUT http://localhost:8000/api/tasks/1 \
  -H "Content-Type: application/json" \
  -d '{"status":"done"}'

# 删除
curl -X DELETE http://localhost:8000/api/tasks/1

5. 思考题

  1. 如何为 Task 添加用户关联(多对一)?
  2. 如何使用 apiResourceexcept 限制路由?
  3. 如何自定义 404 时的 JSON 响应格式?

参考资料

  1. [1] Laravel Team. Laravel Documentation. 2024. https://laravel.com/docs
  2. [2] Matt Stauffer. Laravel: Up & Running, 2nd Edition. 2019.
  3. [3] Arda Kılıçdağı, H. İbrahim Yılmaz. Laravel Design Patterns and Best Practices. 2014.