Je n'arrive pas à faire fonctionner la validation pour un formulaire créé à l'aide de Zend_Form.Problème de validation Zend_Form
L'idée est la suivante: j'ai deux menu déroulant. L'un est une liste de joueurs. L'autre est une liste d'agents libres qui jouent la même position que le joueur. J'utilise un rappel javascript onChange pour exécuter du code Ajax qui remplace la liste déroulante de la liste des agents libres par une nouvelle à la position du joueur qu'ils ont sélectionné dans la liste déroulante du joueur.
Maintenant, peut-être cela est dans le mauvais sens, mais je construit la forme en créant une instance de Zend_Form et de créer ensuite toutes ces méthodes de setX qui ajoutent des éléments à la forme. Mon raisonnement était que je voulais afficher certains éléments dans des endroits spécifiques sur la page, et pas simplement afficher $ this-> form sur mon template.
Le problème semble être quand je rentrerai la forme post, le validateur semble pas connaître la règle de validation I mis en place pour l'agent libre déroulant. Voici un code pertinent à regarder. Je suis un parent ZF n00b alors n'hésitez pas à me dire que je ne fais pas les choses de la façon ZF si ça vous saute aux yeux.
L'action dans le contrôleur:
public function indexAction()
{
if ($this->getRequest()->isPost()) {
$form = new Baseball_Form_Transactions();
if ($form->isValid($this->_request->getPost())) {
$data = $this->_request->getPost();
$leagueInfo = Doctrine::getTable('League')->findOneByShortName($data['shortLeagueName'])->toArray();
// Create the request top drop an existing player
$transactionInfo = array(
'league_id' => $leagueInfo['id'],
'team_id' => $data['teamId'],
'player_id' => $data['players'],
'type' => 'drop',
'target_team_id' => 0,
'transaction_date' => date('Y-m-d H:m:s')
);
$transaction = new Transaction();
$transaction->fromArray($transactionInfo);
$transaction->save();
// Now we do the request to add a player
$transactionInfo['team_id'] = 0;
$transactionInfo['player_id'] = $data['freeAgents'];
$transactionInfo['target_team_id'] = $data['teamId'];
$transactionInfo['type'] = 'add';
$transaction = new Transaction();
$transaction->fromArray($transactionInfo);
$transaction->save();
$this->_flashMessenger->addMessage('Added transaction');
}
}
$options = array(
'teamId' => $this->teamId,
'position' => 'C',
'leagueShortName' => $this->league
);
$this->transactionForm->setMyPlayers($options);
$this->transactionForm->setFreeAgents($options);
$this->transactionForm->setTeamId($options);
$this->transactionForm->setShortLeagueName($options);
$this->view->transactionForm = $this->transactionForm;
$this->view->messages = $this->_flashMessenger->getMessages();
$transaction = new Transaction();
$this->view->transactions = $transaction->byTeam($options);
}
Ensuite, nous avons la forme elle-même
public function setMyPlayers($options)
{
$data = Doctrine::getTable('Team')->find($options['teamId']);
$players = array();
foreach ($data->Players->toArray() as $player) {
$players[$player['id']] = "{$player['position']} - {$player['first_name']} {$player['last_name']}";
}
$playersSelect = new Zend_Form_Element_Select(
'players',
array(
'required' => true,
'label' => 'Players',
'multiOptions' => $players,
)
);
$this->addElement($playersSelect);
}
public function setFreeAgents($options)
{
$q = Doctrine_Query::create()
->select('CONCAT(p.first_name, " ", p.last_name) as full_name, p.id, p.position')
->from('Player p')
->leftJoin('p.Teams t')
->leftJoin('t.League l ON l.short_name = ?', $options['leagueShortName'])
->where('t.id IS NULL')
->andWhere('p.position = ?', $options['position'])
->orderBy('p.last_name');
$q->setHydrationMode(Doctrine_Core::HYDRATE_ARRAY);
$data = $q->execute();
$freeAgents = array();
foreach ($data as $player) {
$freeAgents[$player['id']] = $player['full_name'];
}
$freeAgentsSelect = new Zend_Form_Element_Select(
'freeAgents',
array(
'label' => 'Free Agents',
'multiOptions' => $freeAgents,
'size' => 15
)
);
$freeAgentsSelect->setRequired(true);
$this->addElement($freeAgentsSelect);
}
public function setShortLeagueName($options)
{
$shortLeagueNameHidden = new Zend_Form_Element_Hidden(
'shortLeagueName',
array('value' => $options['leagueShortName'])
);
$this->addElement($shortLeagueNameHidden);
}
public function setTeamId($options)
{
$teamIdHidden = new Zend_Form_Element_Hidden(
'teamId',
array('value' => $options['teamId'])
);
$this->addElement($teamIdHidden);
}
Il n'y a pas d'initialisation ou méthode __construct() sous forme.
Mon problème semble assez simple: rejeter le contenu du formulaire comme non valide si elle n'a pas choisi une personne de la liste des agents libres. En ce moment, il navigue comme valide. J'ai passé beaucoup de temps à chercher en ligne une réponse, et je n'ai pas réussi à la trouver.
Merci d'avance pour toute aide.
Merci Rob ... Je savais * * je faisais quelque chose Ouais – GrumpyCanuck