Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть список с ролями пользователей
В модели User.php
public function roles()
{
return $this->belongsToMany('App\Role');
}
public function getRoleAttribute()
{
return $this->roles()->lists('id');
}
В контроллере UserController.php
public function create()
{
$roles = Role::lists('display_name', 'id');
return view('users.create', compact('roles'));
}
Во вьюхе
<div class="row form-group">
<div class="col-md-2"> {!! Form::label('role', 'Роль пользователя:') !!} </div>
<div class="col-md-2"> {!! Form::select('role', $roles, null, ['class' => 'form-control']) !!} </div>
</div>
Все работает замечательно, т.е. появляется список где выбираем роль по названию, запись же по id.
При редактировании пользователя прекрасно подставляется его собственная роль.
Вопрос только как при создании пользователя подставить значение по умолчанию?
Пробовал в модели User.php добавить функцию
public function getRoleSelectAttribute(){
return $this->roles()->where('name', '=', 'user')->firstOrFail();
}
После чего во вьюхе вместо значения по умолчанию null подставить переменную $role_select
<div class="row form-group">
<div class="col-md-2"> {!! Form::label('role', 'Роль пользователя:') !!} </div>
<div class="col-md-2"> {!! Form::select('role', $roles, $role_select, ['class' => 'form-control']) !!} </div>
</div>
Но появляется ошибка Undefined variable: role_select, также пробовал добавить в контроллере переменную $role_select
public function create()
{
$roles = Role::lists('display_name', 'id');
$role_select = 'user';
return view('users.create', compact('roles', 'role_select'));
}
Тогда переписал User.php
public function getRoleSelectAttribute($name){
return $this->roles()->where('name', '=', $name)->firstOrFail()->id;
}
Но обработки $role_select из 'user' в id не происходит. Есть ли какой-нибудь короткий способ передать значение по умолчанию, желательно через атрибуты в модели, что у меня не получилось?
Не в сети
Наверно через атрибуты не получиться так сделать, т.к. атрибуты должны совпадать с полем в БД, а поля role_select там нет, пришлось сделать через контроллер, в методе create добавил:
$role_select = Role::where('name', '=', 'user')->firstOrFail()->id;
return view('users.create', compact('roles', 'role_select'));
А в методе edit:
$role_select = null;
return view('users.edit', compact('user','roles','role_select'));
Во вьюхе
<div class="row form-group">
<div class="col-md-2"> {!! Form::label('role', 'Роль пользователя:') !!} </div>
<div class="col-md-2"> {!! Form::select('role', $roles, $role_select, ['class' => 'form-control']) !!} </div>
</div>
У меня используется одна форма для добавления и редактирования пользователей, поэтому приходится передавать $role_select в оба метода create и edit.
Можно еще в самой вьюхе определить $role_select, что лучше не знаю, может есть еще какой способ?
Не в сети
Страницы 1