问题
I want set error validation to input field manually in controller example:
if ($remainTime < 30) {
..... set error validation in here (error: limitTime ), ( error is not in model )
}
other question: i want to ask : bindModel ( in this case , I use bindModel in Behaviors ) 'll cause loss of relationship with other model but is bindModel cause loss of $var validate,too ?
回答1:
if the $validate is defined in the model, bindModel wont cause closs of $var validate.
As for you primary question; you can set/unset/update $validationErrors of the models..eg
($remainTime < 30) {
$this->Model->validationErrors['limitTime'] = "time is less than 30";
}
回答2:
This can be achieved using the invalidate method that will flag the field as having an error:-
$this->Model->invalidate('field_name', 'error message');
回答3:
If you want to invalidate an associated model, you can use something like this:
$this->Model1->Model2->invalidate('Model2', __("Your validation message"));
In my case it invalidates associated select multiple (HABTM) field.
回答4:
Probably you are looking for something like this
回答5:
Since a lot has passed since this has been answered in order to pass correct message you need to put it like this:
$this->Model->validationErrors['limitTime'] = array("time is less than 30");
Form is expecting array of error messages.
回答6:
2019 update for CakePHP3
in YourController.php
// creane new
$entity = $this->YouTable->newEntity();
// or get existing from database
// $entity = $this->YouTable->get($id);
// invalidate fields
$entity->setErrors('your_field', 'error message');
$this->set('$entity', $entity);
and in action.ctp
// create form based on your entity
echo $this->Form->create($entity);
// and include your control
echo $this->Form->control('your_field');
if your form based on table, and for modelless forms first you need to create src/Form/YourForm.php
with schema definition and then call setErrors()
on YourForm
instance from controller.
来源:https://stackoverflow.com/questions/3589898/cakephp-how-set-error-validation-to-input-field-manually-in-controller