游客

PHP零基础教程-第九课-Laravel框架入门

一言准备中...

一、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

访问 http://localhost:8000

二、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'));
}

七、作业练习

  1. 实现完整的博客系统:

    • 用户认证功能
    • 文章CRUD操作
    • 文章分类管理
    • 评论功能
  2. 添加文章搜索功能:

    • 使用Laravel Scout实现全文搜索
    • 或自己实现基于标题和内容的搜索
  3. 开发API接口:

    • 使用API资源转换层
    • 实现JWT认证
    • 支持分页和过滤
  4. 添加管理后台:

    • 使用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)
  • 性能优化技巧

建议在本地开发环境中完成所有练习,并尝试部署到真实服务器! 🚀

  • 本文作者:菜鬼
  • 本文链接: https://caigui.net/pljcjc--djk-laravelkjrm.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
128
4
0
1
梦想不大,创造神话。

PHP零基础教程-第八课-面向对象编程与MVC

上一篇

PHP零基础教程-第十课-Laravel进阶与项目实战

下一篇
评论区
内容为空

这一切,似未曾拥有