I am trying to get multiple rules to run during an upload validation. One validation is built in and one is custom. The custom one works fine however the built in one is not working. The custom one extension was working on another field earlier just fine. Do I have this setup correct?
var $validate = array(
'description' => array(
'rule' => 'notEmpty',
'message' => 'This field cannot be left blank.',
'required' => true
),
'title' => array(
'rule' => 'notEmpty',
'message' => 'This field cannot be left blank.',
'required' => true
),
'Filedata' => array(
'rule' => array('FileExtCheck'),
'message' => 'Please supply a valid type.',
'required' => true
),
'Thumbdata' => array(
'dimensions'=>array(
'rule' => array('dimensions','120','142'),
'message' => 'Your image dimensions are incorrect: 120x142'
),
'extension' => array(
'rule' => array('extension'=>array('jpg','jpeg','png')),
'message' => 'Please supply a valid type.',
'required'=>true
)
)
);
The one I am having issue with is Thumbdata. I want the Thumbdata field to be required and make sure it has correct dimensions and is an image of jpg, jpeg or png. I don't want animated gif's.
I guess, you have a syntax error - unnecessary =>. Should be:
'rule' => array('extension', array('jpg','jpeg','png')),
Related
im using a validation rule for image file in cakephp that i want to validate image extension only if not empty.
the problem is that cakephp is validating the extension if i don't give an image so it gives the validation error 'Only images files'
here's my validation rule that i use to validate an image
image' => array(
'notEmpty' => array(
//'message' => 'Your custom message here',
'allowEmpty' => true,
'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
'extension' => array(
'rule' => array('extension', array('png','jpg','jpeg')),
'message' => 'Only images files',
),
i use this plugin for image upload https://github.com/josegonzalez/cakephp-upload.
Your notEmpty rule doesn't appear to do anything as you haven't specified a rule so can probably be removed.
You need to add the 'allowEmpty' => true to the extension rule to tell Cake to ignore the rule if the field is empty:-
public $validate = array(
'image' => array(
'extension' => array(
'rule' => array('extension', array('png','jpg','jpeg')),
'message' => 'Only images files',
'allowEmpty' => true
)
)
);
Update
The CakePHP Upload plugin has its own extension validation rule, isValidExtension, that you can use:-
public $validate = array(
'image' => array(
'extension' => array(
'rule' => array(
'isValidExtension',
array('png','jpg','jpeg'),
false
),
'message' => 'Only images files'
)
)
);
Passing false as the third parameter of the rule (as above) ensures that the rule is only checked when a file is uploaded.
Hi i encounter strange problem, i have this input in my form
$this->Form->input('processing_data', array('label' => 'STH', 'required' => 'required'));
and this produces this html
<input id="UserProcessingData" type="checkbox" value="1" required="required" name="data[User][processing_data]">
my model validating this field is User model and code of it :
'processing_data' => array(
'rule' => 'notEmpty',
'allowEmpty' => false,
'message' => 'Prosze zaznaczyć'
),
but let's say someone manually delete required="required" from input and then validation is not triggered i thought 'rule => 'notEmpty' will do but nothing changed so next i added 'allowEmpty' => false, but also it didn't help.
What can be done to validate this field even if required is not present
Use this-
'processing_data' => array(
'rule' => array('notEmpty'),
'required' => true,
'message' => 'Prosze zaznaczyć'
),
use required => true in model and you can true your allowEmpty validation if it is mandatory.
'processing_data' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => true,
'message' => 'Prosze zaznaczyć'
),
try this
'processing_data' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => 'Prosze zaznaczyć'
),
my problem is that the numeric validation in cakephp doesn't work for one model. I can't find the reason. Other validations in this model work fine, like email...
my rules:
...
'fone' => array(
'Not empty' => array(
'rule' => 'notEmpty',
'message' => 'Please enter your fonenumber.'
),
'Numeric' => array(
'rule' => 'numeric',
'message' => 'Please enter your fonenumber.'
)
),
...
The db-field is varchar, and if I try something like 123abc it is saved. No error-message!
I tried:
public function beforeValidate($options) {
debug($this->data);
exit;
}
to see if the fields are transmitted - they are, else the values wouldn't be saved.
$this->Address->save($this->request->data) returns always true.
Thanks in advance!
try changing to this
'fone' => array(
'Numeric' => array(
'rule' => 'numeric',
'message' => 'Please enter your fonenumber.'
),
'Not empty' => array(
'rule' => 'notEmpty',
'message' => 'Please enter your fonenumber.'
),
),
Hoping it helps.
I got it,
it was my fault... I had an uninvalidate Function in the Model, which was called in the controller. I found it by checking other forms which access this model
Sorry!!!
I'm using cakephp 2.0 and I'm having problem using Cake's validation thing, which works wonderful when used for it alone.
var $validate = array(
'loginname' => array(
'minCharactersRule' => array(
'rule' => array('minLength', 3),
'required' => true,
'allowEmpty' => false,
'on' => 'create',
),
'alphaNumericRule' => array(
'rule' => 'alphaNumeric',
),
'uniqueRule' => array(
'rule' => 'isUnique',
),
),
'password' => array(
'minCharactersRule' => array(
'rule' => array('minLength', 5),
'required' => true,
'allowEmpty' => false,
),
// on so on ...
Due to Internalization I put the error messages into the view like this:
echo $this->Form->input('display_name', array(
// some other options ...
'error' => array(
'betweenRule' => __('Your Dispay Name must contain at least 3 characters and should be maximal 20 characters long.'),
'uniqueRule' => __('This Display Name is already in use!'),
),
);
Now I want jQuery to validate the form on client-side as well with some little - sexy message box to return validation errors if something goes wrong.
The Ajax Request works fine but the problem here is: I only get returned the name of the validation rule, not the message.
sure: Because I didn't specified any messages in the model.
But how can I get those messages I declared in the view?
Is there any solution without having to type everything twice (PHP and JS)?
I wrote a custom validation method inside my Submission model that basically allows a blank input field, but once someone enters something in it, it'll validate the data entered.
The validation inside my Submission Model looks like this (All other validation rules are working except for 'description'):
var $validate = array(
'title' => array(
'title' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => 'Please enter a title'
),
'minLength' => array(
'rule' => array('minLength', 5),
'message' => 'Please make your title longer'
),
'maxLength' => array(
'rule' => array('maxLength', 300),
'message' => 'Your title needs to be shorter'
),
),
'description' => array(
'checkDescription' => array(
'rule' => array('validateDescription'),
'message' => 'Description must be greater than 5 characters'
),
),
'source' => array(
'source' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => 'Enter a valid source URL'
),
'website' => array(
'rule' => 'url',
'message' => 'Please enter a valid source URL'
),
)
);
My method which is also in my Submission model (below the above code) is:
public function validateDescription($data) {
if(empty($data['Submission']['description']))
return true;
if((strlen($data['Submission']['description'])) <= 5)
return false;
}
I'm not sure why this isn't working at all. In my view, I've got this to display the error:
if ($form->isFieldError('Submission.description'))
echo ($form->error('Submission.description', null, array('class' => 'error')));
The only reason I'm trying to do this, is because using the normal validation with required => false and allowEmpty => true along with a minLength and maxLength validation rule weren't behaving how I intended.
Any help would be greatly appreciated! :)
The $data variable passed into the validation method only contains array($fieldname => $value). You're also not returning true for strings over length of 5. Your method should look like this:
public function validateDescription(array $data) {
$value = current($data);
return !$value || strlen($value) > 5;
}