Сессия Laravel не заполняется полностью

Я застрял со следующим: у меня есть переключатель в моем приложении laravel, который запрашивает контроллер, который фактически устанавливает параметры сеанса, переданные во вводе формы, и возвращает ответ back(). Проблема в том, что когда-то он заполнялся неправильно и смешивал две переменные.

У меня есть переменные WHI account_id и building_id (последняя рассчитывается на основе account_id), и в этом случае building_id становится равным account_id и приводит к исключению.

Код детали (Контроллер):

public function switchHeaders(Request $request) {

    $account = Account::find($request->get('account_id'));

    if ($request->has('account_id') && $account !== null) {

        session([
            'account_id'    => $account->id,
            'building_id'   => $account->building_id,
        ]);
    } else {
        session([
            'account_id'    => null,
            'building_id'   => null,
        ]);
    }

    return back();

Может ли кто-нибудь посоветовать мне, как найти здесь проблему

Стоит ли изучать 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 и хотите разрабатывать...
0
0
52
2

Ответы 2

Я думаю, вам не нужно проверять два условия в условии if. просто измените свой код, как показано ниже, и посмотрите, работает ли он.

public function switchHeaders(Request $request) {

    $account = Account::find($request->account_id);

    if (!empty($account)) {

        session([
            'account_id'    => $account->id,
            'building_id'   => $account->building_id,
        ]);

    } else {
        session([
            'account_id'    => null,
            'building_id'   => null,
        ]);
    }

    return back();

Здесь вы можете использовать вспомогательный метод по желанию:

public function switchHeaders(Request $request) {
    $account = Account::find($request->get('account_id'));

    session([
        'account_id' => optional($account)->getKey(),
        'building_id' => optional($account)->getAttribute('building_id')
    ]);

    return back();
}

Если $account имеет значение null, необязательный помощник возвращает значение null из любых связанных вызовов функций.

Чтобы еще больше уменьшить логику функции контроллера, настройте маршрут с дополнительным параметром для $account:

Route::get('switchHeaders/{account?}', 'AccountController@switchHeaders');

И явно привяжите модель в RouteServiceProvider:

Route::bind('account', function ($value) {
    return \App\Account::find($value);
});

Это уменьшит функцию контроллера до:

public function switchHeaders(Request $request, $account = null) {
    session([
        'account_id' => optional($account)->getKey(),
        'building_id' => optional($account)->getAttribute('building_id')
    ]);

    return back();
}

Вместо передачи account_id в качестве ввода формы он будет частью действия формы:

// i.e. http://example.com/switchHeaders/1
<form action = "switchHeaders/{{ $account->getKey() }}">
    ....
</form>

Это не решает проблему, однако, что касается оптимизации, я нашел много, поэтому спасибо!

Aleksandr Popov 30.07.2018 20:38

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