Coincidentally, I was testing subforms on Monday. Here is a somewhat
contrived login form created from two subforms.
I took a slightly different approach in that I wanted the form and subforms
created by config files and I am using a form viewscript to render the form.
Code fragments below. Hope this helps.
- Steve W.
//
$config = new Zend_Config_Ini(APPLICATION_PATH .
'/config/forms.ini');
$this->_loginForm = new Zend_Form($config->login->login);
$utilConfig = new Zend_Config_Ini(APPLICATION_PATH .
'/config/utilForms.ini');
$this->_loginForm->addSubForm(new
Zend_Form_SubForm($utilConfig->util->login), 'login');
$this->_loginForm->addSubForm(new
Zend_Form_SubForm($utilConfig->util->minimalInfo), 'minimalInfo');
$element = new Zend_Form_Element_Submit('submit');
$this->_loginForm->addElement($element, 'submit');
$this->_loginForm->setDecorators(
array(
array('ViewScript', array('viewScript'
=> 'login/login.phtml'))
)
);
Here are my config files. Notice I am playing setting decorators.type to
ViewHelper to test the control element decoration.
// forms.ini
;; Login Controller
;; Login Form
login.form = "login"
login.login.action = "identify"
login.login.method = "post"
;
login.login.elements.hidden.type = "hidden"
login.login.elements.hidden.options.value = "testing"
// utilForms.ini
;; login subform
util.login.subform = true
util.login.subform.name = "_login"
; username element
util.login.elements.username.type = "text"
util.login.elements.username.options.validators.alnum.validator = "alnum"
util.login.elements.username.options.validators.regex.validator = "regex"
util.login.elements.username.options.validators.regex.options.pattern =
"/^[a-z]/i"
util.login.elements.username.options.validators.strlen.validator =
"StringLength"
util.login.elements.username.options.validators.strlen.options.min = "6"
util.login.elements.username.options.validators.strlen.options.max = "20"
util.login.elements.username.options.required = true
util.login.elements.username.options.filters.lower.filter = "StringToLower"
util.login.elements.username.options.label = "Username:"
util.login.elements.username.options.decorators.type = "ViewHelper"
; password element
util.login.elements.password.type = "password"
util.login.elements.password.options.validators.strlen.validator =
"StringLength"
util.login.elements.password.options.validators.strlen.options.min = "6"
util.login.elements.password.options.required = true
util.login.elements.password.options.label = "Password:"
util.login.elements.password.options.decorators.type = "ViewHelper"
;; minimualInfo subForm
util.minimalInfo.subform = true
util.minimalInfo.subform.name = "_minimalInfo"
; email element
util.minimalInfo.elements.email.type = "text"
util.minimalInfo.elements.email.options.validators.notempty.validator =
"NotEmpty"
util.minimalInfo.elements.email.options.validators.notempty.breakChainOnFailure
= true
util.minimalInfo.elements.email.options.validators.strlen.validator =
"StringLength"
util.minimalInfo.elements.email.options.validators.strlen.options.min = 1
util.minimalInfo.elements.email.options.validators.strlen.options.max = 50
util.minimalInfo.elements.email.options.required = true
util.minimalInfo.elements.email.options.label = "EMail:"
; phone element
util.minimalInfo.elements.phone.type = "text"
util.minimalInfo.elements.phone.options.validators.notempty.validator =
"NotEmpty"
util.minimalInfo.elements.phone.options.validators.notempty.breakChainOnFailure
= true
util.minimalInfo.elements.phone.options.validators.strlen.validator =
"StringLength"
util.minimalInfo.elements.phone.options.validators.strlen.options.min = 1
util.minimalInfo.elements.phone.options.validators.strlen.options.max = 15
util.minimalInfo.elements.phone.options.required = false
util.minimalInfo.elements.phone.options.label = "Phone:"
// Here is the ViewScript views/scripts/login/login.phtml
<h1><?php echo $this->escape($this->title); ?></h1>
<?php echo $this->actionMessages();?>
<p>Please log in here</p>
<form action="<?php echo $this->escape($this->loginForm->getAction()); ?>"
method="<?php echo $this->escape($this->loginForm->getMethod());
?>">
<div id="username" class="formLabel">Username:</div><?php echo
$this->loginForm->login->username; ?><br/>
Password:<?php echo $this->loginForm->login->password; ?><br/>
<?php echo $this->loginForm->minimalInfo->email; ?><br/>
<?php echo $this->loginForm->minimalInfo->phone; ?><br/>
<?echo $this->loginForm->submit ?>
</form>
qba_rox wrote:
>
> HI
> I have one main form, and two sub forms, and I want to have a common
> submit button. But it really doesnt display that button after render
> action.
>
> got:
>
> $this->setDecorators(array(
> 'FormElements',
> array('TabContainer', array(
> 'id' => 'newsTabs',
> 'style' => 'width: 960px;',
> 'jQueryParams' => array()
> )),
> 'Form',
> ));
>
> $submit = new Zend_Form_Element_Submit('submit');
> $submit->setLabel('Save');
> $this->addElement($submit);
>
> $this->addSubForm(new News_Form_General, 'general');
> $this->addSubForm(new News_Form_Content, 'content');
>
> and both sub forms are displayed, bot submit element is not. help :)
>
--
View this message in context:
http://www.nabble.com/zend-form%2C-sub-forms-and-submit-element-tp21460497p21461405.html
Sent from the Zend Framework mailing list archive at Nabble.com.