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

Laravel/FilamentPHP:刷新创建页面时保存已填写的输入内容

在FilamentPHP中实现创建页面刷新后恢复临时表单数据

实现思路

借助Livewire的生命周期钩子,结合session与浏览器cookie实时保存表单输入的临时数据,页面刷新时自动读取并填充表单内容。

具体代码实现

以文章创建页面为例,修改对应的CreateRecord页面类:

namespace App\Filament\Resources\ArticleResource\Pages;

use App\Filament\Resources\ArticleResource;
use Filament\Resources\Pages\CreateRecord;

class CreateArticle extends CreateRecord
{
    protected static string $resource = ArticleResource::class;

    /**
     * 页面加载时恢复临时数据
     */
    public function hydrate()
    {
        // 仅处理创建页,编辑页跳过
        if ($this->getRecord()->exists) {
            return;
        }

        // 优先从session读取,session失效则读取cookie
        $savedData = session()->get('article_temp_data') ?? json_decode(request()->cookie('article_temp_data'), true);
        
        if ($savedData) {
            foreach ($savedData as $field => $value) {
                if (property_exists($this, $field)) {
                    $this->$field = $value;
                }
            }
        }
    }

    /**
     * 监听表单字段更新,实时保存临时数据
     */
    public function updated($field, $value)
    {
        if (!$this->getRecord()->exists) {
            $tempData = session()->get('article_temp_data', []);
            $tempData[$field] = $value;
            
            // 保存到session(临时存储)和cookie(持久化1天)
            session()->put('article_temp_data', $tempData);
            cookie()->queue('article_temp_data', json_encode($tempData), 1440);
        }
    }

    /**
     * 文章创建成功后清除临时数据
     */
    protected function handleRecordCreation(array $data): \Illuminate\Database\Eloquent\Model
    {
        $record = parent::handleRecordCreation($data);
        
        // 清理session和cookie中的临时数据
        session()->forget('article_temp_data');
        cookie()->queue(cookie()->forget('article_temp_data'));
        
        return $record;
    }
}

注意事项

  • 该方案仅针对创建页面,编辑页因已有持久化数据,无需处理;
  • 支持所有Filament表单组件(文本框、富文本、选择器等)的字段值保存与恢复;
  • cookie有效期设置为1440分钟(1天),可根据需求调整;
  • 若用户清除浏览器缓存或cookie,临时数据会丢失,这是前端存储的固有局限。

内容的提问来源于stack exchange,提问作者Dimitri kvachakhia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:46:13