2012-12-17 46 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