Ben sorunları Zend_Form kullanılarak inşa edilmiş bir formu için çalışmak doğrulama alıyorum yaşıyorum.
Fikir şudur: İki açılan var. Bir oyuncu bir listesidir. Diğer oyuncu olarak aynı pozisyonda oynamak ücretsiz ajanların listesi. Ben oyuncu açılır menüden seçtiğiniz oyuncu konumunda bir yenisi ile free agent liste açılan yerini bazı Ajax kodu çalıştırmak için bir onChange javascript geri arama kullanıyorum.
Şimdi, belki de bu yanlış bir yoldur, ama ben Zend_Form bir örneğini oluşturma ve daha sonra forma öğeler eklemek için tüm bu setx yöntemleri oluşturarak formu inşa. Benim akıl benim şablona bu-> formu sayfasında belirli yerlerde belirli unsurları, sadece çıkış $ göstermek istedim oldu.
Sorun geri formu mesajı almak zaman gibi görünüyor, validator ben açılan ücretsiz ajan için kurmak geçerlilik kuralı bilmiyor gibi görünüyor. İşte bakmak için bazı ilgili kod. Ben bu yüzden sizin dışarı sıçramaları eğer ben şeyleri ZF yol yapmıyorum bana çekinmeyin nispi ZF n00b değilim.
Kontrol olarak hareket:
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);
}
Sonra formu kendisi var
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);
}
Şeklinde veya herhangi bir init __ construct () bir yöntem yoktur.
Benim sorun yeteri kadar basit görünüyor: onlar free agent listeden birini seçmediniz eğer geçersiz gibi form içeriğini reddetmek. Şu anda, o kadar geçerli yoluyla yelkenleri. Ben bir cevap için çevrimiçi bazı önemli zaman arıyor geçirdim ve onu bulmak mümkün olmamıştır.
Herhangi bir yardım için şimdiden teşekkür ederiz.