一、Laravel框架概述
1. Laravel特点
- 优雅的语法:简洁易读的代码风格
- 强大的功能:包含路由、ORM、模板引擎等全套组件
- 活跃的生态:丰富的扩展包和社区支持
- 现代化工具:集成Composer、Artisan命令行等
2. 开发环境准备
(1) 安装Composer
# Windows安装
下载并运行Composer-Setup.exe
# Mac/Linux安装
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer
(2) 创建Laravel项目
composer create-project --prefer-dist laravel/laravel blog
cd blog
php artisan serve
二、Laravel基础结构
1. 目录结构解析
app/ # 核心应用代码
Console/ # Artisan命令
Http/ # 控制器、中间件等
Models/ # 数据模型
bootstrap/ # 框架启动文件
config/ # 配置文件
database/ # 数据库迁移和种子
public/ # 入口文件和静态资源
resources/ # 视图和前端资源
views/ # Blade模板
routes/ # 路由定义
web.php # Web路由
api.php # API路由
2. 路由系统
(1) 基础路由
// routes/web.php
Route::get('/', function () {
return view('welcome');
});
Route::get('/about', function () {
return '关于我们';
});
(2) 控制器路由
// 创建控制器
php artisan make:controller ArticleController
// routes/web.php
Route::get('/articles', 'ArticleController@index');
Route::get('/articles/{id}', 'ArticleController@show');
3. 控制器开发
<?php
// app/Http/Controllers/ArticleController.php
namespace App\Http\Controllers;
use App\Models\Article;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::all();
return view('articles.index', compact('articles'));
}
public function show($id)
{
$article = Article::findOrFail($id);
return view('articles.show', compact('article'));
}
}
?>
三、Blade模板引擎
1. 基础模板语法
<!-- resources/views/articles/index.blade.php -->
@extends('layouts.app')
@section('content')
<h1>文章列表</h1>
@if($articles->isEmpty())
<p>暂无文章</p>
@else
<ul>
@foreach($articles as $article)
<li>
<a href="{{ route('articles.show', $article->id) }}">
{{ $article->title }}
</a>
<span>发布于 {{ $article->created_at->diffForHumans() }}</span>
</li>
@endforeach
</ul>
@endif
{{ $articles->links() }} <!-- 分页链接 -->
@endsection
2. 模板继承
<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html>
<head>
<title>@yield('title', '我的博客')</title>
</head>
<body>
@include('partials.header')
<div class="container">
@yield('content')
</div>
@include('partials.footer')
</body>
</html>
四、Eloquent ORM
1. 模型定义
php artisan make:model Article -m # -m选项同时创建迁移文件
<?php
// app/Models/Article.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
protected $fillable = ['title', 'content', 'user_id'];
public function user()
{
return $this->belongsTo(User::class);
}
public function categories()
{
return $this->belongsToMany(Category::class);
}
}
?>
2. 数据库迁移
// database/migrations/xxxx_create_articles_table.php
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->foreignId('user_id')->constrained();
$table->timestamps();
});
}
运行迁移:
php artisan migrate
3. 基本CRUD操作
// 创建
$article = Article::create([
'title' => '新文章',
'content' => '内容...',
'user_id' => 1
]);
// 查询
$article = Article::find(1);
$recentArticles = Article::where('created_at', '>', now()->subDays(7))->get();
// 更新
$article->update(['title' => '更新后的标题']);
// 删除
$article->delete();
五、用户认证系统
1. 快速搭建认证
composer require laravel/ui
php artisan ui bootstrap --auth
npm install && npm run dev
php artisan migrate
2. 自定义认证逻辑
// app/Http/Controllers/Auth/RegisterController.php
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
3. 路由保护
Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', 'DashboardController@index');
Route::resource('articles', 'ArticleController');
});
六、实战:重构博客系统
1. 功能规划
- 用户注册/登录
- 文章发布与管理
- 文章分类
- 评论系统
2. 数据库关系设计
users
id
name
email
password
articles
id
title
content
user_id
created_at
categories
id
name
article_category
article_id
category_id
comments
id
content
user_id
article_id
created_at
3. 核心代码实现
(1) 文章-分类多对多关系
// 附加分类
$article->categories()->attach([1, 2, 3]);
// 同步分类
$article->categories()->sync([1, 3]);
// 查询带分类的文章
$articles = Article::with('categories')->get();
(2) 评论功能
// Comment模型
class Comment extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
public function article()
{
return $this->belongsTo(Article::class);
}
}
// 在ArticleController中
public function show(Article $article)
{
$article->load('comments.user');
return view('articles.show', compact('article'));
}
七、作业练习
-
实现完整的博客系统:
- 用户认证功能
- 文章CRUD操作
- 文章分类管理
- 评论功能
-
添加文章搜索功能:
- 使用Laravel Scout实现全文搜索
- 或自己实现基于标题和内容的搜索
-
开发API接口:
- 使用API资源转换层
- 实现JWT认证
- 支持分页和过滤
-
添加管理后台:
- 使用Laravel Nova或自定义后台
- 实现文章和用户管理
- 添加数据统计仪表盘
八、生产环境部署
1. 基本部署步骤
# 安装依赖
composer install --optimize-autoloader --no-dev
# 生成应用密钥
php artisan key:generate
# 优化配置缓存
php artisan config:cache
php artisan route:cache
php artisan view:cache
2. 环境配置
# .env
APP_ENV=production
APP_DEBUG=false
DB_HOST=127.0.0.1
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=
下节课预告
- Laravel进阶:服务容器与依赖注入
- 队列与任务调度
- 测试驱动开发(TDD)
- 性能优化技巧
建议在本地开发环境中完成所有练习,并尝试部署到真实服务器! 🚀
这一切,似未曾拥有