Modifier un widget dans l'action
Bonjour,
Dans mon form qui représente un ticket, j'ai un widget sfFormPropelChoice basé sur un statut (validé, en cours de traitement, résolu...). A côté, j'ai un widget sfWidgetFormDateTime qui correspond à la date de prise en charge de mon ticket.
Et je voudrais que lorsque l'utilisateur choisi le statut "en cours de traitement", le champ "date de prise en charge" se positionne automatiquement à la date courante.
Du coup dans mon action, je teste la valeur du champ statut et si il est à "en cours de traitement", je voudrais mettre à jour mon champ "date de prise en charge".
Mais comment faire ? je suis pas sur de mon setValue...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public function executeTicket(sfWebRequest $request)
{
$this->forward404Unless($LogistiqueTicket = LogistiqueTicketPeer::retrieveByPk($request->getParameter('id')), sprintf('Object LogistiqueTicket does not exist (%s).', $request->getParameter('id')));
$this->form = new LogistiqueTicketInfoForm($LogistiqueTicket);
if($request->isMethod('post'))
{
// PAR DEFAUT quand on met l'etat : en cours de traitement, on met la date de pris en charge a maintenant
if($this->form['status_id']->getValue() == 3)
{
$this->form['assigned_at']->setValue() = date();
}
// on serialize le form dans la BD
if($this->processForm($request, $this->form))
{
$this->redirect('manage_logistique/ticket?id='.$LogistiqueTicket->getId());
}
}
} |
Sinon j'ai bien une autre méthode, mais ca fait une requête de plus à la base :
- je processform
- je récupere mon objet
- je modifie sa date
- je save
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public function executeTicket(sfWebRequest $request)
{
$this->forward404Unless($LogistiqueTicket = LogistiqueTicketPeer::retrieveByPk($request->getParameter('id')), sprintf('Object LogistiqueTicket does not exist (%s).', $request->getParameter('id')));
$this->form = new LogistiqueTicketInfoForm($LogistiqueTicket);
if($request->isMethod('post'))
{
// on serialize le form dans la BD
if($this->processForm($request, $this->form))
{
// PAR DEFAUT quand on met l'etat : en cours de traitement, on met la date de pris en charge a maintenant
if($this->form['status_id']->getValue() == 3)
{
$LogistiqueTicket->setAssignedAt(date());
$LogistiqueTicket->save();
}
$this->redirect('manage_logistique/ticket?id='.$LogistiqueTicket->getId());
}
} |
Merci de votre aide.