Le remplissage des Données de Formulaire dans ZF2 lors de l'utilisation de balises html fieldsets
Je suis en train de jouer autour avec zend framework 2 beta 4 et j'ai l'impression d'être coincé lorsque j'essaie d'utiliser des balises html fieldsets dans un formulaire et les données dans le formulaire lorsque le formulaire est soumis. Je ne suis pas sûr si je ne suis pas le réglage de l'entrée des filtres de droit pour les balises html fieldsets ou il me manque quelque chose. Par exemple, j'ai le texte suivant (simplifié pour le rendre clair):
Contrôleur
public function indexAction(){
$form = new MyForm();
$request = $this->getRequest();
if ($request->isPost()) {
$form->setData($request->post());
if ($form->isValid()) {
//Do something
print_r($form->getData()); //for debug
}
}
return array('form' => $form);
}
MyForm.php
class MyForm extends Form
{
public function __construct()
{
parent::__construct();
$this->setName('myForm');
$this->setAttribute('method', 'post');
$this->add(array(
'name' => 'title',
'attributes' => array(
'type' => 'text',
'label' => 'Title',
),
));
$this->add(new MyFieldset('myfieldset'));
//setting InputFilters here
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'title',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
)));
//Now add fieldset Input filter
foreach($this->getFieldsets() as $fieldset){
$fieldsetInputFilter = $factory->createInputFilter($fieldset->getInputFilterSpecification());
$inputFilter->add($fieldsetInputFilter,$fieldset->getName());
}
//Set InputFilter
$this->setInputFilter($inputFilter);
}
}
MyFieldset.php
class MyFieldset extends Fieldset implements InputFilterProviderInterface{
public function __construct($name)
{
parent::__construct($name);
$factory = new Factory();
$this->add($factory->createElement(array(
'name' => $name . 'foo',
'attributes' => array(
'type' => 'text',
'label' => 'Foo',
),
)));
}
public function getInputFilterSpecification(){
return array(
'foo' => array(
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
),
);
}
}
Je suis capable de sortir le formulaire comme prévu et je me retrouve avec deux éléments d'entrée nommée "titre" et "myfieldsetfoo" (le nom donné lors de la outputing avec ViewHelper). Alors bien sûr, quand je soumettre le raw post va afficher les valeurs de "titre" et "myfieldsetfoo'. Cependant, lorsque j'utilise SetData() les valeurs pour l'ensemble de champs ne sont pas remplis (bien que je ne peux voir les valeurs dans le raw post de l'objet). Au lieu de cela, l'examen de la sortie de '$form->getData () " je reçois des:
Array(
[title] => Test,
[myfieldset] => Array(
[foo] =>
)
)
Ce qui me manque? Que dois-je faire pour que ZF2 comprend la façon de remplir le fieldset?
Merci pour toute aide, cela me rend fou.
OriginalL'auteur Jaime R. | 2012-06-08
Vous devez vous connecter pour publier un commentaire.
Pourquoi je fais est de concaténer InputFilter afin que je puisse gérer l'ensemble du formulaire HTML tableau affiché.
Cela va créer un tableau affiché comme
Filtrée et validé avec:
http://www.unexpectedit.com/zf2/inputfilter-validate-and-filter-a-form-data-with-fieldsets
$contactFilter->add($mainFilter, "contact");
. Maintenant, je sais comment appliquer le filtre pour les balises html fieldsets. Merci!OriginalL'auteur Ignacio Pascual
Je pense que vous avez oublié de préparer votre forme dans le contrôleur:
Cela permettra de renommer le champ "nom" de votre fieldset "myfieldset[foo]", de sorte que vous n'avez pas à ajouter le nom des balises html fieldsets sur votre propre.
Suffit d'utiliser
au lieu de
dans votre fieldset class.
OriginalL'auteur MaGna
Je pense que le problème, c'est que vous déclarez un nouveau formulaire dans votre contrôleur. Et que la forme précédente.
- Je utiliser le Gestionnaire de Service de déclarer la forme et les filtres.
Et puis, dans le contrôleur, je n':
De cette façon, j'ai toujours l'objet que je veux
Mise à jour
Je n'ai plus utiliser le gestionnaire de service pour appeler les formes. Je viens de l'appeler une nouvelle forme et émettre $form->setData($data);
La source pour les données peuvent également être une entité bien, alors je voudrais problème: $form->bind($entity)
La méthode de l'instanciation de la forme a absolument rien à voir avec ce problème.
OriginalL'auteur michaelbn