I'm trying with my company to use the command pattern with symfony.
The main first feature is when you submit a form with embed forms, even if one of those is invalid (a field too long for example), the other forms will be saved in database.
So a user with a lot of informations, with several telephones or anyelse, we'll be able to save all the valid phones, that'll help especially with the data concurrency when w'll add the last_modified concept..
In first, the command pattern is pretty simple to understand, we have got an Invoker Class which will execute unit command on every relation (phones for example).
I created a doctrine Behaviour in order to make it really simple to use.
Only 2 actions could be done :
- Add actAs : Transactional
- Rename the form extend class in BaseDoctrineForm.class.php
Here is the process used in the new TransactionalForm class :
override the form save method :
in the save method : check if the object has the doctrine template we talked about (Transactional)
in case, recreate as many forms as there are relations and execute the associated commands.
I'm blocked here :
The embed forms doesn't have their own csrf token, so I cannot check they're are valid before save them.
I tried a lot of things to patch this :
* add the main csrf_token in each relation's taintedValues but no way... I still have the csrf_token required of csrf_token attack
The second thing is about the doctrine record save method, even if there is a primary key in the form, the save method execute an insert into, it seems to be linked with the isNew method but i'm not able to change this attribute... I tried to override the method in the behavior template but it doesn't works.
Project files : http://www.megaupload.com/?d=05VUDR8Q
So if you can help me on anything,I'd appreciate it