2016-06-08 107 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