Re: cake1.2 model validation

2007-06-28 Thread Geoff Ford

You shouldn't need to do that.

The process is

you call Model::save()

Model::save calls validates

validates calls invalidFields

invalidFields iterates the validate array and set validationErrors via
invalidate

(in your ValidFunc you make a call to invalidate therby also setting
validationErrors)

invalidFields returns validationErrors to validates

validates makes sure that validationErrors count is 0

validates returns false to save wich then returns false to your if
($model->save())

Then all happens as normal :- validationErrors is passed onto view in
controller::render (line 639)) as long as the Model is one of the
$uses.

If you are instatiating the Model yourself it wont forward on the
validationErrors

Geoff
--
http://lemoncake.wordpress.com

On Jun 28, 3:22 pm, phpjoy <[EMAIL PROTECTED]> wrote:
> 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;
> > > > > > > > $va

Re: cake1.2 model validation

2007-06-27 Thread phpjoy

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 cake-php@googlegroups.com
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
-~--~~~~--~~--~--~---



Re: cake1.2 model validation

2007-06-27 Thread francky06l

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 cake-php@googlegroups.com
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
-~--~~~~--~~--~--~---



Re: cake1.2 model validation

2007-06-27 Thread Geoff Ford

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 cake-php@googlegroups.com
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
-~--~~~~--~~--~--~---



Re: cake1.2 model validation

2007-06-27 Thread francky06l

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 cake-php@googlegroups.com
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
-~--~~~~--~~--~--~---



Re: cake1.2 model validation

2007-06-27 Thread Geoff Ford

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 cake-php@googlegroups.com
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
-~--~~~~--~~--~--~---



Re: cake1.2 model validation

2007-06-27 Thread Geoff Ford

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 cake-php@googlegroups.com
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
-~--~~~~--~~--~--~---



Re: cake1.2 model validation

2007-06-27 Thread francky06l

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 cake-php@googlegroups.com
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
-~--~~~~--~~--~--~---