我在控制器方法中有一些示例代码,查找cookie并操作模型(如果它存在),或者创建新模型并返回新cookie(如果它不存在)。
是否有可能在我返回视图之前添加cookie,以便重复的代码只能写一次?
我只是在寻找效率和整洁。
$cat = Cat::find($request->cookie('cat_id'));
if (null !== $cat) {
if ($cat->name === 'Felix') {
$cat->age = 10;
} else {
$cat->age = 8;
}
//duplicated code
$cat->fur = 'soft';
$cat->tail = 'wavy';
$cat->save();
return redirect('/');
} else {
$cat = new Cat;
$cat->name = 'Ralf';
$cat->age = 12;
//duplicated code
$cat->fur = 'soft';
$cat->tail = 'wavy';
$cat->save();
return redirect('/')->withCookie(cookie('cat_id', $cat->id,10000));
}
当一个字符串传递给redirect()
方法时,它返回一个Illuminate'Http'RedirectResponse
, Laravel路由堆栈将其解释为发送特定响应头的方向。所以你可以这样做,而不是返回两次:
$cat = Cat::find($request->cookie('cat_id'));
$redirect = redirect('/');
if (null !== $cat) {
if ($cat->name === 'Felix') {
$cat->age = 10;
} else {
$cat->age = 8;
}
//duplicated code
$cat->fur = 'soft';
$cat->tail = 'wavy';
$cat->save();
} else {
$cat = new Cat;
$cat->name = 'Ralf';
$cat->age = 12;
//duplicated code
$cat->fur = 'soft';
$cat->tail = 'wavy';
$cat->save();
$redirect->withCookie(cookie('cat_id', $cat->id,10000));
}
return $redirect;