在具有本地化功能的Laravel项目中,我制作了中间件,路由组和所有参数,语言切换工作正常,但是当我单击以发送ID时
<a href="{{ route('products', [app()->getLocale(), $category->id]) }}" class=""></a>
我得到了错误:
缺少[路由:产品] [URI: {lang} / products / {id}]
我的路线:
Route::group(['prefix' => '{lang}'], function () {
Route::get('/', 'AppController@index')->name('home');
Route::get('/categories', 'AppController@categories')->name('categories');
Route::get('products/{id}', 'AppController@products')->name('products');
Auth::routes();
});
我的中间件:
public function handle($request, Closure $next)
{
\App::setLocale($request->lang);
return $next($request);
}
我的AppController:
public function products($id)
{
$products = Category::with('products')->where('id', $id)->get();
return view('products', compact('products'));
}
这是URL:
http://127.0.0.1:8000/fa/products/1
如果我手动更改上述URL,它将起作用并显示页面:
http://127.0.0.1:8000/1/products/1
但是,如果我单击:
<a href="{{ route('products', [app()->getLocale(), $category->id]) }}" class=""></a>
我收到错误消息。
答案 0 :(得分:1)
由于添加了路由前缀,因此控制器中products
方法的第一个参数将为lang
,第二个参数为id
。
这应该修复控制器:
public function products($lang, $id)
{
$products = Category::with('products')->where('id', $id)->get();
return view('products', compact('products', 'lang'));
}
答案 1 :(得分:0)
您需要在route('products', ['lang'=>app()->getLocale(), 'id'=>$category->id])
中使用键值数组,或者在原始路由中使用任何路由参数命名。
PS。如Remul所述,由于您有一个lang
参数(作为路由前缀),因此控制器中的第一个参数将是$lang
,然后是$id
public function products($lang, $id)
{
$products = Category::with('products')->where('id', $id)->get();
return view('products', compact('products'));
}