入力フォームの検証とそのフォームからのデータの保存に問題があります。確かではありませんが、おそらくこれらは両方とも関連付けの問題が原因であると思われます。
CakePHP 2.2.0 RC2 を使用しています。
ユーザー、メンバー、アドレスの 3 つのモデルがあります。各ユーザーは自分のアカウントに複数のメンバーを持つことができ、各ユーザーは多くのアドレスを持つことができます (過去のアドレスも記憶しています)。
私のモデルの関連付けは次のとおりです。
ユーザーモデル:
class User extends AppModel {
public $name = 'User';
public $hasMany = array(
'Member' => array(
'className' => 'Member',
'foreignKey' => 'user_id',
'order' => 'Member.member ASC',
'dependent' => true
),
'Address' => array(
'className' => 'Address',
'foreignKey' => 'user_id',
'order' => 'Address.address ASC',
'dependent' => true
)
);
...
メンバーモデル:
class Member extends AppModel {
public $name = 'Member';
public $displayField = 'member';
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
)
);
...
住所モデル:
class Address extends AppModel {
public $name = 'Address';
public $displayField = 'address';
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
)
);
...
私の Form create ステートメントには、次のものがあります。
$this->Form->create( 'Member', array( 'url' => array( 'action' => 'add' ) ) );
ユーザーが既にアドレスエントリを持っているかどうかに応じて、メンバーフィールドのみ、またはメンバーフィールドとアドレスフィールドのいずれかを送信するときに、メンバーモデルとコントローラーを使用してフォームを処理しています (ユーザーがアドレス入力を持っていない場合は、アドレス入力を追加します)。フィールドをフォームに追加しますが、それ以外の場合はそうではありません)。
フォームにユーザー フィールドを送信していません。
ここで、関連付けが正しく設定されていれば、モデルの「必須」フィールドの横にアスタリスクが表示されると予想されます。Member モデルと Address モデルの両方で必須として設定されたフィールドがいくつかあります。Member フィールドは必須として (アスタリスク付きで) フォームに表示されますが、Address フィールドはそうではありません。
Address モデルからの必要な Address フィールド コードの例:
public $validate = array(
'street1' => array(
'required' => array(
'rule' => array( 'notEmpty' ),
'required' => true, 'allowEmpty' => false,
'message' => 'Please enter a street address'
),
....
そして、ここに私のビュー/フォームコードの一部があります:
echo $this->Form->input( 'Member.firstname', array( 'label' => 'First name', 'type' => 'text' ) );
echo $this->Form->input( 'Member.middlename', array( 'label' => 'Middle name', 'type' => 'text' ) );
echo $this->Form->input( 'Member.lastname', array( 'label' => 'Last name', 'type' => 'text' ) );
echo '<p class="bold">Please enter current address details:</p>';
echo $this->Form->input( 'Address.street1', array( 'label' => 'Street address (line 1)', 'type' => 'text' ) );
echo $this->Form->input( 'Address.street2', array( 'label' => 'Street address (line 2)', 'type' => 'text' ) );
echo $this->Form->input( 'Address.suburb', array( 'label' => 'Suburb', 'type' => 'text' ) );
...
フォーム ページに $validationErrors を出力すると (フォーム送信前)、次のようになります。
Array
(
[Member] => Array
(
)
[User] => Array
(
)
)
そこに [Address] セクションもあるはずだと思います。
明らかなことは何も見つかりませんが、CakePHP は初めてなので (PHP の経験はありますが)、アイデアをいただければ幸いです。
ありがとう!ピーター。