Php Yii2 URL管理器规则和表单以及GET方法

Php Yii2 URL管理器规则和表单以及GET方法,php,yii2,yii-url-manager,Php,Yii2,Yii Url Manager,我有一个全局搜索表单,提交给控制器的搜索操作: <?=Html::beginForm(['/feqh/search'], 'get', ['class' => 'navbar-form navbar-left', 'role' => 'search', 'id' => 'searchForm']);?> <div class="form-group has-feedback Right"> <input id="

我有一个全局搜索表单,提交给控制器的搜索操作:

<?=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:


这与您漂亮的URL配置无关,甚至与Yii。。。这是一个浏览器的东西。它只知道如何提交作为GET或POST发布的表单

因此,由于您是在GET模式下发布的,它只需将输入作为查询参数添加到URL中

如果您想让地址栏中的URL代表您的漂亮URL,那么您必须控制提交,或者发出重定向

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

这是我现在能想到的唯一方法。

这与您漂亮的URL配置无关,甚至与您的。。。这是一个浏览器的东西。它只知道如何提交作为GET或POST发布的表单

因此,由于您是在GET模式下发布的,它只需将输入作为查询参数添加到URL中

如果您想让地址栏中的URL代表您的漂亮URL,那么您必须控制提交,或者发出重定向

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

这是我现在唯一能想到的方法。

你可以尝试以下方法:

'search/<q:w>' => 'feqh/search/variable_name/<q>'
做点像

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

您可以尝试以下方法:

'search/<q:w>' => 'feqh/search/variable_name/<q>'
做点像

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

或者你可以尝试在搜索操作旁边进行重定向操作,并更改搜索表单,使其导致重定向

将其放入common/main.php规则高级应用程序:

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

'controller/action/<param>' => 'controller/action',
您需要将控制器、动作和参数更改为控制器动作和参数。
这主要是为了解决我遇到的搜索问题,所以我把它贴在这里,希望它能帮助别人。

或者你可以尝试在你的搜索操作旁边进行重定向操作,并更改搜索表单,从而导致重定向

将其放入common/main.php规则高级应用程序:

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

'controller/action/<param>' => 'controller/action',
您需要将控制器、动作和参数更改为控制器动作和参数。 这主要是我遇到的搜索问题,所以我把它贴在这里,希望它能帮助别人