FilamentPHP 在编辑或查看行时是否执行模型访问器?

问题描述 投票:0回答:1

我有一个严重的问题,这可能有一个我找不到的愚蠢而简单的解决方案,或者它可能会打开潘多拉魔盒。

如果您在模型中定义访问器,然后尝试在filamentPHP资源中使用它,则访问器似乎执行良好并在索引资源中显示您想要的内容(列出所有记录时),但在编辑或查看时永远不会具体记录。

重现问题非常简单。为了简单起见,我们采用任何 Laravel 安装的典型用户模型。

  1. 让我们创建一个如下所示的访问器:

    public function getTadaAttribute() { return 'tada! '.$this->name; }

  2. 然后在 UserResource.php 中,只需添加到常规表单架构中,如下所示:

    Forms\Components\TextInput::make('tada')

也在你的表方法中:

`Tables\Columns\TextColumn::make('tada')`

完成。现在尝试一下。您将看到您的记录列表确实显示了这个新列,但是当您编辑或查看其中一条记录时,它不会显示... 为什么!?

getter accessor filamentphp
1个回答
0
投票

我找到了一种解决方法,但老实说无法理解它为什么有效。我使用了这样的 formatStateUsing 方法:

Forms\Components\TextInput::make('tada') 
->formatStateUsing(function ($state, $record) { return $record->tada; }) 

...瞧!成功了

现在我的问题是:为什么如果我将表单字段命名为与真实列字段相同,则值会自动填充,但如果它是访问器则不会?

我已经测试了以下解决方法,但没有成功:

  • 将访问器 (tada) 添加到模型中的 $fillable 列表中。
© www.soinside.com 2019 - 2024. All rights reserved.