CakePHP - 更改表单输入的“名称”属性

时间:2012-12-17 13:48:11

标签: cakephp cakephp-2.0

我有一个生成自定义表单输入的帮助程序。

帮助(简化代码)

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属性。例如,输入默认具有以下名称属性:

<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]" />

3 个答案:

答案 0 :(得分: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将为Post.$i.field

答案 1 :(得分:0)

您可以这样做:$this->Form->input('_custom.MyModel.field');以您需要的格式创建输入。

成为传递适当的模型名称和相关模型的情况。

我不知道你怎么能自动这样做,因为显然每个关系都不同/可能有多个关联。

所以使用你的助手:echo $this->YourHelper->CustomInput('_custom.MyModel.MyAssociation.field', $options)可能会有所帮助。

答案 2 :(得分:0)

对于input帮助程序,CakePHP使用$this->model()来获取当前模型的名称。

您可以在lib\Cake\view\FormHelper内查看,也可以直接在在线API中查看: http://api20.cakephp.org/view_source/form-helper#line-942

$modelKey = $this->model();

也许这有帮助。