2012-12-17 81 views
0

我有一個助手可以生成自定義表單輸入。CakePHP - 更改表單輸入的「名稱」屬性

助手(simplifed代碼)

public function customInput($field, array $options = array()) { 

    $defaultOptions = array(
     'class' => 'custom-input', 
     'label' => false 
    ); 
    $options = array_merge($defaultOptions, $options); 

    return $this->Form->input($field, $options); 
} 

現在我該怎麼用另一種「模式」前綴來修改輸入的name屬性。例如,輸入默認情況下將具有以下name屬性:

<input type="text" name="data[MyModel][field]" /> 

但我希望它是:

<input type="text" name="data[_custom][MyModel][field]" /> 

主要是,似乎什麼棘手的是,我不知道怎麼弄將默認使用的型號名稱。另外,我需要的東西,工作,如果默認的模型層次比較複雜,如:

<input type="text" name="data[MyModel][AssociatedModel][field]" /> 

將需要被修改爲:

<input type="text" name="data[_custom][MyModel][AssociatedModel][field]" /> 

回答

0

對於input幫助程序,CakePHP使用$this->model()來獲取當前模型的名稱。

您可以從網上API看到它裏面lib\Cake\view\FormHelper,或直接: http://api20.cakephp.org/view_source/form-helper#line-942

$modelKey = $this->model(); 

也許沒有什麼幫助。

+0

這就是我最終做的,因爲它似乎是我可以用來動態生成名稱的唯一東西,但即使如此,如果除了基本的Model.field鍵之外還有其他東西,它會掉下來。 Model.Model.field或Model.0.field將不可能我猜。 – BadHorsie

0

那麼你可以這樣做:$this->Form->input('_custom.MyModel.field');在創建輸入您需要的格式。

它成爲傳遞適當的模型名稱和相關模型的情況。

我不知道如何自動做到這一點,因爲每個關係顯然不同/可能有多個關聯。

所以使用你的幫手:echo $this->YourHelper->CustomInput('_custom.MyModel.MyAssociation.field', $options)可能會伎倆。

+0

是的,但這不起作用,因爲我不知道將使用助手的表單的模型名稱。它可以是任何型號的名稱。所以問題的確是'Form :: input()'方法如何生成名稱字段本身。 – BadHorsie

2

您想name

echo $this->Form->input('whatever', array('name' => 'data[_custom][MyModel][field]')); 

有沒有像data[_custom][MyModel][AssociatedModel][field]糕點形式幫手。您的選擇儘可能自動化走的是:

  • field //正常,使用當前模型
  • Model.field //使用非默認模式/關係使用
  • Model.$i.field //用戶的hasMany後會Post.$i.field