Matthew,
Eventhough I see it's use; in my current setup, setElementsBelongTo()
doesn't offer me the solution I was hoping for. But maybe I am overlooking
something.
In short (for examplary purposes) this roughly is what I have:
=====================
## a few generic forms like this one:
class Form_ResourceDelete extends Zend_Form
{
protected $_name = 'resourceDelete';
public function init()
{
$this->setName( $this->_name )
->setMethod( 'post' )
->setAttribs( array( 'accept-charset' => 'utf-8' ) )
->setDecorators( array(
'PrepareElements',
array( 'ViewScript', array( 'viewScript' =>
'resource/partials/form-delete.phtml' ) ),
'Form'
) );
$decorators = array(
'ViewHelper',
'Label',
'Errors'
);
$resourceId = new Zend_Form_Element_Hidden( 'resourceId' );
$resourceId->setDecorators( $decorators ); // I add a few
validators too
$submit = new Zend_Form_Element_Button( 'submit' );
$submit->setDecorators( $decorators )
->setAttribs( array( 'type' => 'submit',
'escape' => false ) );
}
public function setResourceId( $resourceId )
{
$this->resourceId->setValue( $resourceId );
$this->_updateElements();
return $this;
}
protected function _updateElements()
{
$this->setElementsBelongTo( $this->_name . '_' .
$this->resourceId->getValue() );
// actually much more is happening here, so this function isn't
as
redundant as it looks
}
}
## a ViewScript decorator along the lines of:
<?
$form = $this->element;
$form->setAction( $this->url( array( 'module' => 'cms', 'controller' =>
'page-manager', 'action' => 'delete' ) ) );
?>
<div>
<?= $form->resourceId->renderViewHelper(); ?>
<?= $form->submit->renderViewHelper(); ?>
</div>
## a partialLoop viewhelper that iterates through all pages along the lines
of:
<?
$resourceDeleteForm = new Form_ResourceDelete();
?>
<div class="page">
<?= $this->title ?>
<?= $resourceDeleteForm->setResourceId( $this->id ); ?>
// and then some other resource option forms such as "sort up"
"sort down"
"edit" etc....
</div>
=====================
Now, two problems occur.
One: it seems I have to clone the Form in the partialLoop viewhelper in
order to let the setElementsBelongTo() have effect. Otherwise it simply
renders all forms with namespaces containing the first resourceId I assigned
in the partialLoop's first iteration (see _updateElements method in my
Form).
Two: I have a generic deleteAction() in my controller which validates the
form:
$deleteForm = new Form_ResourceDelete();
if( $deleteForm->isValid( $formData ) )
{
// etc
}
But this doesn't work of course, since I am unable to determine the
namespace of the Form up front. Otherwise I could do setElementsBelongTO(
$namespace ) right before validating.
So, I am kind of stuck here. If you, or anyone else, has some pointers on
how I could address this issue, I'ld love to here it.
Thanks up front.
Matthew Weier O'Phinney-3 wrote:
>
> -- [email protected] <[email protected]> wrote
> (on Wednesday, 01 April 2009, 12:59 PM +0000):
>> I wasn't aware of the setElementsBelongTo method. I will look into that.
>
> It was created in large part for this very purpose. A common pattern in
> PHP is to namespace your forms using array notation, and this was built
> into Zend_Form.
>
>> Are you sure that it will prefix elements with "<name>-" is stead of
>> "<name>_"
>> (dash instead of underscore?). If so, I believe this is not Javascript
>> compliant (or at least not cross platform/browser). To my knowledge some
>> (or
>> maybe all?) Javascript engines have trouble with addressing elements with
>> dashes in their id's, since a dash is simply a minus sign.
>>
>> So I would not be able to do:
>> document.forms[0].hidden-elements-id.
>>
>> I know this maybe a little oldskool, and it would be possible with DOM:
>> document.getElementById( 'hidden-elements-id' );
>
> Dashes are acceptable in DOM IDs (the HTML specification specifically
> lists that as a valid ID character). Typical JS usage anymore uses
> getElementById() -- or, even more typically, proxies to that via
> library-specific mechanisms; I cannot remember the last time I used
> document.forms to retrieve form elements, honestly.
>
> <snip>
>
> --
> Matthew Weier O'Phinney
> Software Architect | [email protected]
> Zend Framework | http://framework.zend.com/
>
>
--
View this message in context:
http://www.nabble.com/Disable-id-attribute-for-form-elements--tp22821260p22832122.html
Sent from the Zend Framework mailing list archive at Nabble.com.