首页 > 解决方案 > 如何将“前缀”和参数传递给组中的路由(Laravel 7 / 8)?

问题描述

我有下一个路线文件:

Route::prefix('{?lang}')->where(['lang' => '[a-zA-Z]{2}'])->middleware('locale')->group(function () {

    Route::get('/news/{news}', [App\Http\Controllers\NewsController::class, 'show'])->name('news.show');

});

中间件是:

public function handle($request, Closure $next)
{
    if ($request->method() == 'GET') {
        $segment = $request->segment(1);

        if (!in_array($segment, config('app.locales'))) {
            $segments = $request->segments();
            array_shift($segments);
            $fallback = session('locale') ?: config('app.fallback_locale');
            $segments = Arr::prepend($segments, $fallback);

            return redirect()->to(implode('/', $segments));
        }

        session(['locale' => $segment]);
        app()->setLocale($segment);
    }

    return $next($request);
}

如果我使用这样的路线(在 *.blade 文件中)

<a href='{{ route('home', app()->getLocale()) }}'>

我有下一个地址

<a href='/en/home/'>

但是我有应该传递给路由 /news/{news} 的参数,如果我接下来尝试:

<a href="{{ route('news.show', ['lang' => app()->getLocale(), 'news' => $new->slug]) }}">

我收到错误消息:

错误信息

有人可以帮助我吗?我已经用了3个小时了......

标签: laravelroutes

解决方案


所以,

<a href="{{ route('news.show', [app()->getLocale(),$new->slug]) }}">

并在这条路线的控制者方法中

(string $lang, News $news)

就我而言,这是工作


推荐阅读