我有一个生成自定义表单输入的助手。
助手(简化代码)
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]" />
你想要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
对于input
助手,CakePHP 使用 $this->model()
来获取当前模型的名称。
您可以在 libCakeviewFormHelper
中或直接从在线 API 中看到它:http://api20.cakephp.org/view_source/form-helper#line-942
$modelKey = $this->model();
也许这会有所帮助。
你可以做的:$this->Form->input('_custom.MyModel.field');
以您需要的格式创建输入。
它变成了传递适当的模型名称和与之关联的模型的情况。
我不知道您如何自动执行此操作,因为显然每个关系都是不同的/可能有多个关联。
因此,使用您的助手:echo $this->YourHelper->CustomInput('_custom.MyModel.MyAssociation.field', $options)
可能会解决问题。