laravel本地化中如何在路由和控制器中发送id

laravel本地化中如何在路由和控制器中发送id,laravel,localization,Laravel,Localization,在我的带有本地化的Laravel项目中,我制作了中间件、路由组和所有参数,语言开关工作正常,但当我点击发送id时 我得到一个错误: 缺少[路线:产品][URI: {lang}/products/{id}] 我的路线: Route::group(['prefix'=>'{lang}',function(){ 路由::获取('/','AppController@index')->名称('home'); 路由::获取('/categories','AppController@categories'

在我的带有本地化的Laravel项目中,我制作了中间件、路由组和所有参数,语言开关工作正常,但当我点击发送id时


我得到一个错误:

缺少[路线:产品][URI: {lang}/products/{id}]

我的路线:

Route::group(['prefix'=>'{lang}',function(){
路由::获取('/','AppController@index')->名称('home');
路由::获取('/categories','AppController@categories')->名称('类别');
路由::get('products/{id}','AppController@products“)->名称(“产品”);
Auth::routes();
});
我的中间件:

公共函数句柄($request,Closure$next)
{
\App::setLocale($request->lang);
返回$next($request);
}
我的AppController:

公共功能产品($id)
{
$products=Category::with('products')->where('id',$id)->get();
返回视图(“产品”,压缩(“产品”);
}
这是URL:

http://127.0.0.1:8000/fa/products/1
如果我手动更改上述URL,它将工作并显示页面:

http://127.0.0.1:8000/1/products/1
但如果我点击:



我收到错误。

由于您添加了路由前缀,控制器中
产品
方法的第一个参数将是
lang
,第二个参数是
id

这将修复控制器:

公共功能产品($lang,$id)
{
$products=Category::with('products')->where('id',$id)->get();
返回视图('products',compact('products','lang');
}

您需要在
路由('products',['lang'=>app()->getLocale(),'id'=>$category->id])中使用键值数组。
或原始路由中命名的任何路由参数

参考文献

注意,由于您有一个
lang
param(作为路由前缀),控制器中的第一个参数将是
$lang
,然后是
$id

public function products($lang, $id)
{
    $products = Category::with('products')->where('id', $id)->get();

    return view('products', compact('products'));
}

@Remul.thank you解决方案奏效了:我有语言切换:
code
@if(app()->isLocale('fa'))@elseif(app()->isLocale('en'))@endif
code
,但它发送了一个错误:缺少[Route:products][URI lang products/{id}]所需的参数,如果我省略了语言切换并手动切换,它会工作得很好!帮助解决语言切换问题