我有一个全局搜索表单,提交搜索控制器的操作:
<?=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',
但是,提交表单始终会生成以下网址:
example.com/feqh/search?q=anySearchString
但是,example.com/search/anySearchString
可以访问。这是使用表单提交的问题。
我尝试更改表单操作网址:
<?=Html::beginForm(['feqh/search']
,即删除最初的/
,但它没有任何区别。
顺便说一句,以下规则也有效:
'search' => 'feqh/search',
它使example.com/search?q=anySearchString. However, the applying of this rule prevent
example.com / search / anySearchString`
答案 0 :(得分:2)
这与你漂亮的URL配置无关(甚至不是Yii)......这是浏览器的事情。它只知道如何提交表单作为GET或POST发布。
因此,由于您在GET模式下发布,因此只需将输入作为查询参数添加到您的URL中。
如果您希望地址栏中的网址代表您的漂亮网址,您必须控制提交,并可能会发出重定向?
$('#searchForm').submit(function() {
window.location = $(this).attr("action") + '/' + $('#q').val();
return false;
});
这是我现在能想到的唯一方式。
答案 1 :(得分:0)
您可以尝试以下内容:
'search/<q:w>' => 'feqh/search/variable_name/<q>'
然后在你的
actionSearch()
执行类似
的操作$query = isset($_REQUEST['variable_name']) ? $_REQUEST['variable_name'] : '';
答案 2 :(得分:0)
或者您可以尝试在搜索操作旁边进行重定向操作,然后更改搜索表单,以便进行重定向。
将此信息放入common / main.php规则(高级应用):
'controller/action/<param:[\w-]+>/<page:[\d]+>' => 'controller/action',
'controller/action/<param>' => 'controller/action',
您需要更改&#34;控制器&#34;,&#34;操作&#34;和&#34; param&#34;进入你的控制器动作和参数。 这主要是我遇到的搜索问题,所以我在这里发布,希望它可以帮助别人。