|
View:
New views
9 Messages
—
Rating Filter:
Alert me
|
|
|
Solar 1.0.0alpha3 releasedHi all,
It is with great pleasure that I announce the release of Solar 1.0.0alpha3. I have not updated the .com website yet (will do that tomorrow), but you can download the 1.0.0alpha3 release from <http://solarphp.net > right now. An alpha3 system is also in place at <http://svn.solarphp.com/system/download >. As noted earlier, this will be the last alpha release of Solar; I expect to have a beta released within the next 8 weeks or so. The remainder of this email is planned as a blog post for after I update the website. Thanks, everyone, for your patient assistance over the past year. :-) * * * I can't believe that almost a whole year has passed since alpha2 was released. In that time we have made some significant changes to how some major Solar components work. You can read the class-by-class [change notes][] if you like, but after a year, there's quite a lot to wade through. To point out the highlights, I'll give a broad overview in this post. Before I do that, though, I would like to thank one person in particular who made this release what it is: [Jeff Moore](http://www.procata.com/blog/ ) of [Mashery](http://mashery.com). Jeff has done more on this release than any other contribitor, making huge strides in the Model and other packages through his code, reporting, revisions, and (admittedly) nagging of me to make things better. Thank you, Jeff, for everything you have done to make this release possible. There are lots of others who contributed in important ways, most of whom are noted in the change log with their specific achievements: - Jon Elofson - Anthony Gentile - Robert Gonzalez - Tomasz Holeksa - Antti Holvikari - Ray Kolbe - Kalkin - Dmytro Konstantinov - Clay Loveless - Rodrigo Moraes - Nicholas Sloan - Jeff Surgeson - Richard Thomas - Matthew Turland - Robert Treat - Kevin Wagner Thanks, guys, for all your effort and attention. The project is better for your having been involved. :-) Model Changes ============= Nothing has been lost. Solar models still: - recognize has-one, belongs-to, and has-many relationships; - allow eager- and lazy-fetching of related records; - support [SingleTableInheritance][]; - save only the changed data, not the whole record; - perform data filtering at save() time; and - generate automatic form hints from the table columns. However, much has been added, including performance enhancements across the board. Below are only a few of the highlights; for a full rundown, please review the [change notes][]. Less-Active Table, More-Active Record ------------------------------------- Previously, the table-based [Solar_Sql_Model][] class retained a lot of [TableModule][]-like behavior from its predecessors (Solar_Sql_Table, Solar_Sql_Entity, [PEAR DB_Table][], etc). When combined with the [Solar_Sql_Model_Record][] logic for inserts and updates, it became difficult to track which parts were doing what. To remedy this, the Model class has had most of the manipulation logic stripped out of its insert/update/etc methods, and all of that special logic has been placed in the Record class. That makes the Model more like a [TableDataGateway][], in that it will insert and update the data you give it without attempt to massage it; as a corollary, the Record becomes more like an [ActiveRecord][] implementation. Many-to-Many ------------ We have added "has-many-through" relationship descriptors. This means that models now recognize many-to-many relationships through an explicit association model. Saving Related Records ---------------------- When you save a record, it now wires up all the related record IDs for you, setting all the necessary primary key information automatically. In partcular, saving a "has-many-through" will wire up not only the related records on the foreign side of the association table, but also the related records on the association table itself. For the "has" relationships, it then saves each of the related records and collections for you: - has-one records are saved as they are; - has-many collections are saved as they are; and - has-many-through collections are checked for additions and removals against the association table, and are saved or deleted as necessary; this includes saving the records on the foreign side of the association table Note that automatic saving of relateds **does not** occur on "belongs- to" relationships. Those you still have to have on your own, because they are necessarily precursors to the existence of the current record or collection. Eager Fetching -------------- Eager fetching performance has been improved in many common cases, allowing dual strategies for relating back to native record sets and dual strategies for merging related records back into the native record set. As before, eager fetching avoids the 1+N pitfall, generating only one additional query per relationship (*not* one per record in the native result set). Additionally, it is now possible to chain eager fetches. That is, eager-fetched records can themselves eager-fetch their own related records, all with a single call to the Model fetch*() method. XML-Struct Columns ------------------ Solar models support automatic application of serialize() and unserialize() to columns in the [$_serialize_cols][] model property. We now add to this the ability to serialize and unserialize basic XML- formatted data as well, through the use of the new [Solar_Struct_Xml] [] class. (N.b.: XML structs do not support attributes.) Among other things, this means you can store simplified XML data in a column, and database engines capable of searching it, can search it. You can manipulate that data as XML data in PHP as well via the XML- struct mechanisms. Non-Model Changes ================= Arch-Class ---------- The [Solar][] arch-class has fewer static methods in it; collections of related methods have been grouped into their own classes (e.g., [Solar_Config][]). Construction ------------ The Solar_Base class, from which all other Solar classes extend, now has a more pluggable construction and configuration process. Hooks include: - `_preConfig()` to set up the object before configuration - `_postConfig()` to modify the object after configuration - `_postConstruct()` to complete object construction This means you never need to override a Solar constructor; instead, place your construction logic in the applicable hook method. Page Controllers ---------------- The [Solar_Controller_Page][] class now comes with a default layout and views, along with added error handling methods, making it more useful as a base page controller class in its own right. (Previously, one had to extend [Solar_App_Base][], or create a base app of one's own, to get these basic defaults.) One thing has been removed: recognition of page-level view helpers. In theory, these seemed like they might be useful. However, in practice, they were rarely if ever needed. Vendor-level helpers are now the first place the views will look. Lazy Sessions ------------- The [Solar_Session][] class now supports "lazy" sessions. Previously, it would start a sesssion automatically at instantiation time. Now, it starts a session only when ... 1. A PHP session cookie already exists, or 2. You call one of the `set*()` methods to store a value This means that the session object can be available at any time, but won't invoke any session-based overhead until it is actually needed. Make-Vendor and Model-Based Apps -------------------------------- The [make-vendor][] command now generates a special page controller called `{Vendor}_Controller_Model`, which houses all the code for a minimal BREAD-S (browse, read, edit, add, delete, and search) application based on a model. Previously, [make-app][] would generate the BREAD code fresh in each new class, but when you build mutiple model-based apps, you would end up with a lot of code duplication. The new approach removes that duplication entirely. This means that `make-app --model-name` will now create app classes that extend from `{Vendor}_Controller_Model`. Compound Selects ---------------- [Solar_Sql_Adapter][] and [Solar_Sql_Select][] now support UNION and UNION ALL query construction, with the related LIMIT and ORDER components of those kinds of queries. Forms ----- The [Solar_View_Helper_Form][] view helper for forms now supports different kinds of decoration: as definition list, as a table, or as "plain" (no surrounding markup). The helper itself has been significantly refactored so that the internal logic is easier to follow, and support logic has been extracted into separate classes when possible. Much More ========= There is a lot more to be had. Take a look at the [Getting Started][] documentation, then spend some time with these blog entries from Solar users: - <http://elofson.ca/2009/03/getting-started-with-solar> - <http://elofson.ca/2009/03/the-solar-configuration-file> - <http://elofson.ca/2009/03/screen-cast-installing-and-setting-up-the-solar-system > - <http://elofson.ca/2009/03/a-simple-solar-application> - <http://elofson.ca/2009/03/screen-cast-creating-a-simple-solar-application > - <http://elofson.ca/2009/04/views-layouts-and-locales> - <http://elofson.ca/2009/04/a-real-solar-application> - <http://elofson.ca/2009/06/view-helpers> - <http://elofson.ca/2009/06/layouts> - <http://elofson.ca/2009/06/using-solar-access-control> - <http://www.phpjack.com/content/quick-taste-solar-framework-model-flexability-and-power > - <http://www.phpjack.com/content/solar-articles-around-web> - <http://www.phpjack.com/content/solar-tips-1> - <http://www.phpjack.com/content/solar-framework-adds-firebug-support-thanks-firephp > - <http://www.phpjack.com/content/using-jquery-solar> - <http://solarphp.com/blog/read/8-using-registry-set-to-auto-register-objects > - <http://solarphp.com/blog/read/12-authentication-using-my-sql> - <http://solarphp.com/blog/read/19-adapter-for-master-slave-my-sql-setups > - <http://solarphp.com/blog/read/27-solar-cli-getting-started> - <http://solarphp.com/blog/read/28-solar-cli-make-vendor> - <http://solarphp.com/blog/read/29-solar-cli-make-model> - <http://agentile.com/view/28/solarphp-on-mosso> * * * [$_serialize_cols]: http://solarphp.com/class/Solar_Sql_Model::$_serialize_cols [ActiveRecord]: http://martinfowler.com/eaaCatalog/activeRecord.html [SingleTableInheritance]: http://martinfowler.com/eaaCatalog/singleTableInheritance.html [Solar]: http://solarphp.com/class/Solar [Solar_App_Base]: http://solarphp.com/class/Solar_App_Base [Solar_Base]: http://solarphp.com/class/Solar_Base [Solar_Controller_Page]: http://solarphp.com/class/Solar_Controller_Page [Solar_Session]: http://solarphp.com/class/Solar_Session [Solar_Sql_Adapter]: http://solarphp.com/class/Solar_Sql_Adapter [Solar_Sql_Model]: http://solarphp.com/class/Solar_Sql_Model [Solar_Sql_Model_Record]: http://solarphp.com/class/Solar_Sql_Model_Record [Solar_Sql_Select]: http://solarphp.com/class/Solar_Sql_Select [Solar_Struct_Xml]: http://solarphp.com/class/Solar_Xml_Struct [Solar_View_Helper_Form]: http://solarphp.com/class/Solar_View_Helper_Form [TableDataGateway]: http://martinfowler.com/eaaCatalog/tableDataGateway.html [TableModule]: http://martinfowler.com/eaaCatalog/tableModule.html [make-app]: http://solarphp.com/class/Solar_Cli_MakeApp [make-vendor]: http://solarphp.com/class/Solar_Cli_MakeVendor [Getting Started]: http://solarphp.org/manual:getting_started:first_run [change notes]: http://svn.solarphp.com/core/info/1.0.0alpha3/notes [PEAR DB_Table]: http://pear.php.net/DB_Table -- Paul M. Jones http://paul-m-jones.com/ _______________________________________________ Solar-talk mailing list Solar-talk@... http://mailman-mail5.webfaction.com/listinfo/solar-talk |
|
|
Re: Solar 1.0.0alpha3 releasedThis is so great! I have just grabbed myself a delicious, life-giving
beer and am raising my glass to Paul and all those who support Solar. Cheers everyone! Jon On 9/10/09, Paul M Jones <pmjones@...> wrote: > Hi all, > > It is with great pleasure that I announce the release of Solar > 1.0.0alpha3. I have not updated the .com website yet (will do that > tomorrow), but you can download the 1.0.0alpha3 release from > <http://solarphp.net > > right now. An alpha3 system is also in place at > <http://svn.solarphp.com/system/download > >. > > As noted earlier, this will be the last alpha release of Solar; I > expect to have a beta released within the next 8 weeks or so. > > The remainder of this email is planned as a blog post for after I > update the website. > > Thanks, everyone, for your patient assistance over the past year. :-) > > > * * * > > > I can't believe that almost a whole year has passed since alpha2 was > released. In that time we have made some significant changes to how > some major Solar components work. You can read the class-by-class > [change notes][] if you like, but after a year, there's quite a lot to > wade through. To point out the highlights, I'll give a broad overview > in this post. > > Before I do that, though, I would like to thank one person in > particular who made this release what it is: [Jeff > Moore](http://www.procata.com/blog/ > ) of [Mashery](http://mashery.com). Jeff has done more on this release > than any other contribitor, making huge strides in the Model and other > packages through his code, reporting, revisions, and (admittedly) > nagging of me to make things better. Thank you, Jeff, for everything > you have done to make this release possible. > > There are lots of others who contributed in important ways, most of > whom are noted in the change log with their specific achievements: > > - Jon Elofson > - Anthony Gentile > - Robert Gonzalez > - Tomasz Holeksa > - Antti Holvikari > - Ray Kolbe > - Kalkin > - Dmytro Konstantinov > - Clay Loveless > - Rodrigo Moraes > - Nicholas Sloan > - Jeff Surgeson > - Richard Thomas > - Matthew Turland > - Robert Treat > - Kevin Wagner > > Thanks, guys, for all your effort and attention. The project is > better for your having been involved. :-) > > > Model Changes > ============= > > Nothing has been lost. Solar models still: > > - recognize has-one, belongs-to, and has-many relationships; > - allow eager- and lazy-fetching of related records; > - support [SingleTableInheritance][]; > - save only the changed data, not the whole record; > - perform data filtering at save() time; and > - generate automatic form hints from the table columns. > > However, much has been added, including performance enhancements > across the board. Below are only a few of the highlights; for a full > rundown, please review the [change notes][]. > > > Less-Active Table, More-Active Record > ------------------------------------- > > Previously, the table-based [Solar_Sql_Model][] class retained a lot > of [TableModule][]-like behavior from its predecessors > (Solar_Sql_Table, Solar_Sql_Entity, [PEAR DB_Table][], etc). When > combined with the [Solar_Sql_Model_Record][] logic for inserts and > updates, it became difficult to track which parts were doing what. > > To remedy this, the Model class has had most of the manipulation logic > stripped out of its insert/update/etc methods, and all of that special > logic has been placed in the Record class. That makes the Model more > like a [TableDataGateway][], in that it will insert and update the > data you give it without attempt to massage it; as a corollary, the > Record becomes more like an [ActiveRecord][] implementation. > > > Many-to-Many > ------------ > > We have added "has-many-through" relationship descriptors. This means > that models now recognize many-to-many relationships through an > explicit association model. > > > Saving Related Records > ---------------------- > > When you save a record, it now wires up all the related record IDs for > you, setting all the necessary primary key information automatically. > In partcular, saving a "has-many-through" will wire up not only the > related records on the foreign side of the association table, but also > the related records on the association table itself. > > For the "has" relationships, it then saves each of the related records > and collections for you: > > - has-one records are saved as they are; > - has-many collections are saved as they are; and > - has-many-through collections are checked for additions and > removals against the association table, and are saved or deleted > as necessary; this includes saving the records on the foreign side > of the association table > > Note that automatic saving of relateds **does not** occur on "belongs- > to" relationships. Those you still have to have on your own, because > they are necessarily precursors to the existence of the current record > or collection. > > > Eager Fetching > -------------- > > Eager fetching performance has been improved in many common cases, > allowing dual strategies for relating back to native record sets and > dual strategies for merging related records back into the native > record set. As before, eager fetching avoids the 1+N pitfall, > generating only one additional query per relationship (*not* one per > record in the native result set). > > Additionally, it is now possible to chain eager fetches. That is, > eager-fetched records can themselves eager-fetch their own related > records, all with a single call to the Model fetch*() method. > > > XML-Struct Columns > ------------------ > > Solar models support automatic application of serialize() and > unserialize() to columns in the [$_serialize_cols][] model property. > We now add to this the ability to serialize and unserialize basic XML- > formatted data as well, through the use of the new [Solar_Struct_Xml] > [] class. (N.b.: XML structs do not support attributes.) > > Among other things, this means you can store simplified XML data in a > column, and database engines capable of searching it, can search it. > You can manipulate that data as XML data in PHP as well via the XML- > struct mechanisms. > > > Non-Model Changes > ================= > > > Arch-Class > ---------- > > The [Solar][] arch-class has fewer static methods in it; collections > of related methods have been grouped into their own classes (e.g., > [Solar_Config][]). > > > Construction > ------------ > > The Solar_Base class, from which all other Solar classes extend, now > has a more pluggable construction and configuration process. Hooks > include: > > - `_preConfig()` to set up the object before configuration > - `_postConfig()` to modify the object after configuration > - `_postConstruct()` to complete object construction > > This means you never need to override a Solar constructor; instead, > place your construction logic in the applicable hook method. > > > Page Controllers > ---------------- > > The [Solar_Controller_Page][] class now comes with a default layout > and views, along with added error handling methods, making it more > useful as a base page controller class in its own right. (Previously, > one had to extend [Solar_App_Base][], or create a base app of one's > own, to get these basic defaults.) > > One thing has been removed: recognition of page-level view helpers. > In theory, these seemed like they might be useful. However, in > practice, they were rarely if ever needed. Vendor-level helpers are > now the first place the views will look. > > > Lazy Sessions > ------------- > > The [Solar_Session][] class now supports "lazy" sessions. Previously, > it would start a sesssion automatically at instantiation time. Now, > it starts a session only when ... > > 1. A PHP session cookie already exists, or > 2. You call one of the `set*()` methods to store a value > > This means that the session object can be available at any time, but > won't invoke any session-based overhead until it is actually needed. > > > Make-Vendor and Model-Based Apps > -------------------------------- > > The [make-vendor][] command now generates a special page controller > called `{Vendor}_Controller_Model`, which houses all the code for a > minimal BREAD-S (browse, read, edit, add, delete, and search) > application based on a model. > > Previously, [make-app][] would generate the BREAD code fresh in each > new class, but when you build mutiple model-based apps, you would end > up with a lot of code duplication. The new approach removes that > duplication entirely. This means that `make-app --model-name` will now > create app classes that extend from `{Vendor}_Controller_Model`. > > > Compound Selects > ---------------- > > [Solar_Sql_Adapter][] and [Solar_Sql_Select][] now support UNION and > UNION ALL query construction, with the related LIMIT and ORDER > components of those kinds of queries. > > > Forms > ----- > > The [Solar_View_Helper_Form][] view helper for forms now supports > different kinds of decoration: as definition list, as a table, or as > "plain" (no surrounding markup). The helper itself has been > significantly refactored so that the internal logic is easier to > follow, and support logic has been extracted into separate classes > when possible. > > > Much More > ========= > > There is a lot more to be had. Take a look at the [Getting Started][] > documentation, then spend some time with these blog entries from Solar > users: > > - <http://elofson.ca/2009/03/getting-started-with-solar> > - <http://elofson.ca/2009/03/the-solar-configuration-file> > - > <http://elofson.ca/2009/03/screen-cast-installing-and-setting-up-the-solar-system > > > - <http://elofson.ca/2009/03/a-simple-solar-application> > - <http://elofson.ca/2009/03/screen-cast-creating-a-simple-solar-application > > > - <http://elofson.ca/2009/04/views-layouts-and-locales> > - <http://elofson.ca/2009/04/a-real-solar-application> > - <http://elofson.ca/2009/06/view-helpers> > - <http://elofson.ca/2009/06/layouts> > - <http://elofson.ca/2009/06/using-solar-access-control> > - > <http://www.phpjack.com/content/quick-taste-solar-framework-model-flexability-and-power > > > - <http://www.phpjack.com/content/solar-articles-around-web> > - <http://www.phpjack.com/content/solar-tips-1> > - > <http://www.phpjack.com/content/solar-framework-adds-firebug-support-thanks-firephp > > > - <http://www.phpjack.com/content/using-jquery-solar> > - > <http://solarphp.com/blog/read/8-using-registry-set-to-auto-register-objects > > > - <http://solarphp.com/blog/read/12-authentication-using-my-sql> > - <http://solarphp.com/blog/read/19-adapter-for-master-slave-my-sql-setups > > > - <http://solarphp.com/blog/read/27-solar-cli-getting-started> > - <http://solarphp.com/blog/read/28-solar-cli-make-vendor> > - <http://solarphp.com/blog/read/29-solar-cli-make-model> > - <http://agentile.com/view/28/solarphp-on-mosso> > > > * * * > > [$_serialize_cols]: > http://solarphp.com/class/Solar_Sql_Model::$_serialize_cols > [ActiveRecord]: > http://martinfowler.com/eaaCatalog/activeRecord.html > [SingleTableInheritance]: > http://martinfowler.com/eaaCatalog/singleTableInheritance.html > [Solar]: http://solarphp.com/class/Solar > [Solar_App_Base]: http://solarphp.com/class/Solar_App_Base > [Solar_Base]: http://solarphp.com/class/Solar_Base > [Solar_Controller_Page]: http://solarphp.com/class/Solar_Controller_Page > [Solar_Session]: http://solarphp.com/class/Solar_Session > [Solar_Sql_Adapter]: http://solarphp.com/class/Solar_Sql_Adapter > [Solar_Sql_Model]: http://solarphp.com/class/Solar_Sql_Model > [Solar_Sql_Model_Record]: http://solarphp.com/class/Solar_Sql_Model_Record > [Solar_Sql_Select]: http://solarphp.com/class/Solar_Sql_Select > [Solar_Struct_Xml]: http://solarphp.com/class/Solar_Xml_Struct > [Solar_View_Helper_Form]: http://solarphp.com/class/Solar_View_Helper_Form > [TableDataGateway]: > http://martinfowler.com/eaaCatalog/tableDataGateway.html > [TableModule]: > http://martinfowler.com/eaaCatalog/tableModule.html > [make-app]: http://solarphp.com/class/Solar_Cli_MakeApp > [make-vendor]: http://solarphp.com/class/Solar_Cli_MakeVendor > [Getting Started]: > http://solarphp.org/manual:getting_started:first_run > [change notes]: > http://svn.solarphp.com/core/info/1.0.0alpha3/notes > [PEAR DB_Table]: http://pear.php.net/DB_Table > > > -- > > Paul M. Jones > http://paul-m-jones.com/ > > > > > _______________________________________________ > Solar-talk mailing list > Solar-talk@... > http://mailman-mail5.webfaction.com/listinfo/solar-talk > Solar-talk mailing list Solar-talk@... http://mailman-mail5.webfaction.com/listinfo/solar-talk |
|
|
Re: Solar 1.0.0alpha3 releasedOn Sep 10, 2009, at 20:43 , Jon Elofson wrote:
> This is so great! I have just grabbed myself a delicious, life-giving > beer and am raising my glass to Paul and all those who support Solar. > Cheers everyone! /me raises martini glass in response Cheers! :-) -- Paul M. Jones http://paul-m-jones.com/ _______________________________________________ Solar-talk mailing list Solar-talk@... http://mailman-mail5.webfaction.com/listinfo/solar-talk |
|
|
Re: Solar 1.0.0alpha3 releasedCheers! A glass of wine, prosciutto, bread and cheese await you in san miguel!
Anthony Gentile On Thu, Sep 10, 2009 at 8:45 PM, Paul M Jones <pmjones@...> wrote:
_______________________________________________ Solar-talk mailing list Solar-talk@... http://mailman-mail5.webfaction.com/listinfo/solar-talk |
|
|
Re: Solar 1.0.0alpha3 releasedHere here! Drinks all around!
Thank you Paul, and all the contributors, for building quite possibly the most elegant and well thought out collections of object oriented PHP available today. It is a masterpiece and a testament to your hard work, diligence and intelligence. On Thursday, September 10, 2009, Anthony Gentile <asgentile@...> wrote: > Cheers! A glass of wine, prosciutto, bread and cheese await you in san miguel! > Anthony Gentile > > > On Thu, Sep 10, 2009 at 8:45 PM, Paul M Jones <pmjones@...> wrote: > > > On Sep 10, 2009, at 20:43 , Jon Elofson wrote: > >> This is so great! I have just grabbed myself a delicious, life-giving >> beer and am raising my glass to Paul and all those who support Solar. >> Cheers everyone! > > /me raises martini glass in response > > Cheers! :-) > > > > -- > > Paul M. Jones > http://paul-m-jones.com/ > > > > > _______________________________________________ > Solar-talk mailing list > Solar-talk@... > http://mailman-mail5.webfaction.com/listinfo/solar-talk > > -- Robert Gonzalez http://www.robert-gonzalez.com _______________________________________________ Solar-talk mailing list Solar-talk@... http://mailman-mail5.webfaction.com/listinfo/solar-talk |
|
|
Re: Solar 1.0.0alpha3 released> Here here! Drinks all around!
khuleka [hu le ga] for the normal people, [salute] from Africa Jeff Surgeson South Africa _______________________________________________ Solar-talk mailing list Solar-talk@... http://mailman-mail5.webfaction.com/listinfo/solar-talk |
|
|
Re: Solar 1.0.0alpha3 releasedSalud!!!
(Cheers) From Colombia!!. Thank you all people. This is just the beggining of Good Things (TM). :-) ____________________________ Edwin F. López A. ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ _______________________________________________ Solar-talk mailing list Solar-talk@... http://mailman-mail5.webfaction.com/listinfo/solar-talk |
|
|
Re: Solar 1.0.0alpha3 releasedCheers for sure! I raise my IPA to you and everyone who has contributed
to the Solar project ;-) Raymond Kolbe Paul M Jones wrote: > Hi all, > > It is with great pleasure that I announce the release of Solar > 1.0.0alpha3. I have not updated the .com website yet (will do that > tomorrow), but you can download the 1.0.0alpha3 release from <http://solarphp.net > > right now. An alpha3 system is also in place at <http://svn.solarphp.com/system/download > >. > > As noted earlier, this will be the last alpha release of Solar; I > expect to have a beta released within the next 8 weeks or so. > > The remainder of this email is planned as a blog post for after I > update the website. > > Thanks, everyone, for your patient assistance over the past year. :-) > > > * * * > > > I can't believe that almost a whole year has passed since alpha2 was > released. In that time we have made some significant changes to how > some major Solar components work. You can read the class-by-class > [change notes][] if you like, but after a year, there's quite a lot to > wade through. To point out the highlights, I'll give a broad overview > in this post. > > Before I do that, though, I would like to thank one person in > particular who made this release what it is: [Jeff Moore](http://www.procata.com/blog/ > ) of [Mashery](http://mashery.com). Jeff has done more on this release > than any other contribitor, making huge strides in the Model and other > packages through his code, reporting, revisions, and (admittedly) > nagging of me to make things better. Thank you, Jeff, for everything > you have done to make this release possible. > > There are lots of others who contributed in important ways, most of > whom are noted in the change log with their specific achievements: > > - Jon Elofson > - Anthony Gentile > - Robert Gonzalez > - Tomasz Holeksa > - Antti Holvikari > - Ray Kolbe > - Kalkin > - Dmytro Konstantinov > - Clay Loveless > - Rodrigo Moraes > - Nicholas Sloan > - Jeff Surgeson > - Richard Thomas > - Matthew Turland > - Robert Treat > - Kevin Wagner > > Thanks, guys, for all your effort and attention. The project is > better for your having been involved. :-) > > > Model Changes > ============= > > Nothing has been lost. Solar models still: > > - recognize has-one, belongs-to, and has-many relationships; > - allow eager- and lazy-fetching of related records; > - support [SingleTableInheritance][]; > - save only the changed data, not the whole record; > - perform data filtering at save() time; and > - generate automatic form hints from the table columns. > > However, much has been added, including performance enhancements > across the board. Below are only a few of the highlights; for a full > rundown, please review the [change notes][]. > > > Less-Active Table, More-Active Record > ------------------------------------- > > Previously, the table-based [Solar_Sql_Model][] class retained a lot > of [TableModule][]-like behavior from its predecessors > (Solar_Sql_Table, Solar_Sql_Entity, [PEAR DB_Table][], etc). When > combined with the [Solar_Sql_Model_Record][] logic for inserts and > updates, it became difficult to track which parts were doing what. > > To remedy this, the Model class has had most of the manipulation logic > stripped out of its insert/update/etc methods, and all of that special > logic has been placed in the Record class. That makes the Model more > like a [TableDataGateway][], in that it will insert and update the > data you give it without attempt to massage it; as a corollary, the > Record becomes more like an [ActiveRecord][] implementation. > > > Many-to-Many > ------------ > > We have added "has-many-through" relationship descriptors. This means > that models now recognize many-to-many relationships through an > explicit association model. > > > Saving Related Records > ---------------------- > > When you save a record, it now wires up all the related record IDs for > you, setting all the necessary primary key information automatically. > In partcular, saving a "has-many-through" will wire up not only the > related records on the foreign side of the association table, but also > the related records on the association table itself. > > For the "has" relationships, it then saves each of the related records > and collections for you: > > - has-one records are saved as they are; > - has-many collections are saved as they are; and > - has-many-through collections are checked for additions and > removals against the association table, and are saved or deleted > as necessary; this includes saving the records on the foreign side > of the association table > > Note that automatic saving of relateds **does not** occur on "belongs- > to" relationships. Those you still have to have on your own, because > they are necessarily precursors to the existence of the current record > or collection. > > > Eager Fetching > -------------- > > Eager fetching performance has been improved in many common cases, > allowing dual strategies for relating back to native record sets and > dual strategies for merging related records back into the native > record set. As before, eager fetching avoids the 1+N pitfall, > generating only one additional query per relationship (*not* one per > record in the native result set). > > Additionally, it is now possible to chain eager fetches. That is, > eager-fetched records can themselves eager-fetch their own related > records, all with a single call to the Model fetch*() method. > > > XML-Struct Columns > ------------------ > > Solar models support automatic application of serialize() and > unserialize() to columns in the [$_serialize_cols][] model property. > We now add to this the ability to serialize and unserialize basic XML- > formatted data as well, through the use of the new [Solar_Struct_Xml] > [] class. (N.b.: XML structs do not support attributes.) > > Among other things, this means you can store simplified XML data in a > column, and database engines capable of searching it, can search it. > You can manipulate that data as XML data in PHP as well via the XML- > struct mechanisms. > > > Non-Model Changes > ================= > > > Arch-Class > ---------- > > The [Solar][] arch-class has fewer static methods in it; collections > of related methods have been grouped into their own classes (e.g., > [Solar_Config][]). > > > Construction > ------------ > > The Solar_Base class, from which all other Solar classes extend, now > has a more pluggable construction and configuration process. Hooks > include: > > - `_preConfig()` to set up the object before configuration > - `_postConfig()` to modify the object after configuration > - `_postConstruct()` to complete object construction > > This means you never need to override a Solar constructor; instead, > place your construction logic in the applicable hook method. > > > Page Controllers > ---------------- > > The [Solar_Controller_Page][] class now comes with a default layout > and views, along with added error handling methods, making it more > useful as a base page controller class in its own right. (Previously, > one had to extend [Solar_App_Base][], or create a base app of one's > own, to get these basic defaults.) > > One thing has been removed: recognition of page-level view helpers. > In theory, these seemed like they might be useful. However, in > practice, they were rarely if ever needed. Vendor-level helpers are > now the first place the views will look. > > > Lazy Sessions > ------------- > > The [Solar_Session][] class now supports "lazy" sessions. Previously, > it would start a sesssion automatically at instantiation time. Now, > it starts a session only when ... > > 1. A PHP session cookie already exists, or > 2. You call one of the `set*()` methods to store a value > > This means that the session object can be available at any time, but > won't invoke any session-based overhead until it is actually needed. > > > Make-Vendor and Model-Based Apps > -------------------------------- > > The [make-vendor][] command now generates a special page controller > called `{Vendor}_Controller_Model`, which houses all the code for a > minimal BREAD-S (browse, read, edit, add, delete, and search) > application based on a model. > > Previously, [make-app][] would generate the BREAD code fresh in each > new class, but when you build mutiple model-based apps, you would end > up with a lot of code duplication. The new approach removes that > duplication entirely. This means that `make-app --model-name` will now > create app classes that extend from `{Vendor}_Controller_Model`. > > > Compound Selects > ---------------- > > [Solar_Sql_Adapter][] and [Solar_Sql_Select][] now support UNION and > UNION ALL query construction, with the related LIMIT and ORDER > components of those kinds of queries. > > > Forms > ----- > > The [Solar_View_Helper_Form][] view helper for forms now supports > different kinds of decoration: as definition list, as a table, or as > "plain" (no surrounding markup). The helper itself has been > significantly refactored so that the internal logic is easier to > follow, and support logic has been extracted into separate classes > when possible. > > > Much More > ========= > > There is a lot more to be had. Take a look at the [Getting Started][] > documentation, then spend some time with these blog entries from Solar > users: > > - <http://elofson.ca/2009/03/getting-started-with-solar> > - <http://elofson.ca/2009/03/the-solar-configuration-file> > - <http://elofson.ca/2009/03/screen-cast-installing-and-setting-up-the-solar-system > > > - <http://elofson.ca/2009/03/a-simple-solar-application> > - <http://elofson.ca/2009/03/screen-cast-creating-a-simple-solar-application > > > - <http://elofson.ca/2009/04/views-layouts-and-locales> > - <http://elofson.ca/2009/04/a-real-solar-application> > - <http://elofson.ca/2009/06/view-helpers> > - <http://elofson.ca/2009/06/layouts> > - <http://elofson.ca/2009/06/using-solar-access-control> > - <http://www.phpjack.com/content/quick-taste-solar-framework-model-flexability-and-power > > > - <http://www.phpjack.com/content/solar-articles-around-web> > - <http://www.phpjack.com/content/solar-tips-1> > - <http://www.phpjack.com/content/solar-framework-adds-firebug-support-thanks-firephp > > > - <http://www.phpjack.com/content/using-jquery-solar> > - <http://solarphp.com/blog/read/8-using-registry-set-to-auto-register-objects > > > - <http://solarphp.com/blog/read/12-authentication-using-my-sql> > - <http://solarphp.com/blog/read/19-adapter-for-master-slave-my-sql-setups > > > - <http://solarphp.com/blog/read/27-solar-cli-getting-started> > - <http://solarphp.com/blog/read/28-solar-cli-make-vendor> > - <http://solarphp.com/blog/read/29-solar-cli-make-model> > - <http://agentile.com/view/28/solarphp-on-mosso> > > > * * * > > [$_serialize_cols]: http://solarphp.com/class/Solar_Sql_Model::$_serialize_cols > [ActiveRecord]: http://martinfowler.com/eaaCatalog/activeRecord.html > [SingleTableInheritance]: http://martinfowler.com/eaaCatalog/singleTableInheritance.html > [Solar]: http://solarphp.com/class/Solar > [Solar_App_Base]: http://solarphp.com/class/Solar_App_Base > [Solar_Base]: http://solarphp.com/class/Solar_Base > [Solar_Controller_Page]: http://solarphp.com/class/Solar_Controller_Page > [Solar_Session]: http://solarphp.com/class/Solar_Session > [Solar_Sql_Adapter]: http://solarphp.com/class/Solar_Sql_Adapter > [Solar_Sql_Model]: http://solarphp.com/class/Solar_Sql_Model > [Solar_Sql_Model_Record]: http://solarphp.com/class/Solar_Sql_Model_Record > [Solar_Sql_Select]: http://solarphp.com/class/Solar_Sql_Select > [Solar_Struct_Xml]: http://solarphp.com/class/Solar_Xml_Struct > [Solar_View_Helper_Form]: http://solarphp.com/class/Solar_View_Helper_Form > [TableDataGateway]: http://martinfowler.com/eaaCatalog/tableDataGateway.html > [TableModule]: http://martinfowler.com/eaaCatalog/tableModule.html > [make-app]: http://solarphp.com/class/Solar_Cli_MakeApp > [make-vendor]: http://solarphp.com/class/Solar_Cli_MakeVendor > [Getting Started]: http://solarphp.org/manual:getting_started:first_run > [change notes]: http://svn.solarphp.com/core/info/1.0.0alpha3/notes > [PEAR DB_Table]: http://pear.php.net/DB_Table > > > _______________________________________________ Solar-talk mailing list Solar-talk@... http://mailman-mail5.webfaction.com/listinfo/solar-talk |
|
|
Re: Solar 1.0.0alpha3 releasedOn Sep 11, 2009, at 21:07 , Raymond Kolbe wrote: > Cheers for sure! I raise my IPA to you and everyone who has > contributed > to the Solar project ;-) /me raises gin and tonic in response And to you, sir! :-) -- Paul M. Jones http://paul-m-jones.com/ _______________________________________________ Solar-talk mailing list Solar-talk@... http://mailman-mail5.webfaction.com/listinfo/solar-talk |
| Free embeddable forum powered by Nabble | Forum Help |