Former is the name of a little project I'd like to present you — it's a PHP package that allows you to do all kinds of powerful stuff with forms while remaining pretty simple to use. It's also a really nice guy too once you get to know him.
Former chews a lot of the work for you, it handles repopulation, validation, grouped fields, automatic markup for your favorite CSS framework (Bootstrap, Foundation). I invite you to take a look at the features page to get more informations.
Former aims to rethink elegantly form creation by transforming each field into its own model, with its own methods and attributes. This means that you can do this sort of stuff :
Former::horizontal_open()
->id('MyForm')
->secure()
->rules(['name' => 'required'])
->method('GET');
Former::xlarge_text('name')
->class('myclass')
->value('Joseph')
->required();
Former::textarea('comments')
->rows(10)->columns(20)
->autofocus();
Former::actions()
->large_primary_submit('Submit')
->large_inverse_reset('Reset');
Former::close();
Every time you call a method that doesn't actually exist, Former assumes you're trying to set an attribute and creates it magically. That's why you can do in the above example ->rows(10)
; in case you want to set attributes that contain dashes, just replace them by underscores : ->data_foo('bar')
equals data-foo="bar"
.
Now of course in case you want to set an attribute that actually contains an underscore (jeez aren't you the little smartass) you can always use the fallback method setAttribute('data_foo', 'bar')
. You're welcome.
This is the core of it, but Former offers a lot more. I invite you to consult the wiki to see the extend of what Former does.
Former is developed by Maxime Fabre and Peter Coles.