stik mig så den staveplade mit private blabber, det skal sku ud – også selvom jeg ikke er den fødte ordbog

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.

  1. 2 actions executeAdd() executeEdit() - hver action laver validering (add.yml, edit.yml) og gemmer objektet
  2. 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.
  3. 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

Kommentarer (1) Trackbacks (0)
  1. øhh tusinde tak for det lille hint….. jeg kan simpelthen ikke leve uden ;)


Leave a comment

(required)

Ingen trackbacks endnu.

site tracking with Asynchronous Google Analytics plugin for Multisite by WordPress Expert at Web Design Jakarta.