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`
这与您漂亮的 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)
这是我目前唯一能想到的方法。