Расширение макета внутри условного @if, вызывающего дублирование макета

Я работаю над laravel 5.5. Я проверяю, вошел ли пользователь в систему следующим образом:

@if (Auth::check())
//some logic

@else
//somelogic

@endif

Но оператор if/else выполняется дважды в зависимости от того, вошел ли пользователь в систему или нет. Как вы думаете, почему это происходит? Я пробовал другие способы проверки аутентификации, как уже упоминалось здесь. Тем не менее я получаю ту же ошибку.

Макет, который я использую.

<!DOCTYPE html>
<html lang = "{{ app()->getLocale() }}">
<head>
   <meta charset = "utf-8">
   <meta http-equiv = "X-UA-Compatible" content = "IE=edge">
   <meta name = "viewport" content = "width=device-width, initial- 
    scale=1">

    <title>{{ config('app.name', '') }}</title>  

   <!-- Styles -->
   <link href = "{{ asset('css/app.css') }}" rel = "stylesheet">
</head>
<body>
<div id = "app">

    @include('inc.navbar')
      <div class = "container">
     @yield('content')
  </div>
  </div>

   <!-- Scripts -->
  <script src = "{{ asset('js/app.js') }}"></script>
</body>
</html>

Логика для реализации

@if (Auth::user())
@extends('layouts.app')

@section('content')
  <h1> Exercises</h1>
@endsection
 @else
  @extends('layouts.app')

  @section('content')
  <h1> Nope</h1>
 @endsection
@endif

Можете ли вы поделиться, в чем именно проблема? Этот код сам по себе кажется прекрасным. Что такое //some login и какой результат вы получаете и что ожидается.

Bharat Geleda 15.03.2019 12:50

Ожидаемый результат: разные панели навигации для гостя и вошедшего в систему пользователя. Текущий выход ; Навигационная панель вошедшего в систему пользователя появляется дважды, если пользователь вошел в систему. В противном случае гостевая пользовательская панель навигации появляется дважды, когда пользователь выходит из системы.

bahdotsh 15.03.2019 12:52

Описанное вами поведение указывает на то, что у вас возникла проблема, не зависящая от проверки подлинности, поскольку вы описываете один и тот же контент, который появляется дважды. Вам нужно поделиться кодом макета, который вы используете, у вас, вероятно, есть ошибка.

sam 15.03.2019 12:57

Так что часть аутентификации работает нормально. На какую страницу вы включаете этот файл шаблона блейда и как? Проверяйте на повторы.

Bharat Geleda 15.03.2019 12:57

Я отредактирую вопрос с кодом.

bahdotsh 15.03.2019 13:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
391
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете попробовать это

@if (Auth::user())

// User is logged

@else

//User is not logged

@endif

Я надеюсь, что это будет полезно

В Laravel 5.5 вы можете использовать что-то подобное

@auth
   // logged in
@else
  // not logged in
@endif

Кроме того, вы можете проверить гостевого пользователя

@guest
  // guest user 
@endguest

Для получения дополнительной информации прочитайте Директивы аутентификации

Ответ принят как подходящий

Измените свою страницу так. @extends не следует вызывать дважды.

@extends('layouts.app')
  @section('content')
    @if (Auth::user())
      <h1> Exercises</h1>
    @else
      <h1> Nope</h1>
    @endif
  @endsection

Вы также можете использовать тернарный оператор, если вам нужны разные макеты для extend :

@extends(Auth::check() ? 'layouts.app' : 'layouts.app2')

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

Bharat Geleda 15.03.2019 13:21

Другие вопросы по теме