Я застрял со следующим: у меня есть переключатель в моем приложении 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();
Может ли кто-нибудь посоветовать мне, как найти здесь проблему






Я думаю, вам не нужно проверять два условия в условии 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>
Это не решает проблему, однако, что касается оптимизации, я нашел много, поэтому спасибо!