2016-04-17 3 views
0

Я привязываю модель сотрудника к шаблону Blade и хочу поместить результат отношения с нетерпением в поле.Laravel 5.2 инъекционный объект в шаблон Blade

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

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

Моей форма открытого утверждения:

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

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

My Country поля:

<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> 

ответ

1

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

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

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

    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). Я только нашел его trawling the source - хотя на самом деле это очень просто с PhpStorm Shamless подключи

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

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

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

    Дайте моделью работника getCountryAttribute. Как поясняется в разделе «Аксессоры модели модели» в the documentation, вы можете перезаписать то, что возвращается из страны $ employee->. Это означает, что вы не можете получить доступ к реальному объекту.

Смежные вопросы