搜索

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

[板块6:前台展示] - 09- 修复双重渲染导致导航栏重复显示问题

代码示例
# 修复前端页面双重渲染导致导航栏重复显示

## 1。问题描述

线上环境访问官网首页时,顶部导航栏出现两次(重复显示)。本地开发环境正常,代码完全相同。

## 2。原因分析

1. `PageRenderService::render()` 方法不仅渲染了组件内容,还调用了 `wrapWithLayout()` 将内容包裹成完整的 HTML 页面(包含导航栏)
2. `PageController` 返回视图时,又将这个完整的 HTML 页面赋值给 `$content`,嵌入到 `app.blade.php` 布局中
3. 导致同一个页面被嵌套了两次,导航栏也随之重复出现

## 3。解决方案

修改 `PageRenderService::render()` 方法,只返回组件内容,布局统一由 `PageController` 通过视图渲染。

**修改文件**:`app/Services/PageRenderService.php`

**修改前**:

```php
public function render(Page $page): string
{
    $components = $page->components()->orderBy('sort_order')->get();
    
    $html = '';
    foreach ($components as $component) {
        $html .= $this->renderComponent($component);
    }
    
    return $this->wrapWithLayout($page, $html);
}
```

**修改后**:

```php
public function render(Page $page): string
{
    $components = $page->components()->orderBy('sort_order')->get();
    
    $html = '';
    foreach ($components as $component) {
        $html .= $this->renderComponent($component);
    }
    
    return $html;
}
```

## 4。修改文件清单

| 文件 | 操作 | 说明 |
|------|------|------|
| `app/Services/PageRenderService.php` | 修改 | 移除 `wrapWithLayout` 调用,只返回组件 HTML |

## 5。验证结果

| 验证项 | 预期结果 | 实际结果 |
|--------|---------|---------|
| 前台首页导航栏 | 只显示一次 | ✅ |
| 组件内容 | 正常渲染 | ✅ |
| 静态页面生成 | 导航栏正常 | ✅ |

## 6。提交记录

```bash
git add app/Services/PageRenderService.php
git commit -m "fix(render): 修复双重渲染导致导航栏重复显示问题"
git push origin main


🧸 adorable code

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

hello@adorablecode.com