Sounds like a challenge! The only way I can think of is to write a
custom validation rule that checks each of the submitted Product Names
- have a read at:
http://book.cakephp.org/#!/view/1179/Custom-Validation-Rules
Let us know how you get one! Might be handy in the future...
On Mar 9, 2:30 am, Eddy lorde...@gmail.com wrote:
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