# 创建前台控制器和路由
## 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 路由 | ✅ |
---