2011-07-18 4 views
0

この時点で私はZend Frameworkのフォームを作成しています。 会社が候補詳細を記入できるフォームになっていなければなりません。Zend Framework:Zend Form Elementを使用してファイルをアップロードする

私はかなり新しい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); 
} 

} 

がどのように私は、ファイルを選択し、それをアップロードすることができ、フォーム要素を追加することができ、それが保存されます私は私のコントローラからのコードを配置する必要がある場合、私は

にも同様に事前に感謝を教えてください!

(のは、/アプリケーション/ tmpに例えばとしましょう)むしろ、あなたがあなたのフォーム要素を作成することができますinit()方法でZend_Formを拡張しなければならないZend_Validate_Abstractを拡張するよりも、すべての

//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); 
+0

私は混乱しています、あなたはフォーム要素について尋ね、検証クラスに関するあなたのコードを教えてください? –

+0

-1私は返信を受け取りません。 – JellyBelly

答えて

4

はこれを試して

<?php 

class Application_Form_ContactMethodSelected extends Zend_Form 
{ 
    public function init() 
    { 
    } 
} 

あなたは行動しました

<?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; 
    } 
} 

そして中:あなたはあなたのコントローラで使用することができ、あなたはいくつかの要素を持つフォームを持っていることを今

<?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)); 
    } 
} 

を:UALのフォームはあなたのファイルアップロード要素のようなものを追加することができ、で動作するようにあなたのビュースクリプトは、あなたのフォームを表示することができます:

<h1>My upload form</h1> 
<?php echo $this->form; ?> 
+0

これをコードに追加するとエラーが発生します – JorritK

+0

他の方法を追加します! – JellyBelly

関連する問題