Я пытаюсь создать форму мастера в Filament. Он состоит из 2 шагов:
И теперь я не понимаю, как вывести изображение в таком виде. Это не загрузчик файлов. Это просто изображение.
Насколько я понимаю, это можно сделать через ViewField. Но не понимаю, как указать, что это должен быть какой-то компонент изображения и как передать туда URL-адрес в afterValidation на первом шаге. Пожалуйста помоги.
public function getSteps(): array
{
return [
Step::make('Product ID')
->description('Write a product id you want')
->schema([
TextInput::make('product_id')
->required()
->reactive()
])
->afterValidation(function(Get $get, Set $set){
$id = $get('product_id');
$product_image_url = Product::get_image_url($id);
$set('product_image', $product_image_url);
}),
Step::make('Confirmation')
->description('Check a product one more time and confirm you want it')
->schema([
ViewField::make('product_image')
...............
...............
]),






Моя первая попытка была бы следующей:
live(), возможно, с откатом , в поле product_id. Это снова отобразит всю форму после изменения значения этого поля. Итак, когда продукт выбран, все поля отображаются снова.Get или к текущему состоянию формы любым способом, чтобы вы могли получить выбранный идентификатор продукта. Используйте PHP внутри своего представления, чтобы получить изображение и использовать его в качестве источника для элемента изображения HTML.Если это не поможет, вот альтернативный путь:
src элемента изображения при каждом изменении значения скрытых полей.Повозившись некоторое время, мне понадобился аналогичный функционал. Вы можете просто отобразить изображение в заполнителе:
Placeholder::make('Image')
->content(function ($record): HtmlString {
return new HtmlString("<img src= '" . $record->URL . "')>");
})
MikeC, ты спасаешь мой день ;) Узнал что-то новое и сэкономил много кода и логики. Это следует включить в документацию по Filament, рекомендации и советы.