Hi all,

As I currently do some major changes, I want to give you some more 
information on what's going on in the trunk.

One of main "problem" with the current symfony 1.0 design is the use of 
a lot of singleton objects and static classes/methods. It limits the 
ability to override those classes or to change the behavior of certain 
parts of the framework (sfRouting, sfI18N, sfContext for example).

I started some refactoring to remove some singletons and to try to ease 
extending the base framework classes. The ultimate goal is to be able to 
deal with several symfony applications in the same PHP script. It will 
allow great things like the ability to create a link between symfony 
applications (I think this is the most FAQ on symfony). So, I want to be 
able to write something like this in the future in a backend application:

$frontend = sfContext::getInstance('frontend');
$url = $frontend->getRouting()->generate(...);

Or if you have to switch to another application temporarily:

sfContext::switch('frontend');

// Now sfContext::getInstance() returns the frontend sfContext object

sfContext::switchTo('backend');

So, here is a summary of the things I changed in the trunk:

- sfI18N is not a singleton anymore. This one is was really simple. The 
sfI18N wasn't really used as a singleton! The i18n object is now 
configurable in your factories.yml. No change is needed to your code.

- sfRouting is not a singleton anymore. This is one was a bit more 
challenging but most of the time, you don't have to change your code. 
The only thing to check is if you use sfRouting::getInstance() in your 
code, you will have to change it to 
sfContext::getIntance()->getRouting(). The routing class is also 
configurable in the factories.yml and I implemented a simple sfNoRouting 
class as an example of a very simple routing class.

- sfContext is now a multi-singleton. The getInstance() takes a name 
parameter and I implemented the switchTo() method. To be really useful, 
more work is needed (I need to de-singleton-ize sfConfig for example).

- You can now store your own object in the context instance:

   $context = sfContext::getInstance();
   $context->setObject('name', $myObject);
   $object = $context->getObject('name');

Fabien

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"symfony developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/symfony-devs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to