Unique not working after setFormatter
Unique not working after setFormatter
Hi there,
i have the follwing problem:
User accounts must be entered in a table column. These accounts must be in lower case an unique. So i use the follwing syntax:
->setFormatter( function ( $val, $data ) { return trim(strtolower($val)); })
->validator( Validate::unique())
I enter the account "NewAccount" in the editor, it will be written as "newaccount" into the db. Thats correct.
If i enter then the account "newaccount", i get a error message that this account exists. Thats correct.
But if i enter e.g. "NewaCcount" it will also be written as "newaccount" into the db. Thats wrong!
The easiest way would be, to change the column in the db into a unique column. But i do not have the rights to change the table settings.
It seems that the problem is that the reformating to lower happens after the unique check.
I was testing that i do the reformating to lower case in javascript after leaving the input filed of the editor. But i had no success. Has anybody a clue or solution for me?
Thank's in advance
Replies
Hi,
You are right - the validator does indeed happen before the set formatter is run. I honestly can't recall my rational for that at the moment, so I've opened a bug to revisit that.
However, the good news is that there is a simple workaround with an event - e.g.:
And do the same for
preEdit
(which note has three parameters - an id is added in between those two).Note the
&
in&$values
- that tells PHP to pass my reference, overriding its default copy on write behaviour. Without it any changes to$values
would be local. This way, it changes the original array.Allan
Thanks a lot Allan. IT WORKS!
You saved my day.
Sorry, for the late response.