此时我正在使用Zend Framework中的Form。 它必须成为一个公司可以填写候选人详细信息的表格。
我对Zend很新,所以这就是我发帖的原因。
这就是表单的样子(删除了一些字段以缩短代码)
<?php
class Application_Form_Validate_ContactMethodSelected extends Zend_Validate_Abstract {
const INVALID = 'invalid';
protected $_messageTemplates = array(
self::INVALID => 'Ten minste 1 vorm van contact invullen, telefoon, mobiel of e-mail'
);
public function isValid($value, $context = array())
{
// You need to use your element names, consider making these dynamic
$checkFields = array('telefoon','mobiel','mail');
// Check if all are empty
foreach ( $checkFields as $field ) {
if (isset($context[$field]) && !empty($context[$field])) {
if (!empty($value)) {
// This is the element with content... validate as true
return true;
}
// we are going to return false and no error
// to break validation chain on other empty values
// This is a quick hack, don't have time to invest in this
return false;
}
}
// All were empty, set your own error message
$this->_error(self::INVALID);
return false;
}
}
class Application_Form_Nieuwkandidaat extends Zend_Form {
public function init() {
$this->setMethod('post');
$DB = Zend_Db_Table::getDefaultAdapter();
$id = $this->createElement('hidden', 'id');
$voornaam = $this->createElement('text', 'voornaam');
$voornaam->setLabel('Voornaam:')
->setAttrib('size', 50)->addValidator('StringLength', false, array(2, 30))
->setRequired(true);
$telefoon = $this->createElement('text', 'telefoon');
$telefoon->setLabel('Telefoon:')
->setAttrib('size', 50)->setAllowEmpty(false)
->addValidator(new Application_Form_Validate_ContactMethodSelected(), true)
->addValidator('StringLength', false, array(10, 10));
$mobiel = $this->createElement('text', 'mobiel');
$mobiel->setLabel('Mobiel:')
->setAttrib('size', 50)->setAllowEmpty(false)
->addValidator(new Application_Form_Validate_ContactMethodSelected(), true)
->addValidator('StringLength', false, array(10, 10));
$mail = $this->createElement('text', 'mail');
$mail->setLabel('E-mail:')
->setAttrib('size', 50)->setAllowEmpty(false)
->addValidator(new Application_Form_Validate_ContactMethodSelected(), true)
->addValidator('StringLength', false, array(6, 40))->addValidator('EmailAddress', true);
$register = $this->createElement('submit', 'register');
$register->setLabel("Verstuur")
->setIgnore(true);
$reset = $this->createElement('reset', 'reset');
$reset->setLabel("Reset")
->setIgnore(true);
$this->addElements(array(
$voornaam,
$mobiel,
$telefoon,
$mail,
$id,
));
$this->addDisplayGroup(array(
'voornaam',
'mobiel',
'telefoon',
'mail',
'telefoon'
), 'contacts', array('legend' => 'Contact Informatie'));
$contacts = $this->getDisplayGroup('contacts');
$contacts->setDecorators(array(
'FormElements',
'Fieldset',
array('HtmlTag', array('tag' => 'div', 'style' => 'width:50%;;float:left;'))
));
$this->setDecorators(array(
'FormElements',
array('HtmlTag', array('tag' => 'div', 'style' => 'width:98%')),
'Form'
));
$this->addElement($register);
}
}
如何添加表单元素,我可以在其中选择文件并将其上传,以便存储(例如在/ application / tmp中)
如果我必须从控制器中下载代码,请告诉我
提前致谢!
答案 0 :(得分:8)
首先,您应该使用Zend_Validate_Abstract
方法扩展Zend_Form
,而不是扩展init()
,您可以在其中创建表单元素:
<?php
class Application_Form_ContactMethodSelected extends Zend_Form
{
public function init()
{
}
}
现在您有一个可以使用的实际表单,您可以添加文件上传元素之类的内容:
<?php
class Application_Form_ContactMethodSelected extends Zend_Form
{
public function init()
{
$this->setAttrib('enctype', 'multipart/form-data');
$file = new Zend_Form_Element_File('file');
$file->setLabel('File')
->setDestination(APPLICATION_PATH . '/tmp')
->setRequired(true);
$submit = new Zend_Form_Element_Submit('submit');
$submit->setLabel('Upload');
$this->addElements(array($file, $submit));
}
}
现在您有一个包含某些元素的表单,您可以在控制器中使用它:
<?php
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$form = new Application_Form_ContactMethodSelected();
if ($this->_request->isPost()) {
$formData = $this->_request->getPost();
if ($form->isValid($formData)) {
// success - do something with the uploaded file
$uploadedData = $form->getValues();
$fullFilePath = $form->file->getFileName();
Zend_Debug::dump($uploadedData, '$uploadedData');
Zend_Debug::dump($fullFilePath, '$fullFilePath');
echo "done";
exit;
} else {
$form->populate($formData);
}
}
$this->view->form = $form;
}
}
在您的视图脚本中,您可以显示表单:
<h1>My upload form</h1>
<?php echo $this->form; ?>
答案 1 :(得分:4)
试试这个:
//Element Attachment
$this->addElement('file', 'attachment', array('label' => 'Attachment'));
$this->attachment->setDestination(APPLICATION_PATH . "/tmp/");
$this->attachment->addValidator('NotExists', false);
或
$attachment = $this->createElement('file', 'attachment', array('label' => 'Attachment'))
->attachment->setDestination(APPLICATION_PATH . "/tmp/")
->addValidator('NotExists', false);