2 параметра id и группа локалей промежуточного программного обеспечения для lang route не работают - Laravel 5.5 - PullRequest
0 голосов
/ 07 июня 2018

У меня нет проблем с URL-адресом или маршрутом с одним параметром в группе промежуточного программного обеспечения.Но я получаю сообщение об ошибке, когда есть два параметра (lang и id), такие как show или edit.Коды следующие.Где я делаю ошибки?

Путь к файлу приложения / 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');

});

файл лезвия

{{ 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]);
    }

1 Ответ

0 голосов
/ 06 августа 2019

В вашем промежуточном программном обеспечении 'Locale', используйте ForgotParameter для передачи только параметра id на ваш контроллер.

app()->setLocale($request->segment(1));
$request->route()->forgetParameter('locale');
return $next($request);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...