【问题标题】:how to send id in route and controller in laravel localization如何在 laravel 本地化的路由和控制器中发送 id
【发布时间】:2020-01-07 04:31:33
【问题描述】:

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

<a href="{{ route('products', [app()->getLocale(), $category->id]) }}" class=""></a>

我得到错误:

缺少 [Route: products] [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'));
}

这是网址:

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>

我收到错误消息。

【问题讨论】:

    标签: laravel localization


    【解决方案1】:

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

    这应该修复控制器:

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

    【讨论】:

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

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

    参考。 Laravel Named Routes

    附言。正如Remul 所说,由于您有一个lang 参数(作为路由前缀),因此控制器中的第一个参数将是$lang,然后是$id

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-27
      • 2023-03-27
      • 2017-03-05
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      相关资源
      最近更新 更多