为什么我在ID为当前路线名称时出错

时间:2019-09-11 12:16:27

标签: laravel

在我的应用程序中,我使用链接作为语言切换器,它在所有网络路由中均正常运行,并显示用于语言切换的正确按钮,但是,在我的产品页面(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的产品外

2 个答案:

答案 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 ()