Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 01.04.2015 16:59:28

Выбор в списке оп умолчанию

Есть список с ролями пользователей
В модели 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 не происходит. Есть ли какой-нибудь короткий способ передать значение по умолчанию, желательно через атрибуты в модели, что у меня не получилось?

Не в сети

#2 02.04.2015 10:36:29

Re: Выбор в списке оп умолчанию

Наверно через атрибуты не получиться так сделать, т.к. атрибуты должны совпадать с полем в БД, а поля 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, что лучше не знаю, может есть еще какой способ?

Не в сети

Подвал раздела