2015-05-28 2 views
0

У меня есть глобальная форма поиска, которая представляет для поиска действия контроллера:правила менеджер Yii2 URL и формы с методом GET

<?=Html::beginForm(['/feqh/search'], 'get', ['class' => 'navbar-form navbar-left', 'role' => 'search', 'id' => 'searchForm']);?> 
     <div class="form-group has-feedback Right"> 
      <input id="q" type="text" class="form-control" placeholder="<?=yii::t('app','Search');?>" name="q" value="<?= Html::encode(\Yii::$app->getRequest()->getQueryParam('q',""));?>" /> 
      <i class="form-control-feedback glyphicon glyphicon-search"></i> 
     </div> 
       <button type="submit" class="btn btn-default"><?=yii::t('app','Submit');?> <i class="glyphicon glyphicon-ok"></i></button> 
     </form> 

Я решил сделать довольно URL для поиска с помощью правил следующим образом:

'search/<q:\w+>' => 'feqh/search', 

Однако, заполнив форму всегда генерировать следующий URL: example.com/feqh/search?q=anySearchString

Однако example.com/search/anySearchString является доступ кий. Здесь проблема с отправкой с использованием формы.

Я попытался изменить URL формы действий:

<?=Html::beginForm(['feqh/search'] т.е. извлекая начальный / но это не имеет никакого значения.

Кстати, следующее правило работает слишком:

'search' => 'feqh/search', это делает example.com/search?q=anySearchString. However, the applying of this rule prevent example.com/поиск/anySearchString`

ответ

2

Это не имеет ничего общего с вашей красивой конфигурации URL (и даже не Yii) ... Это браузер. Он знает, как отправить форму, публикуется как GET или POST.

Так как вы отправляете сообщения в режиме GET, он просто добавляет в качестве параметров запроса URL-адреса.

Если вы хотите, чтобы URL-адрес в адресной строке отображал ваш симпатичный URL-адрес, вам нужно будет взять контроль над отправкой и, возможно, выполнить перенаправление?

$('#searchForm').submit(function() { 
    window.location = $(this).attr("action") + '/' + $('#q').val(); 
    return false; 
}); 

Это единственный способ, которым я могу сейчас думать.

0

Вы можете попробовать что-то вроде:

'search/<q:w>' => 'feqh/search/variable_name/<q>' 

Тогда в вашем

actionSearch() 

ли что-то вроде

$query = isset($_REQUEST['variable_name']) ? $_REQUEST['variable_name'] : ''; 
0

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

Поместите это в общие правила/main.php (продвинутое приложение):

'controller/action/<param:[\w-]+>/<page:[\d]+>' => 'controller/action', 

'controller/action/<param>' => 'controller/action', 

Вы должны изменить «контроллер», «действие», и «PARAM» в ваши действия контроллера и параметры. Это в основном для проблемы поиска, с которой я столкнулся, поэтому я разместил ее здесь в надежде, что это поможет кому-то.

Смежные вопросы