【发布时间】:2021-03-08 20:24:03
【问题描述】:
我有错误:
缺少 [Route: shop.show] [URI: {language}/shop/{shop}] 的必需参数。 (查看:C:\xampp\htdocs\frile\resources\views\inc\header.blade.php)
我想我理解我的问题,但我不确定。
我正在尝试通过资源路径访问我的产品的详细信息页面。如果我没有语言切换器,这很好用。
我的语言切换器需要当前的路由名称,因此他可以在其前面添加“en”或“nl”。但是我的资源路由'shop.show'需要一个参数,切换器不能给他。
有解决方法吗?这是我的代码:
路线:
Route::redirect('/', '/en');
Route::group(['prefix' => '{language}'], function () {
/* pages */
Route::get('/', [PagesController::class, 'index']) -> name('home');
/* shop is in the products section */
Route::get('/projects', [PagesController::class, 'projects']) -> name('projects');
Route::get('/about', [PagesController::class, 'about']) -> name('about');
Route::get('/contact', [PagesController::class, 'contact']) -> name('contact');
/* products */
Route::resource('shop', ProductController::class);
});
控制器(我将参数产品与它一起提供,这样我的语言切换器就不会崩溃):
public function show($product, $id)
{
$product = Product::find($id);
return view('pages.shop.product', [app()->getLocale(), 'product' => $product]);
}
header.blade.php(我的语言切换器所在的位置):
<header>
<h1><a href="{{ route('home', app()->getLocale()) }}">FRILE</a></h1>
<nav>
<ul>
<li><a href="{{ route('shop.index', app()->getLocale()) }}">{{ __('nav.shop') }}</a></li>
<li><a href="{{ route('projects', app()->getLocale()) }}">{{ __('nav.projects') }}</a></li>
<li><a href="{{ route('about', app()->getLocale()) }}">{{ __('nav.about') }}</a></li>
<li><a href="{{ route('contact', app()->getLocale()) }}">{{ __('nav.contact') }}</a></li>
<ul id="languageSwitcher">
<li><a href="{{ route(Route::currentRouteName(), 'en') }}">en</a></li>
<li><a href="{{ route(Route::currentRouteName(), 'nl') }}">nl</a></li>
</ul>
</ul>
</nav>
</header>
shop.blade.php(我的详细页面链接在哪里):
@extends('layouts.app')
@section('content')
<h2>shop</h2>
<a href="{{ route('shop.create', app()->getLocale()) }}">create product</a>
@if (count($products) > 0)
@foreach ($products as $product)
<p><a href="{{ route('shop.show', [app()->getLocale(), $product -> id]) }}">{{ $product -> name }}</a></p>
@endforeach
{{ $products->links() }}
@else
<p>No products yet</p>
@endif
@endsection
setLanguage的中间件:
public function handle(Request $request, Closure $next)
{
App::setLocale($request->language);
return $next($request);
}
【问题讨论】:
-
Welcome to SO ... laravel.com/docs/8.x/routing#generating-urls-to-named-routes 注意传递给
route助手的关联数组,您应该尝试遵循此
标签: php laravel localization parameter-passing laravel-8