Yii2 URL 使用 GET 方法管理规则和表单
Yii2 URL manager rules and forms with GET method
我有一个提交给控制器搜索操作的全局搜索表单:
<?=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
的例子。com/search/anySearchString`
这与您漂亮的 URL 配置无关(甚至与 Yii 无关)...这是浏览器的问题。它只知道如何提交以 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>'
然后在你的
actionSearch()
做类似
的事情
$query = isset($_REQUEST['variable_name']) ? $_REQUEST['variable_name'] : '';
或者您可以尝试在您的搜索操作旁边进行重定向操作并更改搜索表单,以便它导致重定向。
将其放入 common/main.php 规则(高级应用程序):
'controller/action/<param:[\w-]+>/<page:[\d]+>' => 'controller/action',
'controller/action/<param>' => 'controller/action',
您需要将 "controller"、"action" 和 "param" 更改为您的控制器操作和参数。
这主要是针对我遇到的搜索问题,所以我把它贴在这里希望它能帮助到别人。
我有一个提交给控制器搜索操作的全局搜索表单:
<?=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
的例子。com/search/anySearchString`
这与您漂亮的 URL 配置无关(甚至与 Yii 无关)...这是浏览器的问题。它只知道如何提交以 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>'
然后在你的
actionSearch()
做类似
的事情$query = isset($_REQUEST['variable_name']) ? $_REQUEST['variable_name'] : '';
或者您可以尝试在您的搜索操作旁边进行重定向操作并更改搜索表单,以便它导致重定向。
将其放入 common/main.php 规则(高级应用程序):
'controller/action/<param:[\w-]+>/<page:[\d]+>' => 'controller/action',
'controller/action/<param>' => 'controller/action',
您需要将 "controller"、"action" 和 "param" 更改为您的控制器操作和参数。 这主要是针对我遇到的搜索问题,所以我把它贴在这里希望它能帮助到别人。