Yii2 URL管理器规则和表格与GET方法

时间:2015-05-28 20:27:14

标签: 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>

我决定为搜索规则制作漂亮的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`

3 个答案:

答案 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;进入你的控制器动作和参数。 这主要是我遇到的搜索问题,所以我在这里发布,希望它可以帮助别人。