PHP 框架入门:Laravel 基础教程(2026实战)
引言
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 的世界远比想象丰富。