根据 Laravel 7 中的 cookie 值控制路由

Control route based on cookie value in Laravel 7

我正在尝试根据 cookie 设置 URL 的语言目录。

routes/web.php中我添加了这条测试路线:

Route::get('/test', function () {
    $cookie = cookie('language', 'fr', 120);
    //do some logic to specify locale based on cookie value 
    $lang = Cookie::get('language');
    return 'Langauge ='.$lang;
});

但是该代码不会创建任何 cookie。当我稍后在同一个路由文件中检查它时:

if (Cookie::get('language') !== null) {
    //do something
}

我什么都不懂

我可以从路由创建和读取 cookie 吗? 如果位置不正确,我如何检测每次页面加载时的 cookie 值以在我的路由中使用该值?

(P.S。我看到有人问同样的问题,但没有好的答案)。

更新

所以我的真实路线是这样的:

Route::group(array('prefix' => Config::get('app.locale_prefix')), function()
{
    Route::get('/', 'HomeController@getHomeData')->name('home');    
});

我怎样才能基本上保存 cookie 并将其附加到输出?

如果你想在控制器中进行。

这是您设置 cookie 的方式,

    $cookie = cookie('language', 'fr', 120);

    return response('done')->cookie($cookie);

这就是你得到它的方式。

    $value = request()->cookie('language');

    return response($value);

首先您需要设置 cookie 值并发送响应。您可以从您的路由或控制器方法中检索任何后续 request() 中的 cookie 值。这是一个例子

 Route::get('/set-cookie', function () {
    return response('Cookie set successfully')->cookie('language', 'fr', 120);
 });
 Route::get('/get-cookie', function () {
    return request()->cookie('language');
 });

在你的控制器方法中

 public function index(){
    return response(view('welcome'))->withCookie(cookie('language', 'fr', 120));
 }

并且您可以在 welcome.blade.php 上检索为

{{ request()->cookie('language') ?? 'No cookie set '}}