Вложенная привязка свойства Laravel livewire не показывает значение в поле формы

У меня есть компонент livewire для отображения информации профиля. В моей форме я привязываю значение к wire:model как вложенные данные. но он не показывает значение в текстовом поле.

компонент

<?php

namespace App\Http\Livewire\Profile;

use Livewire\Component;

class BasicInfo extends Component
{
    public $user;

    public function mount()
    {
        $this->user = auth()->user();

    }
    
    public function render()
    {
        return view('livewire.profile.basic-info');
    }
}

файл лезвия

<div class="container">
    <div class="row">
        <div class="col-12">
            <h1>{{ __('Profile Information') }}</h1>
        </div>
        <div class="col-6">
            <form>
                <div class="form-group row">
                    <label for="name" class="form-label">Name</label>
                    <input type="text" wire:model="user.name" class="form-control" disabled>
                </div>

                <div class="form-group row">
                    <label for="phone" class="form-label">Phone</label>
                    <input type="text" wire:model="user.phone" class="form-control" disabled>
                </div>

                <div class="form-group row">
                    <label for="location" class="form-label">Location</label>
                    <input type="text" wire:model="user.location.name" class="form-control" disabled>
                </div>
            </form>
        </div>
    </div>
</div>

когда я делаю dd($user) в файле лезвия, он правильно возвращает объект пользователя.

когда я напрямую присваиваю значение общедоступному свойству в компоненте и ссылаюсь на него в лезвии, оно также работает.

Laravel: 8.x Livewire: 2.2


person Ajith Lal    schedule 26.09.2020    source источник


Ответы (1)


Чтобы использовать привязку свойств wire:model Eloquent, вам необходимо использовать свойство $rules в вашем компоненте:

protected $rules = [
    'user.name' => 'required',
    'user.phone' => 'required',
];

Этот массив устанавливает правила проверки по умолчанию для полей вашего компонента и действует как белый список, к которому можно привязать свойства.

Что касается вашего user.location.name, Livewire в настоящее время не поддерживает такие поля модели, связанные с вложением. Вам нужно будет смонтировать этот location в другое свойство вашей модели и привязать к нему.

person Dan Harrin    schedule 26.09.2020
comment
user.location.name также вернул ожидаемое значение - person Ajith Lal; 26.09.2020
comment
если мои правила выглядят примерно так: 'job.apply_type' => 'required|' . Rule::in(['link', 'email']),, PHP не позволяет добавлять его в значение свойства? Что мне делать вместо? - person user3118789; 28.11.2020