在我的应用程序中,我使用链接作为语言切换器,它在所有网络路由中均正常运行,并显示用于语言切换的正确按钮,但是,在我的产品页面(ID为ID)中出现此错误:
Missing required parameters for [Route: products] [URI: {lang}/products/{id}]
这是应用程序的网络路线:
Route::group(['prefix' => '{lang}'], function () {
Route::get('products/{id}', 'AppController@products')->name('products');
});
这是控制器:
public function products($lang, $id){
$products = Category::with('products')->where('id', $id)->get();
return view('products', compact('products', 'lang'));}
这是我用于语言切换的按钮:
@if(app()->isLocale('fa'))
<div id="change"><a href="{{ Route(\Illuminate\Support\Facades\Route::currentRouteName(), 'en') }}">English</a></div>
@elseif(app()->isLocale('en'))
<div id="change"><a href="{{ Route(\Illuminate\Support\Facades\Route::currentRouteName(), 'fa') }}">Farsi</a></div>
@endif
我说过语言切换在所有路由中都可以,除了带:id的产品外
答案 0 :(得分:2)
您定义的产品路线需要一个ID,并且您不会在路线生成器中添加一个。
您的代码有点混乱,所以我认为您正在这样做:
您正在显示$id
类别中的产品列表,其中只有一个链接可以切换语言。您将需要更新您的路线,以包含单个通用商品ID:
public function products($lang, $id){
$products = Category::with('products')->where('id', $id)->get();
$product_id = $id;
return view('products', compact('products', 'product_id', 'lang'));
}
然后输出:
@if(app()->isLocale('fa'))
<div id="change"><a href="{{ Route(\Illuminate\Support\Facades\Route::currentRouteName(), ['lang' => 'en', 'id' => $product_id) }}">English</a></div>
@elseif(app()->isLocale('en'))
<div id="change"><a href="{{ Route(\Illuminate\Support\Facades\Route::currentRouteName(), ['lang' => 'fa', 'id' => $product_id) }}">Farsi</a></div>
@endif
应该为您工作。
答案 1 :(得分:0)
您在产品路线中缺少参数。您定义的唯一参数是id
,但控制器也希望lang
,但您不会传递。将您的路线定义更改为:
Route::get('products/{lang}/{id}', 'AppController@products')->name('products');
也请从您的路线前缀中删除大括号,因为这只是路线的名称,不应将其定义为参数:
Route::group(['prefix' => 'lang'], function ()