Определение маршрутов Laravel при наличии определенных строк запроса - PullRequest
0 голосов
/ 11 декабря 2018

Скажем, я хочу иметь возможность отправить форму поиска на любой странице, которая добавит ?s= к текущему URL, но вернет SERP: https://example.com/my-page?s=foobar.(Я видел, что некоторые сайты делают это вместо того, чтобы указывать на /search?s=.* - не так, как я, но это иллюстрирует мой вопрос.)

В моих маршрутах Laravel web.php естьв настоящее время есть способ зарегистрировать это, кроме как, возможно, с использованием регулярного регулярного выражения?

<?php
Route::get('.+?\?.+?\bs={search}', 'SearchController@search');
// This regex is probably wrong, but you get what I was going for,
// and that kinda highlights why this is not an ideal way to do it
?>

Это становится уродливее, когда, скажем, вы хотите захватить несколько параметров $ _GET:

https://example.com/my-page?s=foobar&dept=clothing

В документах Laravel я не нашел ничего, что позволяло бы вам определять параметры строки запроса для параметра Route $uri.Рекомендуемый вариант - просто использовать красивые URL-адреса (https://example.com/search/foobar), но есть определенно допустимые варианты использования для хранения строк запроса.

Ответы [ 2 ]

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

Это очень просто, это зависит от частей URL.Класс Route использует «строку пути» URL-адреса, и вы пытаетесь использовать «параметры» URL-адреса.

https://doepud.co.uk/blog/anatomy-of-a-url

На современных веб-сайтах вы должны работать с этой структурой, потому что вы получаете лучшую структуру URL, и она намного лучше для SEO и поисковых систем.

Вы должны использовать параметры только в функции, которую вы вызываете, для мелких вещей, которые вы можете вызвать через метод $request->get('s');, но затем вам нужно перенаправить или вы должны работать в этой функции.

Так что не боритесь с фреймворком, а работайте в той структуре, которая определена из фреймворка, чтобы все люди, которые знают фреймворк, знали, как с ним работать.

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

1: создание промежуточного программного обеспечения (https://laravel.com/docs/5.7/middleware) 2: проверка входящего запроса с использованием $ request-> query ('s') 3: в случае успешной проверки вернитесь к следующему, перенаправьте куда-либо или отобразите ответ об ошибке

...