Laravel入门教程:从零开始构建你的第一个PHP应用


环境准备与安装

在开始构建Laravel应用前,需要确保系统满足以下要求:
– PHP 8.0或更高版本
– Composer依赖管理工具
– 数据库服务(MySQL/PostgreSQL/SQLite)
– 基础命令行操作能力

使用Composer全局安装Laravel安装器:

composer global require laravel/installer

创建新项目:

laravel new my-first-app

环境变量配置是Laravel的重要特性,项目根目录的.env文件存储数据库连接、应用密钥等敏感信息。安装后立即执行:

php artisan key:generate

项目结构解析

Laravel采用约定优于配置原则,其标准目录结构包含:

  • app/:核心业务逻辑
    • Http/Controllers:控制器存放位置
    • Models:Eloquent模型
  • database/:数据库迁移和种子文件
  • resources/:视图和前端资源
  • routes/:所有路由定义

现代Laravel项目通常采用领域驱动设计(DDD)变体结构,可通过以下命令创建自定义命名空间:

php artisan make:model Product -mcr

该命令会同时生成模型、迁移、控制器三个文件。

路由与控制器

基础路由定义

routes/web.php中定义基本路由:

Route::get('/products', function () {
    return view('products.index');
});

控制器路由

创建资源控制器:

php artisan make:controller ProductController --resource

对应路由定义:

Route::resource('products', ProductController::class);

RESTful设计是Laravel的核心路由哲学,上述代码会自动生成7个标准路由:
– GET /products → index()
– GET /products/create → create()
– POST /products → store()
– 其他标准方法…

数据库与Eloquent ORM

迁移文件

创建产品表迁移:

php artisan make:migration create_products_table

典型迁移结构:

Schema::create('products', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->text('description');
    $table->decimal('price', 8, 2);
    $table->timestamps();
});

执行迁移:

php artisan migrate

Eloquent模型

基础模型定义:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $fillable = ['name', 'description', 'price'];

    public function scopeExpensive($query)
    {
        return $query->where('price', '>', 100);
    }
}

批量赋值保护通过$fillable$guarded属性实现,这是Laravel的重要安全特性。

视图与Blade模板

基础模板继承

resources/views/layouts/app.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>@yield('title')</title>
</head>
<body>
    @include('partials.header')
    @yield('content')
</body>
</html>

子视图通过@extends继承:

@extends('layouts.app')

@section('title', 'Product List')

@section('content')
    <h1>Products</h1>
    @foreach($products as $product)
        <div>{{ $product->name }}</div>
    @endforeach
@endsection

组件系统

现代Laravel推荐使用Blade组件

<x-alert type="error" :message="$message"/>

创建组件:

php artisan make:component Alert

表单验证与请求处理

表单请求验证

创建独立请求类:

php artisan make:request StoreProductRequest

验证规则定义:

public function rules()
{
    return [
        'name' => 'required|string|max:255',
        'price' => 'required|numeric|min:0',
        'description' => 'nullable|string'
    ];
}

控制器中使用:

public function store(StoreProductRequest $request)
{
    $validated = $request->validated();
    Product::create($validated);
}

验证规则支持超过90种内置验证器,包括条件验证、数组验证等复杂场景。

用户认证系统

Laravel提供完整的认证脚手架

php artisan make:auth

现代版本推荐使用Laravel Breeze或Jetstream:

composer require laravel/breeze --dev
php artisan breeze:install
npm install && npm run dev
php artisan migrate

认证控制器位于app/Http/Controllers/Auth目录,包含:
– 注册逻辑
– 登录验证
– 密码重置
– 邮箱验证

测试与部署

PHPUnit测试

基础功能测试示例:

public function test_product_creation()
{
    $response = $this->post('/products', [
        'name' => 'Test Product',
        'price' => 99.99
    ]);

    $response->assertStatus(302);
    $this->assertDatabaseHas('products', [
        'name' => 'Test Product'
    ]);
}

部署准备

关键部署步骤:
1. 配置生产环境.env
2. 优化自动加载:

composer install --optimize-autoloader --no-dev
  1. 缓存路由和配置:

    php artisan config:cache
    php artisan route:cache
    

生产环境优化还包括:
– 使用OPcache
– 配置队列 worker
– 设置任务调度

现代实践与扩展

API开发

创建API资源:

php artisan make:resource ProductResource

定义转换逻辑:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'price' => $this->price,
        'links' => [
            'self' => route('products.show', $this->id)
        ]
    ];
}

前端集成

Vue/React集成方案:
1. 使用Inertia.js
2. 通过Laravel Mix编译资源
3. 采用Livewire实现实时交互

// webpack.mix.js
mix.js('resources/js/app.js', 'public/js')
   .postCss('resources/css/app.css', 'public/css');

性能优化策略

缓存机制

数据库查询缓存:

$products = Cache::remember('all-products', 3600, function () {
    return Product::all();
});

延迟加载优化

解决N+1查询问题:

// 低效方式
$products = Product::all();
foreach($products as $product) {
    echo $product->category->name;
}

// 优化方式
$products = Product::with('category')->get();

Eager Loading是ORM性能优化的关键手段,可通过Laravel Debugbar等工具监控查询性能。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注