| 
<?phpinclude(dirname(__FILE__).'/../../src/php/Formal.php');
 
 function test()
 {
 $formdata = [
 'foo' => '',
 'moo' => [
 ['choo' => 1],
 ['choo' => 2],
 ['choo' => 3],
 ],
 
 'soo' => [
 [
 'boo' => 1,
 'xoo' => 'a'
 ],
 [
 'boo' => 2,
 'xoo' => 'b'
 ],
 [
 'boo' => 3,
 'xoo' => 'c'
 ],
 ],
 
 'koo' => [
 '',
 '',
 '',
 ],
 
 'num' => [
 '0.1',
 '1.2',
 ],
 
 'date' => [
 '2012-11-02',
 '20-11-02',
 ],
 ];
 
 $formal = (new Formal())
 ->option('WILDCARD', '*') // default
 ->option('SEPARATOR', '.') // default
 ->option('break_on_first_error', false) // default
 ;
 $data = $formal
 ->option('defaults', [
 'foo' => 'bar',
 'moo.*.foo' => 'bar',
 'koo.*' => 'bar'
 ])
 ->option('typecasters', [
 'koo.*.foo' => Formal::typecast('str'),
 'num.*' => Formal::typecast('composite', [Formal::typecast('float'), Formal::typecast('clamp', [0.0, 1.0])
 ])])
 ->option('validators', [
 'foo.*' => Formal::validate('required'),
 'foo.*.foo' => Formal::validate('required'),
 'moo.*.foo' => Formal::validate('required'),
 'koo.*.foo' => Formal::validate('optional', Formal::validate('required')),
 'date.*' => Formal::validate('match', Formal::datetime('Y-m-d'), '"{key}" should match {args} !'),
 'date.0' => Formal::validate('eq', Formal::field('date.1'))
 ])
 ->process($formdata);
 $err = $formal->getErrors();
 
 echo json_encode($formdata, JSON_PRETTY_PRINT) . PHP_EOL;
 
 echo json_encode($data, JSON_PRETTY_PRINT) . PHP_EOL;
 
 echo implode("\n", $err) . PHP_EOL;
 
 echo json_encode($formal->get('soo.1.boo', 'default', $formdata), JSON_PRETTY_PRINT) . PHP_EOL;
 echo json_encode($formal->get('soo.*.boo', 'default', $formdata), JSON_PRETTY_PRINT) . PHP_EOL;
 echo json_encode($formal->get('soo.*.*', 'default', $formdata), JSON_PRETTY_PRINT) . PHP_EOL;
 echo json_encode($formal->get('soo.1.koo', 'default', $formdata), JSON_PRETTY_PRINT) . PHP_EOL;
 echo json_encode($formal->get('soo.*.koo', 'default', $formdata), JSON_PRETTY_PRINT) . PHP_EOL;
 echo json_encode($formal->get('soo.koo.1', 'default', $formdata), JSON_PRETTY_PRINT) . PHP_EOL;
 echo json_encode($formal->get('soo.koo.*', 'default', $formdata), JSON_PRETTY_PRINT) . PHP_EOL;
 }
 
 echo ('Formal::VERSION ' . Formal::VERSION . PHP_EOL);
 test();
 
 |