Yii2 URL 管理器规则和带有 GET 方法的表单

Sai*_*akR 1 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="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>
Run Code Online (Sandbox Code Playgroud)

我决定为搜索规则制作漂亮的 URL,如下所示:

'search/<q:\w+>' => 'feqh/search',
Run Code Online (Sandbox Code Playgroud)

但是,提交表单总是会生成以下 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 preventexample.com/search/anySearchString`

Bli*_*izz 5

这与您漂亮的 URL 配置无关(甚至与 Yii 无关)...这是浏览器的问题。它只知道如何提交以 GET 或 POST 形式发布的表单。

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

如果您希望地址栏中的 URL 代表您漂亮的 URL,您必须控制提交并可能发出重定向?

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

这是我目前唯一能想到的方法。