You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目中获取TinyMCE内容及解决空对象赋值报错问题

Laravel集成TinyMCE后提交内容报错的解决方案

核心错误原因

“Attempt to assign property "Contenuto" on null” 表明 getTextByID($id) 返回了null,即根据传入的ID找不到对应的Text模型实例。结合代码和问题场景,主要问题出在模型查询逻辑,其次需确保表单数据正确传递。

分步解决方案

1. 修正模型查询逻辑

从注释的旧代码来看,数据库表的主键可能是text_id而非Laravel默认的id,这会导致Text::find($id)无法找到记录:

  • 方法一:修改模型主键配置
    在Text模型中指定主键字段:

    class Text extends Model
    {
        protected $primaryKey = 'text_id'; // 匹配数据库主键
        protected $fillable = ['Contenuto']; // 允许直接赋值该字段
    }
    

    之后getTextByID方法可保留find($id)写法。

  • 方法二:修改查询语句
    若不想修改模型,直接调整getTextByID的查询逻辑:

    public function getTextByID($id)
    {
        return Text::where('text_id', $id)->first();
    }
    

2. 增加空值判断避免报错

在pageStore方法中,先检查查询结果是否存在,再执行更新:

public function pageStore($id, $contenuto) {
    $text = $this->getTextByID($id); // 无需重新实例化DataLayer,直接用$this调用自身方法
    if (!$text) {
        throw new \RuntimeException("ID为{$id}的文本记录不存在");
        // 或根据业务需求返回错误信息,比如:return false;
    }
    $text->Contenuto = $contenuto;
    $text->save();
}

3. 确保表单数据正确传递

  • 你已给textarea添加name="Contenuto",这一步正确,确保控制器能捕获字段值。
  • 在控制器更新方法中,正确获取请求参数并验证:
    public function update(Request $request, $id)
    {
        // 验证字段必填
        $request->validate([
            'Contenuto' => 'required',
        ]);
        
        $dl = new DataLayer();
        $dl->pageStore($id, $request->input('Contenuto'));
        
        return redirect()->back()->with('success', '内容已更新');
    }
    

4. 验证TinyMCE内容同步

确保TinyMCE初始化正确,提交表单时内容同步到textarea:

tinymce.init({
    selector: '#contenuto',
    // 其他配置项...
    setup: function (editor) {
        editor.on('submit', function () {
            editor.save(); // 强制编辑器内容同步到textarea
        });
    }
});

内容的提问来源于stack exchange,提问作者Gianandrea Bertocchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:35:01