Как сделать исключение для моего маршрута в laravel для моего спа-приложения?

#laravel #routes

#laravel #маршруты

Вопрос:

Я разработал приложение для своей домашней работы, и оно основано на Vue.js, Laravel , основано на учебниках, моя проблема основана на учебнике, который я изучил, я написал это приложение, и теперь я не могу получить доступ ни к одному маршруту, кроме моего приложения.

Я хочу создать страницу about, и когда я добавляю route в route, она переходит на страницу по умолчанию в приложении spa, которая, я сделал это на основе руководств, чтобы люди не вводили ерунду в URL, например url.com/asdasdqwe , так как добавить исключение в строку, которая мешает мне получить доступ к другиммаршруты?

Вот код:

 Route::get('/', function () {
   return view('welcome');
});

Auth::routes();

Route::get('/dashboard', 'HomeController@index')->name('dashboard');

// I know this line make my app to force it to don't access other routes like bottom('/about')
// Route::get('{path}',"HomeController@index")->where( 'path', '([A-zd-/_.] )?' );


// Because of top code i can't access other views that's using ('/etcroute')
Route::get('/about', function () {
    return view('welcome');
});
  

Поэтому, когда я удаляю {path} строку, у меня возникают некоторые проблемы в приложении SPA. итак, я ищу способ добавить исключение или заставить его позволить этим маршрутам работать с {Path} line.

Комментарии:

1. Вы пробовали вводить /about route code выше /{path} route code?

2. @TarekAdam нет, я не знал о приоритете строк в маршрутах. Спасибо

Ответ №1:

Добро пожаловать в StackOverflow 🙂

Чтобы решить эту проблему, просто поместите свой маршрут «/ about» выше того, который соответствует регулярному выражению.

Laravel обрабатывает маршруты в порядке их перечисления, поэтому ваш маршрут «/ about» не отображается, потому что другой соответствует ему первым.

Например:

 Auth::routes();

Route::get('/', function () {
   return view('welcome');
});

Route::get('/about', function () {
    return view('welcome');
});

Route::get('/dashboard', 'HomeController@index')->name('dashboard');

Route::get('{path}', 'HomeController@index')->where('path', '([A-zd-/_.] )?');
  

Ответ №2:

Маршрут:: get(‘dashboard/{any}’, [HomeController::class, ‘index’])-> где([‘any’ => ‘.*’]);

Ответ №3:

Измените свои маршруты следующим образом:

 Route::get('/', function () {
   return view('welcome');
});

Auth::routes();

Route::get('/dashboard', 'HomeController@index')->name('dashboard');

// Because of top code i can't access other views that's using ('/etcroute')
Route::get('/about', function () {
    return view('welcome');
});

Route::get('{path}',"HomeController@index")->where( 'path', '([A-zd-/_.] )?' );
  

Маршрутизация Laravel начинается с вершины web.php файлы и проверяет маршруты один за другим.

Итак, вам нужно добавить регулярное выражение в конце ваших статических маршрутов.