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

3 に答える 3

2

あなたがしたいname

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

data[_custom][MyModel][AssociatedModel][field]Cakes フォーム ヘルパーのようなものはありません。自動化に関するオプションは次のとおりです。

  • field// 通常、現在のモデルを使用
  • Model.field// デフォルト以外のモデル / リレーションで使用
  • Model.$i.field// ユーザー hasMany Post はPost.$i.field
于 2012-12-17T15:16:38.250 に答える
0

ヘルパーの場合input、CakePHP は$this->model()現在のモデルの名前を取得するために使用します。

lib\Cake\view\FormHelper内で、またはオンライン API から直接 見ることができます: http://api20.cakephp.org/view_source/form-helper#line-942

$modelKey = $this->model();

たぶんそれが役立ちます。

于 2012-12-17T15:24:57.717 に答える
0

よくできます: $this->Form->input('_custom.MyModel.field');必要な形式で入力を作成します。

適切なモデル名とそれに関連付けられたモデルを渡す場合になります。

明らかに各関係が異なる/複数の関連付けがある可能性があるため、これを自動的に行う方法がわかりません。

だからあなたのヘルパーを使用してください:echo $this->YourHelper->CustomInput('_custom.MyModel.MyAssociation.field', $options)トリックを行うかもしれません。

于 2012-12-17T13:56:47.980 に答える