Hello people. I been trying to validate a form with several product
names but haven't been succesful. The last two days were spent
searching for a way to do this but with no results either.
The thing is I have a view with a form with a single field:
product_name and the necesary code in the controller to recieve $this-
>data, and save if the data passed validation, and the model with the
validation method to check if the name is unique, not too short or too
long and not empty.
////// IN THE VIEW list_products.ctp
<?php
echo $this->Form->create('Product');
echo $this->Form->input('Product.product_name', array('label'
=> 'Product Name'));
echo $this->Form->input('Product.provider_id', array('type' =>
'hidden', 'value' => 'whatever number' ));
echo $this->Form->end('Save Product');
?>
/////// IN THE CONTROLLER function listProducts()
<?php
function listProducts()
if( !empty($this->data) )
{
$this->Product->set($this->data);
if( $this->Product->validates($this->data) )
{
$this->Product->begin();
if( $this->Product->save($this->data['Product']) )
{
$this->Product->commit();
$this->Session->setFlash('Product Saved.');
$this->redirect(array('action' => 'listProducts'));
}
else
{
$this->Product->rollback();
$this->Session->setFlash('Error saving product!');
$this->redirect(array('action' => 'listProducts'));
}
}
}
?>
/////// IN THE MODEL
<?php
class Product extends AppModel {
var $name = 'Product';
var $useTable = 'providers_product';
var $validate = array(
'product_name' => array(
'minLength'=>array(
'rule' => array('minLength', 5),
'message' => 'Too short',
),
'maxLength'=>array(
'rule' => array('maxLength', 200),
'message' => 'Too long',
),
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => 'You can't leave this
empty',
),
'isUnique' => array(
'rule' => 'isUnique',
'message' => 'Name not unique',
),
),
);
}
?>
But now I have been trying to change this view so I can type 1 to 5
product names at once.
So my view now looks like this (which I found how to do it in the
cookbook):
<?php
echo $this->Form->create('Product');
echo $this->Form->input('Product.0.product_name', array('label' =>
'Product Name'));
echo $this->Form->input('Product.1.product_name', array('label' =>
'Product Name'));
echo $this->Form->input('Product.2.product_name', array('label' =>
'Product Name'));
echo $this->Form->input('Product.3.product_name', array('label' =>
'Product Name'));
echo $this->Form->input('Product.4.product_name', array('label' =>
'Product Name'));
echo $this->Form->input('Product.provider_id', array('type' =>
'hidden', 'value' => 'whatever number' ));
echo $this->Form->end('Save');
?>
This way I have $this->data looking like this:
Array
(
[Product] => Array
(
[0] => Array
(
[product_name] => name 1
)
[1] => Array
(
[product_name] => name 2
)
[2] => Array
(
[product_name] => name 3
)
[3] => Array
(
[product_name] => name 4
)
[4] => Array
(
[product_name] => name 5
)
[provider_id] => whatever number
)
)
Now, the problem is that I can't figure out how to validate $this-
>data[Product]. The model always return as if the validation was
correct and the controller proceeds to save. I know that I have to
change the controller to saveall() instead of saving a single field
but still, no matter how I set the data before validation it doesn't
validate.
Please help!!!
--
Our newest site for the community: CakePHP Video Tutorials
http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others
with their CakePHP related questions.
To unsubscribe from this group, send email to
[email protected] For more options, visit this group at
http://groups.google.com/group/cake-php