Я связываю модель сотрудника в 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>
Я верю FormBuilder
в LaravelCollective использует data_get
(вспомогательная функция Laravel) для получения атрибутов от объектов. Тем не менее, точки в названиях элементов довольно странные, поэтому я немного углубился в источник для вас.
У вас есть один из следующих вариантов (упорядочен по моим предпочтениям):
Вы можете добавить метод с именем 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
,
Измените имя вашего текстового поля на country[country]
, В исходном коде строитель заменяет ‘[‘ и ‘]’ на ‘.’ и » соответственно при поиске в объекте атрибута. Это означает data_get
буду искать country.country
,
Я поставил это здесь для людей с проблемой в будущем, но это не рекомендуется.
Дайте вашему сотруднику модель getCountryAttribute
метод. Как описано в разделе «Средства доступа к модели форм» в документация, Вы можете перезаписать то, что возвращается из $ employee-> country. Это означает, что вы не можете получить доступ к реальному объекту.
Других решений пока нет …