Ошибка маршрутизации Laravel 404 / {slug} и параметр {домен} - PullRequest
1 голос
/ 06 ноября 2019

У меня есть такие маршруты:

Route::resource('tunnels', 'TunnelController');
Route::get('/{slug}', array('uses' => 'TunnelController@show','as' => 'domain.tunnels.show'));

Это маршрут в моем блейд-файле

{{ route('domain.tunnels.show', ['slug' => $tunnel->slug])}}

Это дает мне URL, как это: http://maindomain.com/my-slug"

Это прекрасно работает!

Затем я хочу использовать customdomain.com, поэтому я настраиваю свои маршруты следующим образом

Route::resource('tunnels', 'TunnelController');
Route::get('/{slug}', array('domain' => '{domain}', 'uses' => 'TunnelController@show','as' => 'domain.tunnels.show'));

И маршрут

{{ route('domain.tunnels.show', ['domain' => $tunnel->domain, 'slug' => $tunnel->slug])}}

Рендер с URL выглядит хорошо: http://customdomain.com/my-slug Но когда я пытаюсь открыть страницу, я получаю ошибку 404.

Я пытаюсь выяснить, почему с 2 дня, но я не могуполучить это: (

Есть что-то, что я забыл?

Спасибо

РЕДАКТИРОВАТЬ:

TunnelController.php

public function __construct()
{
    $this->middleware('auth', ['except' => 'show']);

}
public function show($slug)
{
$tunnel = Tunnel::where('slug', $slug)->first();
 return view('tunnels.show', ['tunnel' => $tunnel]);
}

1 Ответ

3 голосов
/ 06 ноября 2019

Динамическая пользовательская маршрутизация домена в Laravel:

Вам необходимо следовать следующему коду:

Route::group(['domain' => '{domain}'], function() {
    Route::get('/{slug}', array('uses' => 'TunnelController@show','as' => 'domain.tunnels.show'));
});

полное имя домена передается обработчику маршрута какпараметр с именем domain

{{ route('domain.tunnels.show', ['domain' => $tunnel->domain,'slug' => $tunnel->slug]) }}    

В файле app/Providers/RouteServiceProvider.php вашего проекта изменил метод boot на следующий:

public function boot()
{
     \Route::pattern('domain', '[a-z0-9.\-]+'); 
     parent::boot();
}

В контроллере TunnelController.php

public function show(string $domain, string $slug)
{
    $tunnel = Tunnel::where('slug', $slug)->first();
    return view('tunnels.show', ['tunnel' => $tunnel]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...