Zf2 - Wert in element innerhalb der Sammlung
Habe ich eine Sammlung in form, ich weiß, dass wenn ich einen Wert in einem normalen element, die ich benutze:
$form->get('submit')->setValue('Update');
Wie kann ich einen Wert in das Feld " Adresse "Zum Beispiel" "in einer Sammlung" "ich benutze zend Framework 2".
$companies = $this->getCompaniesTable()->getCompanies($id);
$form = new CompaniesForm();
$form->bind($companies);
$form->get('submit')->setValue('Update');
$form->get('submit')->setValue('Update');
$form->get('address')->setValue('test address');
Letzten Zeile des prev. code funktioniert nicht, was ist falsch ?!
Form-code:
<?php
namespace Companies\Form;
//use Zend\Form\Element;
use Zend\Form\Form;
class CompaniesForm extends Form {
public function __construct($name = null) {
parent::__construct('companies');
$this->setAttribute('method', 'post');
$this->setAttribute('enctype', 'multipart/form-data');
$this->add(array(
'name' => 'id',
'type' => 'Hidden'
));
$this->add(array(
'name' => 'name',
'type' => 'Text'
));
//address field
$this->add(array(
'type' => 'Zend\Form\Element\Collection',
'name' => 'address',
'options' => array(
'count' => 1,
'should_create_template' => false,
'allow_add' => true,
'template_placeholder' => '__placeholder__',
'target_element' => array(
'type' => 'Companies\Form\AddressFieldset'
)
),
));
//address field
//email field
$this->add(array(
'name' => 'email',
'type' => 'text',
'options' => array('label' => 'Email:'),
));
$this->add(array(
'name' => 'submit',
'type' => 'Submit',
'attributes' => array(
'value' => 'Go',
'id' => 'submitbutton'
)
));
}
}
Den addressFieldset Datei:
<?php
namespace Companies\Form;
use Companies\Entity\Address;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
use Zend\Stdlib\Hydrator\ClassMethods as ClassMethodsHydrator;
class AddressField {
/**
* @var string
\ */
protected $name;
/**
* @param string $name
* @return Address
\ */
public function setName($name) {
$this->name = $name;
return $this;
}
/**
* @return string
\ */
public function getName() {
return $this->name;
}
}
class AddressFieldset extends Fieldset implements InputFilterProviderInterface {
public function __construct() {
parent::__construct('Address');
$this->setHydrator(new ClassMethodsHydrator(false))->setObject(new AddressField());
$this->add(array(
'name' => 'name',
'options' => array(
'label' => 'Address: '
)
));
}
/**
* @return array
\ */
public function getInputFilterSpecification() {
return array(
'name' => array(
//'required' => true,
)
);
}
}
Nicht zu beantworten, ohne Sie beweisen Ihr Formular-code.
Ich habe ein Formular-code in den post oben.
Und was GENAU wollen Sie ändern? 😉 Ein bestimmter Wert auf einer der Telefon-Fieldsets? thi ist ein bisschen wichtiger ^^
Es ist AddressFieldset nicht TelephoneFieldset "meine hier falsch", Also will ich das ändern der Adressen-Felder.
Die Frage ist, welchen Zweck genau? Eine Sammlung ist eine Reihe von Fieldsets in diesem Fall. Also, wenn Sie wollen, um den Wert zu ändern müssen Sie ändern fieldset. Das ändern einer einzelnen Wert von EINEM der MEHRFACH gerenderten fieldsets ist ein bisschen schlecht (große design-Fehler).
Ich habe ein Formular-code in den post oben.
Und was GENAU wollen Sie ändern? 😉 Ein bestimmter Wert auf einer der Telefon-Fieldsets? thi ist ein bisschen wichtiger ^^
Es ist AddressFieldset nicht TelephoneFieldset "meine hier falsch", Also will ich das ändern der Adressen-Felder.
Die Frage ist, welchen Zweck genau? Eine Sammlung ist eine Reihe von Fieldsets in diesem Fall. Also, wenn Sie wollen, um den Wert zu ändern müssen Sie ändern fieldset. Das ändern einer einzelnen Wert von EINEM der MEHRFACH gerenderten fieldsets ist ein bisschen schlecht (große design-Fehler).
InformationsquelleAutor ahmad soliman | 2013-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie, um die Sammlung als element aus dem Formular, und Sie erhalten die Liste der feldergruppen Ihrer Sammlung.
In Ihnen sehen:
Sie haben element in Ihre Sammlung von Namen 'Adresse'? pls zeigen uns Firmen\Form\AddressFieldset
Ich Stell 'Die Adresse Fieldset Datei' jetzt im original-post
Ihr element mit label-Adresse im Feld
AddressFieldset
hatname
"name". Ändern Sie ihn auf "Adresse" und " check my code wieder.Vielen Dank, es funktioniert.
InformationsquelleAutor kilop
Können Sie populateValues() anstelle der Methode setValue (), um dies zu tun: http://framework.zend.com/apidoc/2.3/classes/Zend.Form.Form.html#populateValues
Also in Ihrem Fall sollten Sie Ihren controller:
Generieren Sie die Adressen array mit Daten aus einer DB zum Beispiel.
InformationsquelleAutor Taavi Salo
Okay, es scheint, dass einige Dinge immer Durcheinander hier. Sie versuchen, Sie manuell zuweisen, Feld-Werte, die innerhalb einer
EditForm
. Das ist ... nicht gut.Stellen Sie sich eine einfache Form
Nun Sie Bearbeiten möchten
User
. So greifen Sie das Daten aus DBSetzen die vorhandenen Werte in ein Formular alle Sie tun müssen ist, legen Sie die FORM in diese Daten.
Und das ist alles. In deinem Fall, offensichtlich ist die Daten-Struktur ist ein wenig anders und schwieriger. Man müsste entweder ein main-Objekt, das Sie könnte
$form->bind()
oder das array, dass Sie die Formulardaten zu verwenden$form->setData()
muss geändert werden. In Ihrem Fall wäre dies:Wenn Sie
$form->setData($data)
mit dem oben genannten Fall, ist das Formular bereits ausgefüllt mit den Daten aus dem array. Natürlich würden Sie haben, um die Daten aus der DB und nicht schreiben, die ein array manuell.Ihr Unternehmen Objekt haben muss, um eine
getAddress()
- Funktion, die liefert ein array-Objekt, das dieAddressFieldset
muss.Ich Schreibe diese
code
foreach ($Adressen as $Adresse) { $Firmen->Adresse = $Adresse; }code
Vor $Formular->bind($Unternehmen); Und es ist hinzuzufügen, um die $ - Unternehmen, aber ohne das Formular zu Lesen.InformationsquelleAutor Sam
Wenn Sie wollte, dies zu tun-controller mit getTargetElement() wird das element zurückgegeben oder fieldset, zugewiesen in der Sammlung.
InformationsquelleAutor kcrane377