Laravel 5 - Именованный маршрут с параметром - PullRequest
0 голосов
/ 01 декабря 2018

В моем файле web.php я создал два маршрута:

Route::get('/{name}', 'PublicController@index')->name('welcome');

Route::get('stats', function () { return route('welcome', 'enrique'); });

Мой контроллер выглядит так:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PublicController extends Controller
{
  public function index($name)
  {
    return view('welcome');
  }

}

Я уже настроил виртуальныйхост на моем локальном компьютере, который http://blog.test

Когда я звоню http://blog.test/stats в моем браузере, он показывает мне содержимое моей домашней страницы.Но когда я реорганизую свой маршрут twho в файле web.php следующим образом:

Route::get('stats', function () { return route('welcome', 'enrique'); });

Route::get('/{name}', 'PublicController@index')->name('welcome'); 

Он отлично работает.

Не могли бы вы объяснитьпочему так себя ведет?Спасибо

Ответы [ 3 ]

0 голосов
/ 01 декабря 2018

Маршрут Laravel идет к первым сопоставленным маршрутам, поэтому в вашем случае, если он видит /stats

Route::get('/{name}', 'PublicController@index')->name('welcome');

Он становится переменным $name для PublicController@index

Проверкабольше статьи относительно этого

0 голосов
/ 01 декабря 2018

Это происходит потому, что когда вы добавляете ваш {параметр} после /, все маршруты, определенные после этого, рассматриваются как имеющие этот тип

Route::get('/{name}', 'PublicController@index')->name('welcome');

// below routes not work 
Route::get('stats', function () {});
Route::get('test', function () { });
Route::get('hello', function () {});

То же самое происходит, если вы создаете новый маршруткак показано ниже:

 Route::get('post/{slug}', function () {});
  // this get routes are also not work 
  Route::get('post/show', function () {});
  Route::get('post/preview', function () {});

, поэтому рекомендуется всегда определять параметризованный маршрут в последний раз

Route::get('post/show', function () {});
 Route::get('post/preview', function () {});
 Route::get('post/{slug}', function () {});
0 голосов
/ 01 декабря 2018

То, что у вас есть, это тот же самый маршрут, который перезаписывается.Чтобы они оба работали, вам нужно будет добавить что-то перед вашим пользовательским параметром:

/something/{name}

В противном случае stats предполагается значением для вашего параметра name

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...