
dojo - Smarty - PHP - Synchronizing client- and server-side validation
The following architecture with Smarty and dojo allows you to the client and server synchronized for validation for RIA/PHP applications.
Each input has 4 characteristics defined in a (PHP) .ini file -
V_input_name = regExp (usually includes length)
L_input_name = max length
R_input_name = true or false (required or not)
T_input_name = type of input data in database, used to support documentation
Each input also has 3 characteristics defined in a Smarty .conf file, and there is a .conf file for every language (.ini be under languages)
E_input_name = error message
I_input_name = invalid message
P_input_name = prompt message
Smarty constructs the input tags like so:
<input type="text" dojoType="dijit.form.ValidationTextBox"
name="input_name" id="input_name"
regExp="{#V_input_name#}"
errorMessage="{#E_input_name#}"
promptMessage="{#P_input_name#}"
invalidMessage="{#I_input_name#}"
length="{#L_input_name#}" />
There is a simple javascript validation that accepts an array of inputs and tests if they are valid with input_name.isValid(), displaying input_name.errorMessage if not, and cancelling the submit.
On the server side, there is a loop that tests the inputs against the same strings:
foreach ($aInput as $k => $v)
if (isset($aIni['V_'.$k]))
{
$sInput=trim($v);
if (isset($aIni['R_'.$k])
if (($aIni['R_'.$k]=='true') && ($sInput=='')) /* Test for required */
return false;
if (!filter($aIni['V_'.$k],$v)) /* flter ensures data complies with regexp */
return false;
}
This allows the client-side code to help the user enter valid data, and allows the server-side code to protect the server by disallowing or discarding data that isn’t valid.
Please note that page-level validation, where the required state and content of data may vary based on other inputs must be reflected at both the client and server side.
Print article | This entry was posted by elvis on 10/18/08 at 10:08:41 pm . Follow any responses to this post through RSS 2.0. |