2 个参数 id 和 lang 路由中间件语言环境组不起作用 - Laravel 5.5
2 parameters id and lang route middleware locale group don't work - Laravel 5.5
我对 single-parameter url 或中间件组中的路由没有问题。但是当有两个参数(lang 和 id)例如 show 或 edit 时,我得到一个错误。代码如下。我哪里出错了?
文件路径app/Http/Middleware
Locate.php
<?php
namespace App\Http\Middleware;
use Closure;
class Locale
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->method() === 'GET') {
$segment = $request->segment(1);
if (!in_array($segment, config('app.locales'))) {
$segments = $request->segments();
$fallback = session('locale') ?: config('app.fallback_locale');
$segments = array_prepend($segments, $fallback);
return redirect()->to(implode('/', $segments));
}
session(['locale' => $segment]);
app()->setLocale($segment);
}
return $next($request);
}
}
路由文件web.php
Auth::routes();
Route::prefix('{lang?}')->middleware('locale')->group(function($lang=null) {
Route::get('/', 'HomeController@index');
Route::get('reservation-edit/{id}', 'ReservationController@reservationEdit');
});
blade 文件
{{ route ('reservations.update', ['lang'=> $lang, 'id' => $reservation->id]) }}
控制器文件
public function reservationEdit($id){
$check = Reservation::find($id);
$this->authorize('view', $check);
$hotels = DB::table('hotels')->select('hotel_name', 'id')->get();
return view('reservations.reservation-edit', ['reservation' => Reservation::findOrFail($id)], ['hotels' => $hotels]);
}
在您的中间件 'Locale' 中,使用 forgetParameter 仅将 id 参数传输到您的控制器。
app()->setLocale($request->segment(1));
$request->route()->forgetParameter('locale');
return $next($request);
我对 single-parameter url 或中间件组中的路由没有问题。但是当有两个参数(lang 和 id)例如 show 或 edit 时,我得到一个错误。代码如下。我哪里出错了?
文件路径app/Http/Middleware
Locate.php
<?php
namespace App\Http\Middleware;
use Closure;
class Locale
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->method() === 'GET') {
$segment = $request->segment(1);
if (!in_array($segment, config('app.locales'))) {
$segments = $request->segments();
$fallback = session('locale') ?: config('app.fallback_locale');
$segments = array_prepend($segments, $fallback);
return redirect()->to(implode('/', $segments));
}
session(['locale' => $segment]);
app()->setLocale($segment);
}
return $next($request);
}
}
路由文件web.php
Auth::routes();
Route::prefix('{lang?}')->middleware('locale')->group(function($lang=null) {
Route::get('/', 'HomeController@index');
Route::get('reservation-edit/{id}', 'ReservationController@reservationEdit');
});
blade 文件
{{ route ('reservations.update', ['lang'=> $lang, 'id' => $reservation->id]) }}
控制器文件
public function reservationEdit($id){
$check = Reservation::find($id);
$this->authorize('view', $check);
$hotels = DB::table('hotels')->select('hotel_name', 'id')->get();
return view('reservations.reservation-edit', ['reservation' => Reservation::findOrFail($id)], ['hotels' => $hotels]);
}
在您的中间件 'Locale' 中,使用 forgetParameter 仅将 id 参数传输到您的控制器。
app()->setLocale($request->segment(1));
$request->route()->forgetParameter('locale');
return $next($request);