Шаблон условного расширения Laravel 5.2 в Blade

Я хочу расширить шаблон на основе условия. Я знаю, что могу использовать оператор @if @else в лезвии. Я делаю то же самое, но лезвие расширяет оба шаблона. Я не знаю почему.

@if(isset(Auth::user()->id))
    @extends('layouts.adminlayout')
@else
   @extends('layouts.default')
@endif

@section('content')
    i am the home page
    {{ isset(Auth::user()->id) }}
@stop

Как вы можете видеть, я проверяю, вошел ли пользователь в систему, а затем расширяю макет шаблона. Но он простирается от обоих макетов.

Помогите мне, пожалуйста.


person Mandy    schedule 04.03.2016    source источник


Ответы (2)


Первая строка в расширенном представлении блейда должна быть директивой @extends. Попробуйте использовать для этого тернарный оператор.

@extends(isset(Auth::user()->id) ? 'layouts.adminlayout' : 'layouts.default');

ОБНОВЛЕНИЕ для макетов на основе ролей. Дополнительные условия см. в этом вопросе.

@extends((!isset(Auth::user()->id))? 'layouts.default': ((Auth::user()->role == 'admin') ? 'layouts.adminlayout' : 'layouts.moderatorlayout'));
person Nabin Kunwar    schedule 04.03.2016
comment
это круто, а как насчет того, что у меня есть несколько условий, таких как аутентифицированный пользователь, основанный на роли, и почему мое условие не работает. - person Mandy; 04.03.2016
comment
Вы можете проверить роль пользователей при этом условии. - person Nabin Kunwar; 04.03.2016
comment
не могли бы вы написать это условие для администратора и менеджера, если пользователь аутентифицирован иначе по умолчанию, так как я плохо разбираюсь в тернарном операторе. - person Mandy; 04.03.2016
comment
Дай мне попробовать. Если это невозможно, я вернусь к вам. Теперь я принимаю ваш вопрос. Но у меня остался один вопрос, почему мое условие не работает? - person Mandy; 04.03.2016
comment
Это потому, что первая строка в расширенном представлении блейда должна быть директивой @extends. - person Nabin Kunwar; 04.03.2016
comment
можно ли передать переменные, которые будут включены в вызов @extend в этом случае при использовании троичного оператора? - person kjones; 22.08.2017

Попробуйте этот код, парентеральные средства важны

@extends(Auth::user()->rol_id == 1 ? 'layouts.admin' : ((Auth::user()->rol_id == 2) ? 'layouts.client' : 'layouts.client'))
person Luisfayre    schedule 11.11.2020