搜索

📄 文章 📚 合集
热门搜索
🐘 PHP ⚡ Laravel 🎨 Vue.js ⚛️ React 📦 Yii 📘 JavaScript 🗄️ MySQL 🐳 Docker
返回合集

[板块5:静态页面生成器] - 06- 创建前台控制器和路由

代码示例
# 创建前台控制器和路由

## 1。目标

创建前台控制器和路由,实现用户访问域名时能够正确显示页面。

## 2。修改文件清单

| 文件 | 操作 | 说明 |
|------|------|------|
| `app/Http/Controllers/Frontend/PageController.php` | 新建 | 前台页面控制器 |
| `routes/web.php` | 修改 | 添加前台路由 |

---

## 3。修改详情

### 3.1 创建 Frontend 目录

**执行命令**:

```bash
mkdir app/Http/Controllers/Frontend
```

### 3.2 创建 PageController

**文件路径**:`app/Http/Controllers/Frontend/PageController.php`

**修改前**:无

**修改后**:

```php
<?php

namespace App\Http\Controllers\Frontend;

use App\Http\Controllers\Controller;
use App\Models\Page;
use App\Services\PageRenderService;

class PageController extends Controller
{
    protected $renderService;
    
    public function __construct(PageRenderService $renderService)
    {
        $this->renderService = $renderService;
    }
    
    /**
     * 首页
     */
    public function home()
    {
        $page = Page::where('is_home', true)->first();
        if (!$page) {
            $page = Page::first();
        }
        
        $html = $this->renderService->render($page);
        return response($html);
    }
    
    /**
     * 自定义页面
     */
    public function show($slug)
    {
        $page = Page::where('slug', $slug)->firstOrFail();
        $html = $this->renderService->render($page);
        return response($html);
    }
}
```

**修改原因**:
- `__construct()`:依赖注入页面渲染服务
- `home()`:获取首页(`is_home = true`),如果没有则取第一个页面
- `show()`:根据 URL 中的 slug(如 `about`)查找对应页面并渲染

### 3.3 添加前台路由

**文件路径**:`routes/web.php`

**修改位置**:文件末尾,`require __DIR__.'/auth.php';` 之后

**新增代码**:

```php
use App\Http\Controllers\Frontend\PageController;

// 前台路由(放在最后,避免与后台路由冲突)
Route::get('/', [PageController::class, 'home'])->name('home');
Route::get('/{slug}.html', [PageController::class, 'show'])->name('page.show');
```

**修改原因**:
- `Route::get('/')`:首页路由,调用 `home` 方法
- `Route::get('/{slug}.html')`:自定义页面路由,支持 `/about.html`、`/contact.html` 等格式
- 放在路由文件最后,避免拦截后台路由 `/admin/*`

---

## 4.验证结果

**执行命令**:

```bash
php artisan route:clear
php artisan route:list | grep -E "home|page.show"
```

**预期输出**:

```
GET|HEAD  / .......................................................................... home › Frontend\PageController@home
GET|HEAD  {slug}.html ............................................................... page.show › Frontend\PageController@show
```

| 验证项 | 预期结果 | 实际结果 |
|--------|---------|---------|
| 路由 `/` 注册 | 显示 home 路由 | ✅ |
| 路由 `/{slug}.html` 注册 | 显示 page.show 路由 | ✅ |

---

🧸 adorable code

专注 PHP、JavaScript、Laravel、Vue.js、React、Yii 全栈开发。记录技术探索过程中的灵感与经验,分享工程实践洞见。

hello@adorablecode.com