Stable release 4.1 is finally here
For all of you who have tried version 4.0.3 and have been stuck with it for a while, now it’s the right time to upgrade. There are a lot of new features and I’ll try to quickly go over the ones which are most important.
Complete list of changes can be found here:
Models without Controllers
Finally models can be used to the full potential without Controllers. Actually, controller is still used, but as developer you don’t need to worry about it. So take your Form or Grid and use setModel(‘User’);
The older way with controllers should still work fine.
<?page?> in your templates.
Agile Toolkit takes care of URL generation in dynamic content, however you might need to know URLs in your static templates. Use <?page?>about<?/?> to generate URL to the specified page.
Form styles
Now you can use one of several form styles. try $form->setFormClass(‘vertical’). See documentation for other styles.
Even Better User Interface
4.0 branch wasn’t very ugly, but the new UI is much cooler. The jQuery UI theme is slightly enhanced, to give your Agile Toolkit application that refined look. There is however “elephant” theme as well which is designed to look similar to old theme.
New layout is now using “flexible” / fullscreen grid system. That means that 10-grids will be expanded automatically to full width. You can also use grids inside other elements, which works nicely for pop-ups and frames.
New exception system
There is a new way to throw exceptions now. “throw $obj->exception(’nuff said’);”. This connect exceptions object into the application and allows to have transparent validation, object-specific exception selection and additional information gathering. The syntax is also cooler.
initLayout() is called automatically
If you used to call initLayout() from your init() method, you shouldn’t do that anymore. It’s now done automatically after init() is completed. If you do, you will get an exception and therefore should be easy to spot and fix.
Added dynamic methods
In short – it’s possible for Controllers to register new functions on any object dynamically. That’s a pattern similar to JavaScript. To avoid confusion it should only be used when it’s impossible to do otherwise. This feature ensures that backward compatibility can be added through optional controller such as:
$this->api->add(‘Controller_Compat’);
If you have been relying on $this->frame() or $this->ajax() function, you should use this controller as those functions are now obsolete.


This is very good news, i waited a long time support of hybrid forms.
Thanks!