works like a charm.. here's the final code:
var $validate = array(
'directory' => array('rule' => 'ValidFunc')
);
function ValidFunc($value) {
$this->data['ModelName']['fieldname']='new' .$value;
case 1: $this->invalidate('fieldname', 'message1'); return true;
case 2: $this->invalidate('fieldname', 'message2'); return true;
}
now here's the magic trick, in order to make it visible in the form in
the view i should..:
$this->data = $this->ModelName->data;
otherwise it doesn't get changed in the controller and then displayed
in the view.
is there a way to change it from the model itself?
On Jun 28, 1:05 am, francky06l <[EMAIL PROTECTED]> wrote:
> Yes, nice hack somehow :-)
> Thanks Geoff
>
> On Jun 28, 12:56 am, Geoff Ford <[EMAIL PROTECTED]> wrote:
>
> > Just took at look at the code and your right franky, after you return
> > false from your custom function invalidFields() then calls $this-
>
> > >invalidate() itself overwriting the message you just wrote.
>
> > However this is not the case if you return true.
>
> > This may be a bit "wrong" but you can get around this like so
>
> > function ValidFun($ruleParams){
> > $fieldName = array_keys($ruleParams);
> > $fieldName = $fieldName[0];
> > if ($conditions){
> > // all validation passed
> > } else {
> > // validation failed
> > $this->invalidate($fieldName, 'Your Error Message');
> > }
>
> > return true;
>
> > }
>
> > By always returning true invalidFields() will not set the error
> > message itself, but the Model::validationErrors will still contain the
> > invalid field with your error message and and so Model::validates()
> > will return the correct value of false.
>
> > On Jun 28, 8:45 am, francky06l <[EMAIL PROTECTED]> wrote:
>
> > > I am not sure that will work (I might be wrong) but it seems to me
> > > that the model->invalidate is called after your validFunc returning
> > > false (this call will oerwrite your message). I haven't tested,
> > > neither check the code deeply enough to know if the call to invalidate
> > > (into the validateField method) checks for an existing messages prior
> > > to call invalidate..
>
> > > Let me know :-)
> > > Thanks
>
> > > On Jun 28, 12:30 am, Geoff Ford <[EMAIL PROTECTED]> wrote:
>
> > > > Oops just reread the question.
>
> > > > To set the error message from within the ValidFunc you can use the
> > > > Model::invalidate($field, $value = null);
>
> > > > On Jun 28, 8:26 am, Geoff Ford <[EMAIL PROTECTED]> wrote:
>
> > > > > if believe that you can change the error message with
> > > > > var $validate = array(
> > > > > 'directory' => array('error_mesasage' =>
> > > > > array(array('rule' => 'ValidFunc', 'message'=>'message'))
> > > > > );
>
> > > > > On Jun 28, 5:32 am, francky06l <[EMAIL PROTECTED]> wrote:
>
> > > > > > I guess you can't do this using the model validation, but if your
> > > > > > validation function is in the current model, you could replace the
> > > > > > value $this->data['Model']['field'] and return true (in this way,
> > > > > > this
> > > > > > will not be considered as an error).
> > > > > > If your goal is to correct the value, show it with a message, the
> > > > > > above is still valid (for the value) but I have no idea how to
> > > > > > change
> > > > > > the message. You can have a look to the bakery (multiple
> > > > > > validation),
> > > > > > Mariano has done work about validation messages into the view-side,
> > > > > > maybe there you could interact with it.
>
> > > > > > On Jun 27, 9:11 pm, phpjoy <[EMAIL PROTECTED]> wrote:
>
> > > > > > > ahoy,
>
> > > > > > > i have the following validation in a model:
> > > > > > > var $validate = array(
> > > > > > > 'directory' => array('rule' => 'ValidFunc',
> > > > > > > 'message'=>'message')
> > > > > > > );
>
> > > > > > > function ValidFunc($value) {
> > > > > > > $newvalue = 'new' .$value;
> > > > > > > $value = $newvalue;
> > > > > > > case 1: /*message=1*/ return false;
> > > > > > > case 2: /*message=2*/ return false;
> > > > > > > }
>
> > > > > > > there are 2 things i'm struggling to do:
> > > > > > > 1) change the validation message from the ValidFunc,
> > > > > > > 2) change $value for the form to $newvalue.
>
> > > > > > > anyone knows how i can do that?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake
PHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---