2016-06-08 3 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 покажет уродливый url с именами классов, например, используя простые действия и модели, мы получим FormFilter[keyword], но я хочу изменить его на keyword, поэтому URL будет более понятным, чем «имена длинного поля».

Кто-нибудь знает, как с этим справиться?

ответ

1

К сожалению, позже я нашел решение, я думаю, что это поможет не только мне ...

Простой один переопределить formName() метод в нашей формы/модели. Использование formName() мы можем даже изменить то, что когда-нибудь нам нужно или отключить вообще, если будет установлено таким образом один

public function formName() 
{ 
    return ''; 
} 

Таким образом, если forName() возвращается пустая строка, мы получим URL:

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

По умолчанию один будет :

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

Какова цель удаления контейнера formName из $ _POST vars? Таким образом, вы не можете использовать массовые назначения из формы. –

+0

Я думаю, что основной случай использования это в формах поиска с несколькими входами (например, определение шины или обода и добавление этой информации в url (_GET), чтобы мы получили чистые и понятные для человека URL-адреса –

+0

@FabrizioCaldarelli должен быть таким же, как для $ _GET один, если вы хотите удалить className в ключах $ _POST var, просто измените метод 'formName' в форме \ model. Выскажите форму рендеринга модели (view), и вы увидите, как создает имя name =" fileName ". – user1954544