turk porno porno escort rokettube
Ergebnis 1 bis 3 von 3

Thema: Fehlermeldungen bei Validierung von Collections

  1. #1
    Benutzer
    Registriert seit
    22.06.2008
    Beiträge
    84
    Thanks
    1
    Thanked 6 Times in 6 Posts

    Frage Fehlermeldungen bei Validierung von Collections

    Hallo,

    ich baue gerade ein Formular über das der User u.a. Dateien hochladen kann. Ich habe das über Collections gelöst:

    PHP-Code:
    <?php
    use Zend\InputFilter;

    class 
    Form extends \Zend\Form\Form
    {
        const 
    FILE_COUNT 3;


        public function 
    __construct($name null$options = [])
        {
            
    parent::__construct($name$options);


            
    $this->add([
                
    'name' => 'files',
                
    'type' => 'collection',
                
    'options' => [
                    
    'count'         => self::FILE_COUNT,
                    
    'allow_add'     => false,
                    
    'allow_remove'  => false,
                    
    'target_element'=> [
                        
    'type' => 'file',
                        
    'attributes' => ['accept' => 'image/*']
                    ]
                ]
            ]);


            
    $this->setInputFilter($this->createInputFilter());
        }


        private function 
    createInputFilter()
        {
            
    $filter = new InputFilter\InputFilter();


            
    $filter->add([
                
    'name' => 'files',
                
    'type' => InputFilter\FileInput::class,
                
    'required' => false,
                
    'validators' => [[
                    
    'name' => 'File\Size',
                    
    'options' => ['max' => '50kB']
                ]]
            ]);


            return 
    $filter;
        }
    }
    In meiner index.php (ich nutze kein MVC) mache ich folgendes:
    PHP-Code:
    <?php
    $request 
    = new \Zend\Http\PhpEnvironment\Request();

    if (
    $request->isPost()) {
        
    $form->setData(array_merge(
            
    $request->getPost()->toArray(),
            
    $request->getFiles()->toArray()
        ));
        if (
    $form->isValid()) {
            
    // ...
            
    var_dump($form->getData());
            exit;
        }


        
    var_dump($form->isValid());
        
    var_dump($form->getMessages());


        exit;
    }
    Beim Upload einer 70kB großen Datei wird der Size-Validator aufgerufen (Maximum allowed size for file is '50kB' but '70.52kB' detected) und liefert false zurück.

    Das Formular ist dementsprechend auch ungültig. Dummerweise liefert Form::getMessages ein leeres Array zurück.

    Was übersehe ich bzw. wie komme ich an die Fehlermeldungen der einzelnen Collection-Elemente?

    Für Hinweise wäre ich dankbar


    Gruß,
    Marco

  2. #2
    Erfahrener Benutzer
    Registriert seit
    22.11.2009
    Beiträge
    171
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Hallo!

    Ich weiß nicht, ob es anders funktioniert, ich jedenfalls baue meine Collections über Fieldsets, wie im "Form Collections" Tutorial. D.h. jedes Element der Collection ist ein Fieldset, z.B.:

    PHP-Code:
    class MyFormOrFieldset
    {
        public function 
    init()
        {
            
    parent::init();
            
    $this->add(
                [
                    
    'name' => 'servers',
                    
    'type' => 'Zend\Form\Element\Collection',
                    
    'options' => [
                        
    'label' => _('servers'),
                        
    'count' => 3,
                        
    'should_create_template' => true,
                        
    'template_placeholder' => '__placeholder__',
                        
    'allow_add' => true,
                        
    'target_element' => [
                            
    'type' => 'My\Form\Fieldset\Server'
                        
    ],
                        
    'label_attributes' => [...]
                    ]
                ]
            );
        }        
    }

    class 
    ServerFieldset extends Fieldset implements InputFilterProviderInterface
    {
        public function 
    init()
        {
            
    $this->add(
                [
                    
    'type' => 'text',
                    
    'name' => 'name',
                    
    'options' => [
                        
    'label' => _('server name'),
                        
    'label_attributes' => [...]
                    ],
                    
    'attributes' => [...]
                ]
            );
        }
        public function 
    getInputFilterSpecification()
        {
            return [
                
    'name' => [
                    
    'validators' => [
                        [
                            
    'name' => 'Regex',
                            
    'options' => [
                                
    'pattern' => '/^[A-Z][0-9]{3}/',
                            ]
                        ],
                    ],
                ]
            ];
        }

    Wie gesagt, möglicherweise geht es auch ohne Verschachtelung von Fieldsets (allein schon weil Collection#targetElement ein ElementInterface erwartet), habe ich aber noch nicht ausprobiert.
    Geändert von automatix (10.06.2016 um 00:27 Uhr)


  3. #3
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von st0ffel Beitrag anzeigen
    Dummerweise liefert Form::getMessages ein leeres Array zurück.
    Schau mal bitte in den Bugtracker von „Zend\Form“ und „Zend Framework“ selbst, denn ich erinnere mich dunkel, dass es dazu ein Ticket gab.

    Zitat Zitat von st0ffel Beitrag anzeigen
    PHP-Code:
    use Zend\InputFilter;

    class 
    Form extends \Zend\Form\Form
    {
        public function 
    __construct($name null$options = [])
        {
            
    $this->setInputFilter($this->createInputFilter());
        }


        private function 
    createInputFilter()
        {
        }

    Wirf mal einen Blick in das Code-Beispiel von „automatix“, denn einen „InputFilter“ hinzufügen geht eleganter.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

Ähnliche Themen

  1. Mehrere Collections des gleichen Fieldsets
    Von domeb im Forum ZF2 Formulare
    Antworten: 5
    Letzter Beitrag: 04.09.2013, 12:50
  2. Eigene Fehlermeldungen bei Zend\Form\Element\Select
    Von stefan1989 im Forum ZF2 Einsteigerfragen
    Antworten: 3
    Letzter Beitrag: 17.08.2013, 20:29
  3. JOB: Validierung mit eigenen Fehlermeldungen
    Von jens76 im Forum Formulare
    Antworten: 0
    Letzter Beitrag: 12.09.2011, 14:42
  4. Antworten: 2
    Letzter Beitrag: 06.07.2009, 16:41
  5. Antworten: 0
    Letzter Beitrag: 14.02.2009, 15:56

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •