Инъекция объекта Laravel 5.2 в шаблон Blade

Я связываю модель сотрудника в Blade шаблон, и хотите поместить результат активного отношения загрузки в поле.

В моем контроллере я собираю коллекцию для страницы как:

$employee = User::with('country', 'activeOrganisationRole')->first();

Моя форма открытого заявления:

{!! Form::model($employee, ['route' => ['employee.role', $employee->uuid], 'method' => 'POST']) !!}

Поэтому я хочу заселить $employee->country->name во вход Laravel Collective form::text заявление, но я не могу получить название страны для загрузки. Все остальные поля в форме отлично загружаются из родительской коллекции.

Поле «Моя страна»:

<div class="form-group">
<label for="phone" class="control-label">Country</label>
{!! Form::text('country', null, ['id'=>'country', 'placeholder' => 'Country', 'class' => 'form-control']) !!}
</div>

Поле выше страны загружает весь результат отношения во входные данные. Какой правильный синтаксис для injecting $employee->country->name в этот вход?

Кстати, это работает отлично, но я ничему не научился, делая так!

<label for="title" class="control-label">Country</label>
<input id="country" class="form-control" value="{!! $employee->country->country !!}" readonly>

0

Решение

Я верю FormBuilder в LaravelCollective использует data_get (вспомогательная функция Laravel) для получения атрибутов от объектов. Тем не менее, точки в названиях элементов довольно странные, поэтому я немного углубился в источник для вас.

У вас есть один из следующих вариантов (упорядочен по моим предпочтениям):

  1. Вы можете добавить метод с именем getFormValue в вашей модели сотрудника. Это принимает единственный параметр, который является именем элемента формы, который запрашивает значение. Реализуйте это примерно так:

    public function getFormValue($name)
    {
    if(empty($name)) {
    return null;
    }
    
    switch ($name) {
    case 'country':
    return $this->country->country;
    }
    
    // May want some other logic here:
    return $this->getAttribute($name);
    }
    

    Я не мог найти какую-либо документацию по этому вопросу (так иногда бывает с Laravel). Я нашел это только траление источника — хотя с PhpStorm это действительно легкоБесстыдная вилка

    Недостатком этого является то, что вы теряете преобразование и пытаетесь извлечь значения из объекта сотрудника с data_get,

  2. Измените имя вашего текстового поля на country[country], В исходном коде строитель заменяет ‘[‘ и ‘]’ на ‘.’ и » соответственно при поиске в объекте атрибута. Это означает data_get буду искать country.country,

  3. Я поставил это здесь для людей с проблемой в будущем, но это не рекомендуется.

    Дайте вашему сотруднику модель getCountryAttribute метод. Как описано в разделе «Средства доступа к модели форм» в документация, Вы можете перезаписать то, что возвращается из $ employee-> country. Это означает, что вы не можете получить доступ к реальному объекту.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]