PHP 框架入门:Laravel 基础教程(2026实战)

小飞兽 PHP 436 次阅读 2026-04-24

引言

Laravel 是目前最流行的 PHP 框架之一,它的核心理念是"让开发成为一种享受"。本文从实际项目出发,讲清楚 Laravel 入门必须掌握的核心概念。

一、Laravel 是什么

Laravel 是 Taylor Otwell 于 2011 年创建的 PHP 框架,它汲取了 Ruby on Rails、Symfony 等框架的优点,主打:

  • <strong>优雅的语法</strong>:代码写出来就像自然语言

  • <strong>丰富的功能</strong>:认证、队列、邮件、缓存全部内置

  • <strong>强大的生态</strong>: Composer 包超过 10 万个

环境要求

# Laravel 10 环境要求
PHP >= 8.1
BCMATH PHP 扩展
Ctype PHP 扩展
JSON PHP 扩展
PDO PHP 扩展
Tokenizer PHP 扩展
XML PHP 扩展

二、Composer 创建第一个项目

# 方式一:直接创建(推荐)
composer create-project laravel/laravel my-blog
cd my-blog

# 方式二:安装后手动配置
composer global require laravel/installer
laravel new my-blog

创建完成后,目录结构如下:

my-blog/
├── app/           # 应用核心代码
├── bootstrap/     # 框架启动文件
├── config/        # 配置文件
├── database/      # 数据库迁移和填充
├── public/        # 公开访问目录
├── resources/     # 视图和语言文件
├── routes/        # 路由定义
├── storage/       # 存储文件(日志、上传)
├── tests/         # 测试文件
└── vendor/        # Composer 依赖

三、路由与控制器

Laravel 的请求流程非常清晰:

请求 → 路由 → 控制器 → 视图/JSON响应

定义路由

打开 routes/web.php:

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

// 路由闭包
Route::get('/', function () {
    return view('welcome');
});

// 指向控制器的路由
Route::get('/posts', [PostController::class, 'index']);
Route::get('/posts/{id}', [PostController::class, 'show']);

创建控制器

php artisan make:controller PostController

编辑 app/Http/Controllers/PostController.php:

namespace App\Http\Controllers;

class PostController extends Controller
{
    public function index()
    {
        $posts = [
            ['id' => 1, 'title' => 'Laravel 入门', 'author' => '张三'],
            ['id' => 2, 'title' => 'Vue3 教程', 'author' => '李四'],
        ];
        return view('posts.index', compact('posts'));
    }

    public function show($id)
    {
        return response()->json([
            'id' => $id,
            'title' => '示例文章',
            'content' => '文章正文内容...'
        ]);
    }
}

四、数据库与 Eloquent ORM

Laravel 自带 Eloquent ORM,让数据库操作变得异常简单。

创建迁移文件

php artisan make:migration create_posts_table

编辑生成的迁移文件 database/migrations/xxxx_create_posts_table.php:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('content');
            $table->string('author');
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};

执行迁移

php artisan migrate

创建模型

php artisan make:model Post

编辑 app/Models/Post.php:

namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = ['title', 'content', 'author'];
}

使用模型

// 插入数据
$post = Post::create([
    'title' => 'Laravel 入门教程',
    'content' => '本文介绍 Laravel 的核心概念...',
    'author' => '小飞兽'
]);

// 查询数据
$allPosts = Post::all();
$post = Post::find(1);
$recentPosts = Post::orderBy('created_at', 'desc')->take(10)->get();

// 更新数据
$post->title = '新的标题';
$post->save();

// 删除数据
$post->delete();

五、Blade 视图模板

Laravel 自带 Blade 模板引擎,语法简洁有力。

创建 resources/views/posts/index.blade.php:

<!DOCTYPE html>
<html>
<head>
    <title>文章列表</title>
    <style>
        .post-card { border: 1px solid #ddd; padding: 16px; margin: 10px 0; }
        .post-title { font-size: 18px; font-weight: bold; color: #333; }
        .post-meta { color: #888; font-size: 14px; }
    </style>
</head>
<body>
    <h1>文章列表</h1>

    forelse ($posts as $post)
        <div class="post-card">
            <div class="post-title">{{ $post["title"] }}</div>
            <div class="post-meta">作者:{{ $post["author"] }} | ID:{{ $post["id"] }}</div>
        </div>
    @empty
        <p>暂无文章</p>
    @endforelse

</body>
</html>

Blade 常用指令:

<!-- 条件判断 -->
@if ($posts->count() > 0)
    <p>共有 {{ $posts->count() }} 篇文章</p>
@else
    <p>暂无文章</p>
@endif

<!-- 循环 -->
@foreach ($posts as $post)
    <h3>{{ $loop->iteration }}. {{ $post->title }}</h3>
@endforeach

<!-- 转义输出(防 XSS)-->
{{ $userInput }}

<!-- 不过滤输出 -->
{!! $htmlContent !!}

六、常见问题

Q1:访问 localhost 报 404 或 500?

# 确保 storage 目录权限正确
chmod -R 775 storage bootstrap/cache

# 如果是 Linux + Apache,确认 .htaccess 生效
sudo a2enmod rewrite

Q2:Eloquent 查不到数据但数据库里有?

检查模型是否设置了 fillable 或 table 名:

class Post extends Model
{
    protected $table = 'my_posts'; // 明确指定表名
}

Q3:页面空白没有报错信息?

.env 文件检查:

APP_DEBUG=true
APP_ENV=local

Q4:session 总是失效?

SESSION_DRIVER=file
SESSION_LIFETIME=120

七、运行效果

启动开发服务器并访问:

php artisan serve
# 输出:Laravel development server started: <http://127.0.0.1:8000>

打开浏览器访问 http://127.0.0.1:8000/posts,可以看到文章列表页面。

八、总结

Laravel 入门只需掌握五个核心:

| 概念 | 作用 | 关键文件 |
|------|------|---------|
| 路由 | URL 映射到控制器 | routes/web.php |
| 控制器 | 处理业务逻辑 | app/Http/Controllers/ |
| 模型 | 数据库操作 | app/Models/ |
| 视图 | 页面渲染 | resources/views/ |
| 迁移 | 数据库版本控制 | database/migrations/ |

掌握这些后,继续学习中间件、队列、事件等进阶功能,Laravel 的世界远比想象丰富。