# 修复前台联系表单不显示问题
## 1。问题描述
在可视化拖拽编辑器中添加「联系表单」组件后,前台页面(`contact.html`)无法正常显示表单,而是显示「组件开发中」的占位文本。
## 2。问题分析
### 2.1 根本原因
`PageRenderService` 类中的 `renderComponent` 方法使用 `'render' . ucfirst($component->component_type)` 来动态拼接渲染方法名。
对于 `component_type` 为 `contact_form` 的组件,拼接结果是 `renderContact_form`,但实际定义的方法名是 `renderContactForm`(驼峰式,无下划线)。由于方法不存在,系统最终执行了 `renderDefault` 方法,输出了「组件开发中」。
### 2.2 影响范围
该问题同样影响 `multi_col`(多列布局)组件的渲染,因为其实际方法名 `renderMultiCol` 与默认拼接规则也不完全匹配。
## 3。解决方案
### 3.1 增加组件类型映射
在 `PageRenderService` 中新增 `getRenderMethod` 方法,用于显式定义需要特殊处理的组件类型与其渲染方法的对应关系。
```php
/**
* 获取渲染方法名
*/
protected function getRenderMethod(string $type): string
{
$map = [
'contact_form' => 'renderContactForm',
'multi_col' => 'renderMultiCol',
];
return $map[$type] ?? 'render' . ucfirst($type);
}
```
### 3.2 修改组件渲染逻辑
将 `renderComponent` 方法中的方法名获取方式改为调用 `getRenderMethod`。
**修改前:**
```php
$method = 'render' . ucfirst($component->component_type);
```
**修改后:**
```php
$method = $this->getRenderMethod($component->component_type);
```
## 4。修改文件清单
| 文件 | 操作 | 说明 |
|------|------|------|
| `app/Services/PageRenderService.php` | 修改 | 增加映射方法,修正渲染逻辑 |
## 5。验证结果
| 验证项 | 预期结果 | 实际结果 |
|--------|---------|---------|
| 联系表单前台显示 | 显示完整的姓名、邮箱、留言输入框及提交按钮 | ✅ |
| 多列布局前台显示 | 正常显示列内容 | ✅ |
## 6。提交记录
```bash
git add app/Services/PageRenderService.php
git commit -m "fix(render): 修复前台联系表单不显示问题"
git push origin main
```