次の構造の「アドレス」テーブルを持つ Cakephp プロジェクトがあります。
CREATE TABLE `addresses` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`name` varchar(50) NOT NULL,
`company` varchar(50) NOT NULL,
`address1` varchar(50) NOT NULL,
`address2` varchar(50) DEFAULT NULL,
`city` varchar(40) NOT NULL,
`state` varchar(2) NOT NULL,
`country` varchar(2) NOT NULL,
`zip` varchar(5) NOT NULL,
PRIMARY KEY (`id`)
)
このプロジェクトには、ユーザーに配送先住所と請求先住所の両方を要求するページがあり、1 つのページで同じデータベース フィールドの複数のインスタンスを許可するためにフォーム入力の名前を構造化する方法がわかりません。
ビューで、アドレス フィールドの 2 つのインスタンスを分離するためにエイリアスを使用しようとしました
IE-
<?=$this->Form->input('Shipaddress.zip', array('label' => 'Zip Code'));?>
...
<?=$this->Form->input('Billaddress.zip', array('label' => 'Zip Code'));?>
次に、ビューで、2 つのインスタンスを分離し、両方を検証し、適切な $this->validationError 値を設定して、エラーを正しいフィールド ビューに適切に表示しようとしました
// place in arrays with proper model name ['Address']
$ship_array['Address'] = $this->request->data['Shipaddress'];
$bill_array['Address'] = $this->request->data['Billaddress'];
//Set Data to model, Validate Against model, change model name in validationErrors to match aliased fields, and remove validationErrors for ['Address']
$this->Address->set($ship_array);
$shipping_valid = $this->Address->validates(array('fieldList' => array('name', 'company', 'address1', 'address2', 'city', 'state', 'country', 'zip')));
$this->validationErrors['Shipaddress'] = $this->validationErrors['Address'];
$this->validationErrors['Address'] = array();
//Do it again for Billing Address fields
$this->Address->set($bill_array);
$billing_valid = $this->Address->validates(array('fieldList' => array('name', 'company', 'address1', 'address2', 'city', 'state', 'country', 'zip')));
$this->validationErrors['Billaddress'] = $this->validationErrors['Address'];
$this->validationErrors['Address'] = array();
残念ながら、これは機能していないようです。これを機能させようとしてやりすぎたのではないかと心配しています...
これを適切に行う方法について、誰かが正しい方向にキックを与えることができますか?