Bonjour,
j'ai créé un module dans l'administration de mon site qui doit me
permettre de mettre à jour une relation plusieurs-plusieurs.
Le problème c'est que lorsque je veux bind mon formulaire celui-ci
semble troujours vide.
Je suppose que c'est parce que mes valeurs envoyé ne sont pas bonnes
mais pourtant renderGlobalErrors est toujours vide.

Voici le schema de mes tables.

----------
# config/schema.yml
propel:
  bordoz_article:
    id:           ~
    titre:        { type: longvarchar, required: true }
    sous_titre:   { type: longvarchar, required: true }
    texte:        { type: longvarchar, required: true }
    url:          { type: varchar(255), required: true, index:unique }
    post_date:    { type: timestamp, required: true}
    publication_date: {type: timestamp, required: true}
    etat:         { type: integer, required: true}
    auteur:       { type: integer, foreignTable: bordoz_auteurs,
foreignReference: id, required: true }
    user:         { type: integer, foreignTable: sf_guard_user,
foreignReference: id, required: true }
    meta_kw:      { type: varchar(255)}
    meta_desc:    { type: varchar(255)}

  bordoz_categorie:
    id:          ~
    nom:          { type: varchar(255), required: true }
    url:          { type: varchar(255), required: true, index:unique}
    meta_kw:      { type: varchar(255)}
    meta_desc:    { type: varchar(255)}

  bordoz_auteurs:
    id:          ~
    nom:        { type: varchar(255), required: true, index: unique }

  bordoz_article_categorie:
    id:         ~
    id_categorie: { type: integer, foreignTable: bordoz_categorie,
foreignReference: id, primaryKey: true, required: true, onDelete:
cascade }
    id_article:  { type: integer, foreignTable: bordoz_article,
foreignReference: id, primaryKey: true, required: true, onDelete:
cascade }
    position: { type: integer }
--------------

Voici mon formulaire:

-------------
class PositionsForm extends BaseFormPropel
{
        private $categorie;

        public function __construct($categorie) {
                $this->categorie = $categorie;
                parent::__construct();
        }
        public function getModelName()  {
                return 'BordozArticleCategorie';
        }
        public function configure() {
                $this->setWidgets(array(
                        'position_1' => new sfWidgetFormSelect(array('choices' 
=> $this-
>getArticles())),
                        'position_2' => new sfWidgetFormSelect(array('choices' 
=> $this-
>getArticles())),
                        'position_3' => new sfWidgetFormSelect(array('choices' 
=> $this-
>getArticles())),
                        'selected_categorie' => new 
sfWidgetFormInputHidden(array())
                ));

                $this->widgetSchema->setLabels(array(
                        'position_1'    => 'Position 1',
                        'position_2'   => 'Position 2',
                        'position_3' => 'Position 3',
                        'selected_categorie' => 'categorie'
                ));

                $this->setValidators(array(
                        'position_1' => new sfValidatorChoice(array('choices' =>
array_keys(array(1,2,3)))),
                        'position_2' => new sfValidatorChoice(array('choices' =>
array_keys(array(1,2,3)))),
                        'position_3' => new sfValidatorChoice(array('choices' =>
array_keys(array(1,2,3)))),
                        'selected_categorie' => new sfValidatorInteger()
                ));

        $this->setDefault('selected_categorie',$this->categorie);

        $this->widgetSchema->setNameFormat('position[%s]');

        $this->errorSchema = new sfValidatorErrorSchema($this-
>validatorSchema);
  }

  public function getArticles() {
 
$criteria=BordozArticleCategoriePeer::getByIdCategorieCriteria($this-
>categorie);
        $criteria=BordozArticlePeer::getActiveCriteria($criteria);
        $articles=BordozArticlePeer::doSelect($criteria);
        $array=array(0=>'');
        foreach ($articles as $article) {
                $array[$article->getId()]=$article->getTitre();
        }
        return $array;
  }
}

-----------------
et enfin voici mon action
-----------------
class positionsActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
        public function executeIndex(sfWebRequest $request)  {
                $this->categories=BordozCategoriePeer::getCategories();

            $criteria=BordozArticleCategoriePeer::getWithPosition();

            foreach(BordozArticleCategoriePeer::doSelect($criteria) AS
$position) {
                        
$positions[$position->getIdCategorie()][$position->getPosition()]=
$position->getIdArticle();
                }

                foreach($this->categories as $categorie) {
                $forms[$categorie->getId()]=new positionsForm($categorie-
>getId());
                        $i=1;
                        while ($i<=3) {
                                if (isset($positions[$categorie->getId()][$i]))
                                
$forms[$categorie->getId()]->setDefault('position_'.$i,
$positions[$categorie->getId()][$i]);
                                $i++;
                        }
                }
                $this->forms=$forms;
        }

        public function executeSubmit(sfWebRequest $request) {
                $categorie=BordozCategoriePeer::getById($request-
>getParameter('position[categorie]'));
                $this->getUser()->setFlash('notice', 'Les positions de la 
catégorie
<strong>'.$categorie.'</strong> ont été mises à jour');

                echo "la 
categorie".$request->getParameter('selected_categorie');
                $this->form = new positionsForm(1);
                
$this->form->bind($request->getParameter($this->form->getName()));

                var_dump($request->getParameter($this->form->getName()));
                print_r($this->form->getValues());
                echo $this->form->renderGlobalErrors();
                if($this->form->isValid())
            {
                die('form is Valid!');
            }
            die('after isValid...');

                $this->redirect('bordoz_positions');
        }
}

-- 
Vous recevez ce message, car vous êtes abonné au groupe Google 
Groupes Symfony-fr.
Pour envoyer un message à ce groupe, adressez un e-mail 
à [email protected].
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse 
[email protected].
Pour plus d'options, consultez la page de ce groupe : 
http://groups.google.com/group/symfony-fr?hl=fr

Répondre à