Intereting Posts

Сократите URL, удалив пустые переменные GET и упростив имена переменных

Я работаю на веб-сайте, где URL-адрес составлен после отправки формы GET . Значения формы передаются как массив переменных, из которых по крайней мере один должен быть определен для поиска в базе данных для работы. Я хотел бы сократить URL-адрес, удалив пустые элементы формы и сделав его более удобным для пользователя, упростив имена переменных .

На данный момент URL-адрес выглядит так (только с большим количеством переменных):

HTTP: // локальный / пример / поиск FormName [имя] = Lorem Ipsum + & FormName [ID] = & FormName [возраст] = & yt0 = Поиск

Я стараюсь сделать так:

HTTP: // локальный / пример / поиск по имени = Lorem Ipsum +

Для этого у меня есть следующие вопросы:

  • Я читал, что невозможно удалить пустые элементы формы только с PHP при использовании метода GET, поскольку это стандартное поведение формы html. Есть ли способ сделать это с помощью urlManager из yii ?

  • Можно ли заменить «FormName [name]» чем-нибудь короче, чем «имя», не изменяя имя переменной, например, с помощью регулярных выражений?

  • И наконец, но не менее важно: что означает «yt0 = Search» и как его удалить из URL?

Любая помощь будет принята с благодарностью.

Имена параметров исходят из атрибутов name полей формы.

Поэтому, чтобы сделать запрос формы для name=lorem+ipsum вход должен выглядеть следующим образом:

 <form method="get" action="/example/search"> <input type="text" name="name" value="lorem ipsum"> <button type="submit">Search</button> </form> 

Вы должны посмотреть на атрибуты name , я предполагаю, что они созданы с помощью кода, который вы используете для создания кода? Пустые параметры запроса поступают из других полей ввода в форме. Если вы хотите полностью контролировать строку запроса, создайте форму вручную.

Я рекомендую вам следующее решение: во-первых, вам нужно определить html-форму с методом POST :

 <form method="post" action="/example/getSearchTerms"> <input type="text" name="name" value="lorem ipsum"> <button type="submit">Search</button> </form> 

Во-вторых, вам нужно определить действие getSearchTerms в вашем ExampleController :

 public function actionGetSearchTerms() { $this->render(Yii::app()->baseUrl.'/example/search/'.$_POST['name']); } 

Затем вам нужно определить основное действие поиска:

 public function search($name) { //do search operation here. } 

Наконец, вам нужно добавить правило url-manager:

 "example/search/<name>"=>"example/search" 

В этом решении действие getSearchTerms отвечает за получение введенного пользователем текста, а затем передает значения для поиска. Теперь ваш url может быть http://localhost/example/search/sampleText . Обратите внимание, что вы можете пропустить добавление правила url-manager, если хотите. В этом случае ваш url должен быть похож на http://localhost/example/search/name/sampleText . Фактически, мы можем удалить часть «name» из url, добавив правило url-manager.

Простой метод, если jQuery является опцией:

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script type="text/javascript"> (function($) { $('form').submit(function() { // ## Clean GET on Submit $('form input').each(function() { // ## Check each Input if ($(this).val().length == 0) { // ## If Empty $(this).attr('disabled', true); // ## Disable Input } }); }); })(jQuery); </script>