What's New In Propel 1.6

Propel 1.6 is a backwards compatible evolution of Propel 1.4 (the version bundled with symfony 1.3 and 1.4), which adds some very interesting features. Among these features, you will find the new Propel Query API, which is essentially a Criteria on steroids:

Tip: Check the doc/schema.md file in this plugin source code for a complete reference of the YAML schema format.

You can also register a behavior for all your models right in the propel.ini configuration file. sfPropelORMPlugin already enables the symfony and symfony_i18n behaviors to support symfony's behavior system and model localization features, but you can easily add your owns:

Admin Generator Extensions

The plugin comes bundled with a new admin generator theme named 'admin15'. This theme is backwards compatible with sfPropelPlugin's admin generator theme, and provides additional features based on the new Propel 1.6 query objects:

List view enhancements

Easy related objects hydration: You don't need to write custom doSelectJoinXXX() methods to hydrate related objects. The with setting is much more poxwerful that the previous peer_method and peer_count_method settings, and much easier to use.

Custom query methods: You can refine the query executed to display the list view by by setting the query_methods parameter. This allows to hydrate an additional column wit hno additional query, or to pre-filter the list to hide rows that the user shouldn't see.

All columns are sortable: Virtual columns and foreign key columns are now sortable in the list view. You'll need to set the sort method to use for that, but it's a one-liner. No more lists with column headers that can't be clicked for sorting!

Easy links to filtered lists: A link to a fitlered list view is very easy to write with the new theme. Just add GET parameter, the same way you used to do with the admin generator in symfony 1.2, and it works

Links to another admin module: To make a foreign key column link to the edit view of the related object in another module, you no longer need to create a partial. Just define the link_module setting in the foreign key field configuration, and you're good to go:

Easy custom filters: Adding custom filters becomes very easy once you can take advantage of the generated Propel query classes. This allows your, for instance, to setup a full-text search input in two minutes, replacing many text filters by a single one for better usability.

Filter and Edit forms enhancement

YAML widget customization: The generator.yml format was extended to allow widget and validator customization directly in YAML, without the need to edit a form object. You can also safely omit a field from a display list in a form definition, without any risk to loose data.

Plain text field: If you want to display some data in a form without allowing the user to edit it, use the type: plain attribute, just like in the old days of symfony 1.2. This is very useful for columns managed by the model, like created_at and updated_at columns.

The new options for the admin15 generator theme are fully documented, and illustrated by real life examples, in the doc/admin_generator.md file in this plugin source code.

Form Subframework Modifications

Updated sfWidgetFormPropelChoice widget: The widget now uses the new Query API. You can customize the list of choices more easily by executing custom query methods, using the new query_methods option.

Updated Propel validators: Both the sfValidatorPropelChoice and the sfValidatorPropelUnique were updated to use the new PropelQuery objects, and to accept a query_methods option similar to the one of sfWidgetFormPropelChoice.

Plain text widget and validator: This new widget allows a field to be displayed in a form, without letting the use change it.

Easy Relation Embed: Editing related objects together with the main objects (e.g., editing Comments in a Post form) is a piece of cake. The new sfFormPropel::embedRelation() method does all the work to fetch related objects, build the forms for each of them, and embed the related object forms into the main form. Embdeded relation forms allow to edit, add, and delete a related objects with no additional code.

The Propel widgets, validators, and form classes are fully documented in the doc/form.md file in this plugin source code.

Routing Modifications

The plugin offer two new routing classes, sfPropelORMRoute and sfPropelORMRouteCollection. These classes are used by default in the models build with the propel admin generator. They behave just like the previous sfPropelRoute class - except they don't use the methods option anymore. Instead, use the query_methods option to execute a list of arbitrary query methods when calling getObject() and getObjects().

Developers

License

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.