Задать вопрос

Как исключить prefix в middleware в Laravel?

Route::group(['prefix' => '{locale}', 'where'=>['locale'=>'(kz|ru)'] , 'namespace' => 'Frontend', 'as' => 'frontend.', 'middleware' => 'locale'], function(){
    Route::group(['prefix' => 'organizations', 'as' => 'organizations.'], function(){
        Route::get('{organization}', 'OrganizationsController@show')->name('show');
    });
});


<?php

//App\Http\Middleware\Locale.php

namespace App\Http\Middleware;

class Locale
{
    public function handle($request, \Closure $next)
    {
        if ($request->method() === 'GET') {
            $segment = $request->segment(1);

            if (in_array($segment, config('app.locales'))) {
                session(['locale' => $segment]);
                app()->setLocale($segment);
            }
        }

        return $next($request);
    }
}


<?php

namespace App\Http\Controllers\Frontend;

use App\Models\Base\Organization;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class OrganizationsController extends Controller
{
    public function show(Organization $organization)
    {
        return view('frontend.organizations.show', compact('organization'));
    }
}


В итоге при открытии /ru/orgainisation/1 выходит вот такое сообщение:
Argument 1 passed to App\Http\Controllers\Frontend\OrganizationsController::show() must be an instance of App\Models\Base\Organization, string given


Как я понимаю, вместо одного параметра organization(id) в метод show передаётся ещё и locale.

Как можно исключить prefix?
  • Вопрос задан
  • 693 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Dase23
@Dase23
back-end developer
вынести роут за пределы функции)

Route::group(['prefix' => '{locale}', 'where'=>['locale'=>'(kz|ru)'] , 'namespace' => 'Frontend', 'as' => 'frontend.', 'middleware' => 'locale'], function(){
....
});
Route::group(['prefix' => 'organizations', 'as' => 'organizations.'], function(){
        Route::get('{organization}', 'OrganizationsController@show')->name('show');
});


локаль больше не передается)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы