2013-07-11 4 views
0

У меня есть проект CakePHP со столом Ань адресов "со следующей структурой:Проверка несколько наборов данных POST в 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`) 
) 

Существует страница в этом проекте, который запрашивает у пользователя как для Адрес доставки и адрес фактурирования, а также не знаю, как структурировать имена входов формы, чтобы разрешить несколько экземпляров одних и тех же полей базы данных на одной странице

В представлении я попытался использовать псевдоним для разделения два экземпляра полей адреса

IE-

<?=$this->Form->input('Shipaddress.zip', array('label' => 'Zip Code'));?> 
... 
<?=$this->Form->input('Billaddress.zip', array('label' => 'Zip Code'));?> 

то в представлении, я попытался отделить два экземпляра, проверить оба, и установить соответствующий $ 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(); 

, к сожалению, это не появляется на работе, и я боюсь, что я зашел слишком далеко, пытаясь сделать эту работу ...

может кто-то дать мой пинок в правильном направлении, о том, как это может быть сделано правильно?

ответ

0

Разобрался, как сделать это самостоятельно ...

в/приложение/модели я создал 'ShippingAddress.php' и 'BillingAddress.php', оба Extend "Адрес"

//ShippingAddress.php 
<?php 
App::uses('Address', 'Model'); 
class ShippingAddress extends Address { 
} 

//BillingAddress.php 
<?php 
App::uses('Address', 'Model'); 
class BillingAddress extends Address { 
} 

Для предотвращения новых моделей с использованием таблиц, названные в честь их, мы редактируем родительский Address.php и установить $ useTable так, что оба расширенные модели используют адреса Таблица

//Address.php 
... 
public $useTable = 'addresses'; 
... 

, то его просто вопрос вставки т wo экземпляров полей ввода в представление ... без переименования моделей, без изменения validationErrors, он просто работает :)

Смежные вопросы