我陷入了以下困境:我的laravel应用程序中有切换器,该切换器向Controller发出请求,该Controller实际上确实设置了表单输入中传递的会话参数并返回back()
响应。问题是有时填充不正确并混合了两个变量。
我有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();
谁能建议我在这里找到问题
答案 0 :(得分:1)
您可以在此处使用optional帮助方法:
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>
答案 1 :(得分:-1)
我认为您无需检查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();