3Aug/081
et lille symfony hint
jeg har lige et lille hint jeg vil dele med andre der bruger symfony.
når man skal oprette eller rette "emner" så har man et par muligheder for flow.
- 2 actions executeAdd() executeEdit() - hver action laver validering (add.yml, edit.yml) og gemmer objektet
- 1 action executeAddEdit() - her skal man så selv lave validdringen, da man ikke i yml filen kan skeln mellem add og edit, hvilket ikke altid er lige heldigt.
- 2 actions executeAdd() executeEdit() til at håndtere visning og fejlhåndtering, men én executeSave() metode til at håndtere selve oprettelsen/opdateringen af objektet
her er et lille eksempel:
<?php class articleActions extends sfActions { public function executeAdd() { if ($this->getRequest()->getMethod() == sfRequest::POST) { $this->forward('article', 'save'); } // setup the form and show it. } public function executeEdit() { $article = ArticlePeer::retrieveByPk($this->getRequestParameter('id')); if (!$article instanceof Article) { // show error $this->getUser()->setFlash('message', 'No article found'); $this->redirect('@homepage'); } if ($this->getRequest()->getMethod() == sfRequest::POST) { $this->forward('article', 'save'); } // setup the form and show it. $this->article = $article; } public function executeSave() { if ($this->getRequest()->getMethod() != sfRequest::POST) { // send user some place else... $this->redirect('@homepage'); } $article = ArticlePeer::retrieveByPk($this->getRequestParameter('id')); if (!$article instanceof Article) { $article = new Article(); } $article->setTitle($this->getRequestParameter('title')); $article->setContent($this->getRequestParameter('content')); $article->setIsPublished($this->getRequestParameter('is_published')); $article->save(); $this->getUser()->setFlash('message', 'Article saved'); $this->redirect('@homepage'); } }
jeg syntes metoden her holder da den gør at man kan håndtere validering udfra om det er en add eller en edit man har gang i - og det gør metoderne mere rene
4. August, 2008 - 17:16
øhh tusinde tak for det lille hint….. jeg kan simpelthen ikke leve uden