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

问题描述 投票:0回答:3

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

助手(简化代码)

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);
}

现在如何通过在输入中添加另一个“模型”前缀来修改输入的名称属性。 例如,输入默认具有以下名称属性:

<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]" />
php cakephp cakephp-2.0
3个回答
2
投票

你想要

name

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

蛋糕形状助手中没有什么比

data[_custom][MyModel][AssociatedModel][field]
更好的了。就自动化而言,您的选择是:

  • field
    // 正常,使用当前模型
  • Model.field
    // 与非默认模型/关系一起使用
  • Model.$i.field
    // 用户有很多帖子将是
    Post.$i.field

0
投票

对于

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

你可以在里面看到它

lib\Cake\view\FormHelper
,或者直接从在线API中看到: http://api20.cakephp.org/view_source/form-helper#line-942

$modelKey = $this->model();

也许这有帮助。


0
投票

您可以这样做:

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

它变成了传递适当的模型名称和与之关联的模型的情况。

我不知道如何自动执行此操作,因为显然每个关系都是不同的/可能有多个关联。

所以使用你的助手:

echo $this->YourHelper->CustomInput('_custom.MyModel.MyAssociation.field', $options)
可能会成功。

© www.soinside.com 2019 - 2024. All rights reserved.