2016-06-08 70 views
1

简单的问题,但没有解决方案。我们知道Yii2,表单和字段名称

<?php $form = ActiveForm::begin(['method'=>'get']); ?> 
<?= $form->field($formFilter, 'keyword') 
      ->textInput(['placeholder' => \Yii::t('', 'keyword')]); ?> 
... 

将创建简单的表单和输入字段。当然,我们将在行动中加载$ _ POST数据,如

if ($this->isPost() && $formFilter->load($this->post())) { 
     if ($formFilter->validate()) { 
... 

如果我们将看$ _ POST,我们会看到类似FormFilter[keyword]作为字段的名称。所以问题是,我该如何改变它?我需要(我认为)以某种方式改变形式\模型而不是在视图中,因为我们需要适当的加载。

它将在哪里使用?任何GET表单都会显示带有类名称的丑陋网址,例如使用简单的动作和模型,我们将获得FormFilter[keyword],但我想将其更改为keyword,因此,网址将比'长字段名称'更容易理解。

任何人都知道如何处理这个?

回答

1

对不起,后来我发现的解决方案,我认为这将帮助不只是我......

简单的一个是重新定义我们的表格/模式formName()方法。使用formName()我们甚至可以改变它什么都需要或禁止在所有如果将设置这样一个

public function formName() 
{ 
    return ''; 
} 

所以,如果forName()返回空字符串,我们将得到网址:

http://site/items?keyword=&locationID=&employmentType=&educationLevel=&salaryMin= 

默认一会:

http://site/items?FormVacanciesFilter[keyword]=&FormVacanciesFilter[locationID]=6&FormVacanciesFilter[employmentType]=&FormVacanciesFilter[educationLevel]=&FormVacanciesFilter[salaryMin]= 
+0

从$ _POST vars中删除formName容器的目的是什么?这样你就不能使用表单中的大量任务。 –

+0

我认为使用这种方法的主要情况是在多个输入的搜索表单中(例如轮胎或轮辋的定义,并将此信息添加到url(_GET),以便我们获得干净且人性化的URL –

+0

@FabrizioCaldarelli应该与$ _GET之一,如果你想删除$ _POST var key中的className,只需在form \ model中改变你的'formName'方法。搜索抛出模型(视图)的表单渲染,你将看到如何创建name =“fileName”部分 – user1954544