Laravel 5.5 - установите флажок, если у роли есть разрешение

У меня есть следующий код, который работает с пакетом Form Collective, однако сейчас он не работает, поскольку пакет не обновлялся до версии 5.5. Я также использую пакет разрешений Laravel от Spatie

У меня есть код

@foreach ($permissions as $permission)

    {{Form::checkbox('permissions[]',  $permission->id, $role->permissions ) }}
    {{Form::label($permission->name, ucfirst($permission->name)) }}<br>

@endforeach

Я считаю, что это просто цикл через permissions, и если permission принадлежит текущему role, установите флажок.

Как я могу добиться этого без использования пакета?

Я сейчас пробовал

@foreach ($permissions as $permission)

    <div class="checkbox">
        <label>
            {{ ucfirst($permission->name) }}
        </label>
        <input type="checkbox" name="permissions[]" value="{{ $permission->id }}">
        <br>
    </div>

@endforeach

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


person Andy Holmes    schedule 31.08.2017    source источник
comment
На самом деле это не зависит от самого Laravel, это скорее вопрос HTML. В любом случае я опубликовал ответ ниже   -  person Desh901    schedule 31.08.2017
comment
Нет, это зависит от Laravel   -  person Andy Holmes    schedule 31.08.2017


Ответы (2)


Просто добавьте атрибут checked в HTML-код чекбокса:

<input type="checkbox" name="permissions[]" value="{{ $permission->id }}" checked>

если вам нужно установить его по условию, используйте следующий код:

<input type="checkbox" name="permissions[]" value="{{ $permission->id }}" @if(/* some condition */) checked @endif>

ИЗМЕНИТЬ

Поскольку я не понял вопроса, прежде чем добавить некоторые детали.

Предполагая, что ваша Role модель имеет набор прикрепленных разрешений и хранится в атрибуте $role->permissions, вы могли бы сделать

<input type="checkbox" name="permissions[]" value="{{ $permission->id }}" @if($role->permissions->contains($permission)) checked @endif>

Таким образом вы можете проверить, есть ли у вашей роли разрешение с идентификатором $permission->id.

person Desh901    schedule 31.08.2017
comment
Это не помогает, я знаю, что могу добавить атрибут проверки, но мне нужно понять, как запрашивать роль, чтобы узнать, существует ли разрешение, чтобы установить флажок - person Andy Holmes; 31.08.2017
comment
Понятно, из самого вопроса не совсем понятно, я отредактирую свой ответ - person Desh901; 31.08.2017
comment
Он должен решить вашу проблему сейчас - person Desh901; 31.08.2017
comment
Ах да, это работает, спасибо! Просто хочу посмотреть, что мне не хватало - person Andy Holmes; 31.08.2017
comment
Рад помочь. Я только что посмотрел разрешения Spatie Laravel, и этот синтаксис должен работать из коробки - person Desh901; 31.08.2017

Попробуй это:

@foreach ($permissions as $permission)

    <div class="checkbox">
        <label>
            {{ ucfirst($permission->name) }}
        </label>
        <input type="checkbox" name="permissions[]" value="{{ $permission->id }} {{($role->permissions == $permission->id) ? 'checked' : ''}}">
        <br>
    </div>

@endforeach
person Sreejith BS    schedule 31.08.2017
comment
Все мои флажки пусты, но у меня есть 3 роли с разными разрешениями, поэтому стоит ожидать увидеть хотя бы пару отмеченных - person Andy Holmes; 31.08.2017
comment
Как вы сохраняете разрешения в своей БД? - person Sreejith BS; 31.08.2017
comment
Да, потому что $role->permissions - это коллекция, а $permission->id - целое число. По сути, вы сравниваете всю коллекцию с идентификатором, и он всегда возвращает false. - person Desh901; 31.08.2017
comment
Я использую разрешения Spatie Laravel - github.com/spatie/laravel-permission - person Andy Holmes; 31.08.2017
comment
Не могли бы вы опубликовать результат dd ($ role- ›permissions); ? - person Sreejith BS; 31.08.2017
comment
изменить $role->permissions == $permission->id на $role->permissions->contains('id', $permission->id) - person Wreigh; 31.08.2017
comment
@Wreigh не требуется указывать параметр в contains, пока коллекция является коллекцией Eloquent, contains будет проверять каждую модель в коллекции, если $model->is($other) где is эквивалентно $model->getKey() === $other->getKey() - person Desh901; 31.08.2017