我有一个严重的问题,这可能有一个我找不到的愚蠢而简单的解决方案,或者它可能会打开潘多拉魔盒。
如果您在模型中定义访问器,然后尝试在filamentPHP资源中使用它,则访问器似乎执行良好并在索引资源中显示您想要的内容(列出所有记录时),但在编辑或查看时永远不会具体记录。
重现问题非常简单。为了简单起见,我们采用任何 Laravel 安装的典型用户模型。
让我们创建一个如下所示的访问器:
public function getTadaAttribute() { return 'tada! '.$this->name; }
然后在 UserResource.php 中,只需添加到常规表单架构中,如下所示:
Forms\Components\TextInput::make('tada')
也在你的表方法中:
`Tables\Columns\TextColumn::make('tada')`
完成。现在尝试一下。您将看到您的记录列表确实显示了这个新列,但是当您编辑或查看其中一条记录时,它不会显示... 为什么!?
我找到了一种解决方法,但老实说无法理解它为什么有效。我使用了这样的 formatStateUsing 方法:
Forms\Components\TextInput::make('tada')
->formatStateUsing(function ($state, $record) { return $record->tada; })
...瞧!成功了
现在我的问题是:为什么如果我将表单字段命名为与真实列字段相同,则值会自动填充,但如果它是访问器则不会?
我已经测试了以下解决方法,但没有成功: