Как к этой ошибке "Неопределенная переменная: selectedType"

У меня есть этот код ниже в registration.blade.php:

@foreach($selectedTypes as $k=>$selectedType)
    <li>
        <span class = "font-size-sm">{{$k}}</span>
        <span class = "font-size-sm">{{$selectedType['quantity']}}</span>
        <span class = "font-size-sm">{{ number_format($selectedType['price'], 2)}}€</span>
        <span class = "font-size-sm">{{ number_format($selectedType['subtotal'], 2)}}€</span>
    </li>
@endforeach 

И иногда появляется ошибка на странице registration.blade.php "http://proj.test/congress/1/congress-test/registration":

Undefined variable: selectedType 

Проблема должна заключаться в том, что сеанс selectedTypes не существует или истек. Поэтому, возможно, необходимо перенаправить пользователя на страницу, где он выбирает типы билетов, если он находится на странице регистрации с этим кодом «@foreach($selectedTypes as $k=>$selectedType)...», а сеанс «selectedTypes» не существует. Знаете ли вы, правильный ли это подход к решению проблемы и что необходимо для перенаправления пользователя на страницу сведений о конгрессе, на которой указан маршрут:

Route::get('/congress/{id}/{slug?}', [
    'uses' => 'FrontController@show',
    'as'   =>'congresses.show'
]);

Где находится пользователь на странице регистрации, для которой указан указанный ниже маршрут, а сеанс selectedTypes не существует?

Route::get('/congress/{id}/{slug?}/registration', [
    'uses' => 'RegistrationController@displayRegistration',
    'as'   =>'congresses.registration'
]);

// метод storeQuantities (), где selectedTypes хранится в сеансе

public function storeQuantities(Request $request, $id, $slug = null){

        $ttypeQuantities = $request->get('ttypes');

        foreach($rtypeQuantities as $rtypeName => $quantity){
                $ttype = TicketType::where('name', $ttypeName)->firstOrFail();
                $price = $ttype->price;
                $selectedTypes[$ttype->name]['quantity'] = $quantity;
                $selectedTypes[$ttype->name]['price'] = $price;
                $selectedTypes[$ttype->name]['subtotal'] = $price * $quantity;

                $selectedTypes[$ttype->name]['id'] = $ttype->id;
        }
        Session::put('selectedTypes', $selectedTypes);
        return redirect(route('congresses.registration',['id' => $id, 'slug' => $slug]));
    }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Всегда проверяйте переменную $selectedType

@foreach($selectedTypes as $k=>$selectedType)
    <li>
        <span class = "font-size-sm">{{$k}}</span>
        @isset($selectedType)
           <span class = "font-size-sm">{{$selectedType['quantity']}}</span>
           <span class = "font-size-sm">{{ number_format($selectedType['price'],
2)}}€</span>
          <span class = "font-size-sm">{{ number_format($selectedType['subtotal'], 2)}}€</span>
        @endisset
    </li>
@endforeach 

Спасибо, но так есть больше контента, где selectedTypes используется на этой странице, поэтому на странице много белого пространства, поэтому лучше перенаправить пользователя на страницу сведений о конгрессе, если сеанс не существует. Вы знаете, как этого добиться?

user9659025 27.04.2018 20:23

Вы хотите сказать, что если $selectedType не установлен, перенаправить на другую страницу? Перенаправить откуда? Контроллер или представление? Я не понимаю, что ты хочешь

John Doe 27.04.2018 20:25

Если пользователь обращается к этой странице «proj.test / congress / 1 / congress-test / registration», а сеанс «selectedTypes» не существует, верните пользователя в «layout.test / congress / 1 / конгресс-тест».

user9659025 27.04.2018 20:27

Для этого вам нужно проверить свой контроллер. Просто простое условие, если if (isset($selectedTypes)) return redirect(route('congresses.registration',['id' => $id, 'slug' => $slug]));else return redirect(route('congress.test')

John Doe 27.04.2018 20:27

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