Take a look into the FAQ where the problem, the reason and the solution is described:
http://framework.zend.com/wiki/display/ZFFAQ/Forms

Greetings
Thomas Weidner, I18N Team Leader, Zend Framework
http://www.thomasweidner.com

----- Original Message ----- From: "Jayawi" <jayawiper...@gmail.com>
To: <fw-general@lists.zend.com>
Sent: Wednesday, September 09, 2009 4:03 PM
Subject: [fw-general] Zend_Form File Element / Decorator - Extremely Confuzzled



Hi there~

I'm relatively new to ZF but have enjoyed using it so far. The main issue
I've had with ZF is with it's Form and Decorator aspects. After going
through God knows how many articles/blogs/posts and what not, I thought I
finally had a grasp of it. Things were working okay.

I created a standard set of decorators (for Elements, Buttons and Forms)
based on an example I saw. Recently however, I realised that I needed to add
in some File Input fields into one of the forms. None of the above
decorators worked with it. At which point, I decided to use ViewScripts on
all the forms since it provides greater room to stylise/organise the form.

The code I'm currently using, looks something like the following:

site/application/forms/RegisterForm.php
class ProjectStartContactPersonForm extends Gid_Form
{
public function init ()
{
$this->setAction('')
->setMethod('post')
->setAttrib('id','formStartProject')
->setAttrib('enctype', 'multipart/form-data');

$this->addElement('text', 'textName', array('label' => 'Given Name'));
$oName = $this->getElement('textName')
->setRequired(true)
->setDecorators(array('ViewHelper', 'Errors'));

$this->addElement('file', 'filePhotograph');
$oPhotograph = $this->getElement('filePhotograph')
->setRequired(true);

$this->addElement('submit', 'submitRegister', array('label' => 'Done'));
$oContactPersonSubmit = $this->getElement('submitRegister');
$oContactPersonSubmit->setDecorators(array('ViewHelper', 'Errors'));

$this->setDecorators(array(array('ViewScript', array('viewScript' =>
'forms/RegisterForm.phtml'))));
}
}

site/application/views/scripts/forms/RegisterForm.phtml
<div id='iDivRegister'>
<form action='' method='post'>
<table>
<tr>
<td><label for='textName'>Name:</label></td>
<td><?php echo $this->element->textName; ?></td>
</tr>
<tr>
<td><label for='filePhotograph'>Photo:</label></td>
<td><?php echo $this->element->filePhotograph; ?></td>
</tr>
<tr>
<td></td>
<td><?php echo $this->element->submitRegister; ?></td>
</tr>
</table>
</form>
</div>

From RegisterForm.php I had to change $this->addElement('file',
'filePhotograph', array('label' => 'Photo')); to get it to work. prior to
that, the File Input element was being displayed twice.
Additionally, if ->setDecorators(array('ViewHelper', 'Errors')) was attached
to the File Input object, it would throw the error "Warning: No file
decorator found... unable to render file element in
C:\xampp\xampp\php\PEAR\Zend\Form\Element.php on line 1929".
I honestly can't understand what the issue is or how I'm supposed to resolve
it. All the searching and reading I did lead me to more questions and no
solution. Some of them dealt with the lack of a File Input Class in ZF
(which I believe was a somewhat early release), while others used custom
classes for things which didn't really clarify anything for me.

Currently, the File Input Element is rendered as follows:
<tr>
<td><label for='filePhotograph'>Photo:</label></td>
<td>
<dt id="filePhotograph-label">&nbsp;</dt>
<dd><input type="file" name="filePhotograph" id="filePhotograph"></dd>
</td>
</tr>

I would like to get it outside of those dt/dd tags (which suggest the
default ZF Decorators are being applied).
ZF Documentation I find stragely lacking in the various
methods/variables/parameters to use. If anyone knows of a better reference,
it's sure to help a great deal.

I would greatly appreciate any help anyone can provde me on this.
Thanks~
--
View this message in context: http://www.nabble.com/Zend_Form-File-Element---Decorator---Extremely-Confuzzled-tp25365664p25365664.html Sent from the Zend Framework mailing list archive at Nabble.com.

Reply via email to