Как URL кодировать параметр маршрута URI в Laravel - PullRequest
1 голос
/ 21 апреля 2020

У меня есть URI, который мне нужно передать по маршруту к контроллеру. Как мне справиться с этим, или, более конкретно, как я могу передать строку, которая обычно должна быть сначала закодирована в URL? Может ли это быть обработано ограничением регулярного выражения в маршруте?

Строка для передачи

itm:n#_123445

Маршрут

Route::get('getChildren/{uri}', 'ChildrenController@getChildren');

Ответы [ 3 ]

0 голосов
/ 21 апреля 2020

Я бы порекомендовал обновить схему таблицы, чтобы создать уникальный идентификатор для каждого URI в БД, если у него его еще нет. Вместо того, чтобы передавать полный URI в качестве параметра, вы должны передать идентификатор.

0 голосов
/ 21 апреля 2020

Прежде всего,

Если вы используете этот указанный формат c, браузер будет понимать # как ссылку на привязку на странице - как в этом примере: https://laravel.com/docs/7.x/packages#views

и не будет передавать номер бэкэнду - как вы упоминаете, вам, скорее всего, придется кодировать URL-адрес перед его отправкой

Теперь, если вы уверены, что backend может получить этот формат, я бы сделал preg_match в промежуточном программном обеспечении (если этот формат повторяется) или непосредственно в контроллере, чтобы извлечь числовой идентификатор.

preg_match('/itm:n#_(\d*)/', $uri , $matches);
$id = matches[0]
0 голосов
/ 21 апреля 2020

Вы можете использовать URL фасад, чтобы сделать это. Полный путь Illuminate\Support\Facades\URL или просто используйте \URL, поскольку он добавляется в config/app.php файл.

Использование :
URL::to('/getChildren', ['itm:n#_123445']));
Сгенерированный URL :
http://domain.test/getChildren/itm%3An%23_123445
Обработка
Route::get('getChildren/{url}', function ($url) {
    dd($url); // itm:n#_123445

});

Надеюсь, это поможет вам

...