在我的第二次尝试中,我为我正在开发的网站实现了多语言实现,方法是Route::group
在prefixes
url{locale}
的第一段中使用routeMiddleware Kernel
. 它工作得很好,除非Resources
用parameters
.
该实现有一个小问题,因为某种原因它变成了parameter
(%2F{id}
这是不正确的)并且不检索我PublicGalleriesController
请求的资源。我不明白为什么,因为当我将鼠标悬停在生成的锚点上时,href
我看到了正确的 url 格式。但是当我点击它时,会给出一条404 Not Found
带有混乱网址的消息。
web.php 这是我的路由组,它用一个函数封装了所有路由
Route::group([
'prefix' => '{locale}',
'middleware' => 'setlocale',
], function() {
// all my routes are within this route group including:
Route::resource('gallery', 'PublicGalleriesController');
Auth::routes();
Route::group(['middleware' => 'auth'], function() {
...
});
});
App/Http/Middleware/Localisation.php路由中间件 路由经过Kernel.php
public function handle($request, Closure $next)
{
\App::setLocale($request->segment(1));
return $next($request);
}
PublicGalleriesController.php 从模型中检索图像路径并将其返回到客户端视图
public function show($id)
{
// Show gallery group images for given group id
$pics = null;
$path = null;
$path = GalleryGroup::find($id);
$pics = Gallery::select('imagefilename', 'group_id')->where('group_id', $id)->orderBy('id', 'asc')->get()->toArray();
return view('gallery.show', compact('pics', 'path'));
}
当我将鼠标悬停在可见的画廊组照片链接上时,index.blade
它在浏览器左角显示为:localhost/en/gallery/41
。检索图库组主index.blade
键并在循环中构建 html 锚链接:<a href="{{ url(app()->getLocale(), 'gallery/' . $item['id']) }}">{{$item['descrp']}}</a>
当我单击此链接时,它应该通过PublicGalleriesController
运行该show
功能并检索所有这些画廊组照片,而是返回一个404 Not Found
带有浏览器中显示的 url localhost/en/gallery%2F41
。我相信是一个 Url 编码的%2F
正斜杠。
php artisan route:list
显示show
资源如下:
| Domain | Method | URI | Name | Action
| Middleware |
+--------+-----------------------------------------+--------------+-----------------------
| | GET|HEAD | {locale}/gallery/{gallery} | gallery.show | App\Http\Controllers\PublicGalleriesController@show
| web,setlocale |
有人可以帮我理解为什么网址变得如此混乱吗?
Laravel 版本:5.6.39