@3v4l

Что не так с моим маршрутом?

Здравствуйте! Не могу понять где ошибка, использую Laravel 9. Есть такой код в routes/web.php:
<?php

use Illuminate\Support\Facades\Route;

use App\Http\Controllers\ServerController;

Route::prefix('/{address}:{port}')->name('server.')->controller(ServerController::class)->group(function() {
    Route::get('/', 'index')->name('index');
})->where([
    'address' => '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}',
    'port' => '\d+',
]);

Когда я отрываю URL: https://laravel.local/127.0.0.0:12345, то получаю ответ {"address":"127.0.0.0","port":"12345"} - всё верно, но почему тогда данный код срабатывает и на следующий URL:
https://laravel.local/127.0.0.0:12345.jsfhsydfisdfsdfsd
и я получаю ответ
{"address":"127.0.0.0","port":"12345.jsfhsydfisdfsdfsd"}

Код контроллера:
<?php
 
namespace App\Http\Controllers;

use Illuminate\Http\Request;
 
class ServerController extends Controller
{
    public function index(Request $request)
    {
        return [
            'address' => $request->route('address'),
            'port' => $request->route('port')
        ];
    }
}
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
емнип регулярка не может начинаться со слеша, думаю должно работать что-то вроде такого:
where([
    'address' => '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$',
    'port' => '^[0-9]+$',
]
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы