在Laravel 5中是否可以在从控制器方法返回之前调用setCookie() ?


Is it possible to setCookie() in Laravel 5 before returning from the controller method?

我在控制器方法中有一些示例代码,查找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;