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:
> 
> -- fire-eyed-...@hotmail.com <fire-eyed-...@hotmail.com> 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      | matt...@zend.com
> 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.

Reply via email to