Problem with Zend_From. Not able to set Attribs, including Method
I'm having some difficulty adding the method and the action, and getting them to display.
I'm creating a form, then grabbing some info about fields that should go into it from a Database, and then adding them to the form, then rendering it. It all works perfectly up to the point, where I want to submit the form, since there is no method or action.
Here's the code, var_dump and generated HTML:
public function getForm($id) {
$ar= $this->formElementModel->getElements($id);
//print_r($ar);
$form= new Zend_Form();
$form->setAction('/resource/process')
->setMethod('post');
foreach ($ar as $arr) {
$form->addElement($this->elementModel->getElement($arr['formElementId'], $this->genRandomString(),false));
//$fieldArray[] = ;
}
$form->addElement('submit', 'submit',array('order'=>100))->setMethod('post');
var_dump($form);
// var_dump($fieldArray);
return $form;
}
The var_dump() output:
object(Zend_Form)[97]
protected '_attribs' =>
array
'action' => string '/resource/process' (length=17)
'method' => string 'post' (length=4)
protected '_decorators' =>
array
'FormElements' =>
array
'decorator' => string 'FormElements' (length=12)
'options' => null
'HtmlTag' =>
array
'decorator' => string 'HtmlTag' (length=7)
'options' =>
array
...
'Form' =>
array
'decorator' => string 'Form' (length=4)
'options' => null
protected '_defaultDisplayGroupClass' => string 'Zend_Form_DisplayGroup' (length=22)
protected '_description' => null
protected '_disableLoadDefaultDecorators' => boolean false
protected '_displayGroupPrefixPaths' =>
array
empty
protected '_displayGroups' =>
array
empty
protected '_elementDecorators' => null
protected '_elementPrefixPaths' =>
array
empty
protected '_elements' =>
array
'textElement40_yu75r8x22i' =>
object(Zend_Form_Element_Text)[106]
public 'helper' => string 'formText' (length=8)
protected '_allowEmpty' => boolean true
protected '_autoInsertNotEmptyValidator' => boolean true
protected '_belongsTo' => null
protected '_decorators' =>
array
...
protected '_description' => null
protected '_disableLoadDefaultDecorators' => boolean false
protected '_errorMessages' =>
array
...
protected '_errors' =>
array
...
protected '_errorMessageSeparator' => string '; ' (length=2)
protected '_filters' =>
array
...
protected '_ignore' => boolean false
protected '_isArray' => boolean false
protected '_isError' => boolean false
protected '_isErrorForced' => boolean false
protected '_label' => string 'Teksta elements' (length=15)
protected '_loaders' =>
array
...
protected '_messages' =>
array
...
protected '_name' => string 'textElement40_yu75r8x22i' (length=24)
protected '_order' => null
protected '_required' => boolean false
protected '_translator' => null
protected '_translatorDisabled' => boolean false
protected '_type' => null
protected '_validators' =>
array
...
protected '_validatorRules' =>
array
...
protected '_value' => null
protected '_view' => null
protected '_isPartialRendering' => boolean false
'selectElement39_19voehc8bz' =>
object(Zend_Form_Element_Select)[101]
public 'helper' => string 'formSelect' (length=10)
public 'options' =>
array
...
protected '_registerInArrayValidator' => boolean true
protected '_separator' => string '<br />' (length=6)
protected '_translated' =>
array
...
protected '_allowEmpty' => boolean true
protected '_autoInsertNotEmptyValidator' => boolean true
protected '_belongsTo' => null
protected '_decorators' =>
array
...
protected '_description' => string 'Vienlkāršs elementsa' (length=22)
protected '_disableLoadDefaultDecorators' => boolean false
protected '_errorMessages' =>
array
...
protected '_errors' =>
array
...
protected '_errorMessageSeparator' => string '; ' (length=2)
protected '_filters' =>
array
...
protected '_ignore' => boolean false
protected '_isArray' => boolean false
protected '_isError' => boolean false
protected '_isErrorForced' => boolean false
protected '_label' => string 'Dynamic elements' (length=16)
protected '_loaders' =>
array
...
protected '_messages' =>
array
...
protected '_name' => string 'selectElement39_19voehc8bz' (length=26)
protected '_order' => null
protected '_required' => boolean false
protected '_translator' => null
protected '_translatorDisabled' => boolean false
protected '_type' => null
protected '_validators' =>
array
...
protected '_validatorRules' =>
array
...
protected '_value' => null
protected '_view' => null
protected '_isPartialRendering' => boolean false
public 'escape' => boolean false
'textElement37_wz47pigru9' =>
object(Zend_Form_Element_Text)[109]
public 'helper' => string 'formText' (length=8)
protected '_allowEmpty' => boolean true
protected '_autoInsertNotEmptyValidator' => boolean true
protected '_belongsTo' => null
protected '_decorators' =>
array
...
protected '_description' => null
protected '_disableLoadDefaultDecorators' => boolean false
protected '_errorMessages' =>
array
...
protected '_errors' =>
array
...
protected '_errorMessageSeparator' => string '; ' (length=2)
protected '_filters' =>
array
...
protected '_ignore' => boolean false
protected '_isArray' => boolean false
protected '_isError' => boolean false
protected '_isErrorForced' => boolean false
protected '_label' => string 'Nosaukums' (length=9)
protected '_loaders' =>
array
...
protected '_messages' =>
array
...
protected '_name' => string 'textElement37_wz47pigru9' (length=24)
protected '_order' => null
protected '_required' => boolean false
protected '_translator' => null
protected '_translatorDisabled' => boolean false
protected '_type' => null
protected '_validators' =>
array
...
protected '_validatorRules' =>
array
...
protected '_value' => null
protected '_view' => null
protected '_isPartialRendering' => boolean false
'submit' =>
object(Zend_Form_Element_Submit)[98]
public 'helper' => string 'formSubmit' (length=10)
protected '_allowEmpty' => boolean true
protected '_autoInsertNotEmptyValidator' => boolean true
protected '_belongsTo' => null
protected '_decorators' =>
array
...
protected '_description' => null
protected '_disableLoadDefaultDecorators' => boolean false
protected '_errorMessages' =>
array
...
protected '_errors' =>
array
...
protected '_errorMessageSeparator' => string '; ' (length=2)
protected '_filters' =>
array
...
protected '_ignore' => boolean true
protected '_isArray' => boolean false
protected '_isError' => boolean false
protected '_isErrorForced' => boolean false
protected '_label' => null
protected '_loaders' =>
array
...
protected '_messages' =>
array
...
protected '_name' => string 'submit' (length=6)
protected '_order' => int 100
protected '_required' => boolean false
protected '_translator' => null
protected '_translatorDisabled' => boolean false
protected '_type' => null
protected '_validators' =>
array
...
protected '_validatorRules' =>
array
...
protected '_value' => null
protected '_view' => null
protected '_isPartialRendering' => boolean false
protected '_elementsBelongTo' => null
protected '_errorMessages' =>
array
empty
protected '_errorsExist' => boolean false
protected开发者_开发技巧 '_errorsForced' => boolean false
protected '_formOrder' => null
protected '_isArray' => boolean false
protected '_legend' => null
protected '_loaders' =>
array
'DECORATOR' =>
object(Zend_Loader_PluginLoader)[107]
protected '_loadedPluginPaths' =>
array
...
protected '_loadedPlugins' =>
array
...
protected '_prefixToPaths' =>
array
...
protected '_useStaticRegistry' => null
'ELEMENT' =>
object(Zend_Loader_PluginLoader)[111]
protected '_loadedPluginPaths' =>
array
...
protected '_loadedPlugins' =>
array
...
protected '_prefixToPaths' =>
array
...
protected '_useStaticRegistry' => null
protected '_methods' =>
array
0 => string 'delete' (length=6)
1 => string 'get' (length=3)
2 => string 'post' (length=4)
3 => string 'put' (length=3)
protected '_order' =>
array
'textElement40_yu75r8x22i' => null
'selectElement39_19voehc8bz' => null
'textElement37_wz47pigru9' => null
'submit' => int 100
protected '_orderUpdated' => boolean true
protected '_subFormPrefixPaths' =>
array
empty
protected '_subForms' =>
array
empty
protected '_translator' => null
protected '_translatorDisabled' => boolean false
protected '_view' => null
protected '_isRendered' => boolean false
and the generated HTML:
<form id="fZvN9un1xn4Uh9yZzgWOi9NluFf6CiOuFWH6ugVQSkapm2SV2Jb">
<dl class="zend_form">
<dt id="textElement40_yu75r8x22i-label"><label for="textElement40_yu75r8x22i" class="optional">Teksta elements</label></dt>
<dd id="textElement40_yu75r8x22i-element">
<input name="textElement40_yu75r8x22i" id="textElement40_yu75r8x22i" value="" type="text"></dd>
<dt id="selectElement39_19voehc8bz-label"><label for="selectElement39_19voehc8bz" class="optional">Dynamic elements</label></dt>
<dd id="selectElement39_19voehc8bz-element">
<select name="selectElement39_19voehc8bz" id="selectElement39_19voehc8bz">
<option value="sdffdsf" label="Nekāda sudfdfdss s s nebūs! - newText26">Nekāda sudfdfdss s s nebūs! - newText26</option>
<option value="newName21" label="newTitle22 - newText23">newTitle22 - newText23</option>
</select>
<p class="description">Vienlkāršs elementsa</p></dd>
<dt id="textElement37_wz47pigru9-label"><label for="textElement37_wz47pigru9" class="optional">Nosaukums</label></dt>
<dd id="textElement37_wz47pigru9-element">
<input name="textElement37_wz47pigru9" id="textElement37_wz47pigru9" value="" type="text"></dd>
<dt id="submit-label"> </dt><dd id="submit-element">
<input name="submit" id="submit" value="submit" type="submit"></dd></dl></form>
The controller script
public function viewAction($formId=NULL) {
$id = $formId;
if ($formId === NULL) {
$id = $this->_getParam('id');
}
$form=$this->formModel->getForm($id);
if ($this->getRequest()->isPost()) {
print_r($this->_getAllParams());
}
$this->view->fields =$form ->render();
}
Help?!
[EDIT] Just found out something weird. If I create a form inside the Controller and add the fields there, it renders ok. If I pass the Form to the Model and the back, the method and action is gone, even though, it was there before.
I shall try creating a new form in it's own file, dynamically add the fields in the Form file, and then get it back. [EDIT2] Just found out something else, that's weird. When I echo the form straight form the controller, it works just fine. If I assign it to a view variable, and then echo it in the view, it doesn't work.
Try and change
$this->view->fields =$form ->render();
To
$this->view->form =$form;
And in your View just do this
echo $this->form
render()
for a form should be passed a View as Documented, I have never used setView()
for a form and its always worked fine.
Calling echo
or print()
on a Zend_Form
object will use its __toString()
method and output its generated HTML.
Hope that helps
The problem was with a javascript that was interfering in the process.
精彩评论