Hi
I would like to request your suggestion for my problem.
I have an Address book table. I want to update the address book table using the CActiveRecord with Form validation.
When I used the validation() method, it cannot validate the form. Please help me to solve my problem.
I created the rule in my model.
public function rules()
{
return array(
array('firstname, lastname, street_address, postcode, city, telephone', 'required', 'on'=>'update'),
array('bill_firstname, bill_lastname, bill_street_address, bill_postcode, bill_city, bill_telephone', 'required', 'on'=>'update'),
array('delivery_firstname, delivery_lastname, delivery_street_address, delivery_postcode, delivery_city, delivery_telephone', 'required', 'on'=>'update'),
array('bill_country_id', 'numerical', 'integerOnly'=>true),
array('delivery_country_id', 'numerical', 'integerOnly'=>true),
array('customers_id, country_id', 'numerical', 'integerOnly'=>true),
array('company, firstname, lastname, street_address, suburb, postcode, city, state, telephone, fax', 'length', 'max'=>255),
array('bill_firstname, bill_lastname, bill_street_address, bill_suburb, bill_postcode, bill_city, bill_state, bill_telephone, bill_fax', 'length', 'max'=>255),
array('delivery_firstname, delivery_lastname, delivery_street_address, delivery_suburb, delivery_postcode, delivery_city, delivery_state, delivery_telephone, delivery_fax', 'length', 'max'=>255),
array('_checkBilling, _checkDelivery', 'safe', 'on'=>'create'),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array('address_book_id, customers_id, gender, company, firstname, lastname, street_address, suburb, postcode, city, state, country_id, zone_id, telephone, fax,
bill_firstname, bill_lastname, bill_street_address, bill_suburb, bill_postcode, bill_city, bill_state, bill_country_id, bill_telephone, bill_fax,
delivery_firstname, delivery_lastname, delivery_street_address, delivery_suburb, delivery_postcode, delivery_city, delivery_state, delivery_country_id, delivery_telephone, delivery_fax', 'safe', 'on'=>'search'),
);
}
In Action class,
public function actionUpdate()
{
$model = new TsAddressBook('update');
$model->setIsNewRecord(false);
if(isset($_POST['TsAddressBook']))
{
//Get Address Book Id
$_addressbookId = Yii::app()->user->getState('sesAddressBookId');
$model->attributes=$_POST['TsAddressBook'];
$model->address_book_id = $_addressbookId;
if($model->validate()) {
$model->address_book_id = Yii::app()->user->getState('sesAddressBookId');
$model->customers_id= TsCustomers::model()->getLoginUserId();
if($model->save(false))
$this->redirect(array('view','id'=>$model->address_book_id));
}
}
else {
// Set Customer Id retrieved from Session to the AddressBook model
$model->customers_id = $model->getLoginUserId();
$dataProviderForAddressBook = $model->search();
// If the address book is already installed
if($dataProviderForAddressBook !== null && $dataProviderForAddressBook->getTotalItemCount() > 0)
{
$tsAddressBookList = $dataProviderForAddressBook->getData();
$model = $tsAddressBookList[0];
if($model !== null)
{
Yii::app()->user->setState('sesAddressBookId', $model->address_book_id);
$this->render('update',array(
'model'=>$model,
));
}
}
}
}
In the View page,
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2" class="colourrow"><h4>Contact Address</h4></td>
</tr>
<tr>
<td><?php echo $form->labelEx($model,'company'); ?></td>
<td colspan="2" >
<?php echo $form->textField($model,'company',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'company'); ?>
</td>
</tr>
<tr>
<td colspan="2">Contact Person</td>
</tr>
<tr>
<td><?php echo $form->labelEx($model,'firstname'); ?></td>
<td><?php echo $form->textField($model,'firstname',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'firstname'); ?>
</td>
</tr>
<tr>
<td><?php echo $form->labelEx($model,'lastname'); ?></td>
<td><?php echo $form->textField($model,'lastname',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'lastname'); ?>
</td>
</tr>
<tr>
<td><?php echo $form->labelEx($model,'street_address'); ?></td>
<td>
<?php echo $form->textField($model,'street_address',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'street_address'); ?>
</td>
</tr>
<tr>
<td><?php echo $form->labelEx($model,'suburb'); ?></td>
<td>
<?php echo $form->textField($model,'suburb',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'suburb'); ?>
</td>
</tr>
<tr>
<td><?php echo $form->labelEx($model,'postcode'); ?></td>
<td>
<?php echo $form->textField($model,'postcode',array('size'=>20,'maxlength'=>60)); ?>
<?php echo $form->error($model,'postcode'); ?>
</td>
</tr>
<tr>
<td><?php echo $form->labelEx($model,'city'); ?></td>
<td>
<?php echo $form->textField($model,'city',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'city'); ?>
</td>
</tr>
<tr>
<td><?php echo $form->labelEx($model,'state'); ?></td>
<td>
<?php echo $form->textField($model,'state',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'state'); ?>
</td>
</tr>
<tr>
<td><?php echo $form->labelEx($model,'country_id'); ?></td>
<td>
<?php echo $form->textField($model,'country_id'); ?>
<?php echo $form->error($model,'country_id'); ?>
</td>
</tr>
<tr>
<td><?php echo $form->labelEx($model,'telephone'); ?></td>
<td>
<?php echo $form->textField($model,'telephone',array('size'=>20,'maxlength'=>60)); ?>
<?php echo $form->error($model,'telephone'); ?>
</td>
</tr>
<tr>
<td><?php echo $form->labelEx($model,'fax'); ?></td>
<td>
<?php echo $form->textField($model,'fax',array('size'=>20,'maxlength'=>60)); ?>
<?php echo $form->error($model,'fax'); ?>
</td>
</tr>
</table>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
<?php echo MyHtml::button('Cancel', array('id'=>'butCancel')); ?>
</div>
I appreciate your help.