Hello!

Actually, executeSave() does nothing except forwarding to executeEdit().
Thus you could (and should IMO) write that code to executeEdit(). But
still this will not eliminate your problem, since you call ->save() and
parent::executeEdit() does so again.

You should rather move your code either to saveStoreCatalog() or
updateStoreCatalogFromRequest(). The first is only called when the
catalog is saved, the second is always called after a POST request (even
if your form contains errors). Don't save your record, just modify it.
Saving is done in saveStoreCatalog() by your base class.

Don't refrain from exploring the generated code in the cache! It can
help a lot when modifying admin generated classes.

Regards


Am Dienstag, den 18.09.2007, 02:33 +0900 schrieb Kiril Angov:
> Hello guys,
> 
> I have been using the admin generator for quite some time and I just 
> stumbled upon a limitation. Sometimes when using the admin generator you 
> have your nice autogenerated Create/Edit form and everything looks fine 
> unless you want to overwrite the executeEdit() method. Let me give an 
> example.
> 
> I am using the sfPropelActAsNestedSetBehaviour and I have to make the 
> new element either the root or the child of another node. So I did this 
> in my executeEdit() method:
> 
> [php]
> public function executeSave()
>   {
>     $this->store_catalog = $this->getStoreCatalogOrCreate();
> 
>     if ($this->getRequest()->getMethod() == sfRequest::POST)
>     {
>       try
>       {
>         $this->store_catalog->makeRoot();
>         $this->store_catalog->save();
>       }
>       catch (Exception $e)
>       {
>         ;
>       }
>     }
> 
>     return parent::executeSave();
>   }
> [/php]
> 
> 
> But this caused my form to created two new records in the database: one 
> was the call of $this->store_catalog->save(); in my executeSave() and 
> the other record was created by the call to parent::executeSave(); The 
> long story short, the class method getStoreCatalogOrCreate() which is 
> auto generated does not account for cases where $this->store_catalog 
> already exists and always overwrites it thus creating a new record when 
> $this->store_catalog is already a valid StoreCatalog object. I do not 
> think I explained very well but this is as good as I can do it :)
> 
> This is that needs to be added to $this->getStoreCatalogOrCreate()
> 
> [php]
> protected function getStoreCatalogOrCreate($id = 'id')
>   {
>     if ($this->store_catalog instanceof StoreCatalog) {
>       return $this->store_catalog;
>     }
>     // then the rest of the code it is currently generated
>   }
> [/php]
> 
> I found a workaround to this problem by adding $_POST['id'] = 
> $this->store_catalog->getId(); right after my call to 
> $this->store_catalog->save() thus tricking the getStoreCatalogOrCreate() 
> method to think that the form is submitted in order to edit the record 
> and not to create it but I do not want to use such a workaround when I 
> think a permanent solution can be implemented.
> 
> Do I need to explain some more?
> 
> Regards,
> Kiril
> 
> > 


--~--~---------~--~----~------------~-------~--~----~
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