definizione dei Zend_Captcha

ciao a tutti,

se si aggiunge un Form_element di tipo Captcha (image) ad un form,

 ZF mi genera un output (depurato dei decorator) simile a questo

<label for="captc-input" class="required">testo della label:</label>
<img width="150" height="50" alt="" src="path/sorgente/dell'immagine" />
<input type="hidden" name="captc[id]" value="9b6c727567fc7dfaf8deafd1ac1cf5d8" id="captc-id" />
<input type="text" name="captc[input]" id="captc-input" value="" />
<input type="text" name="captc" id="captc" value="9b6c727567fc7dfaf8deafd1ac1cf5d8" />

in pratica produce una label, un'immagine e tre distinti campi input.

naturalmente poi vado a gestire i decorators per inglobare il tutto in tabelle, tr, td

domande:

perchè genera due distinti campi (captc[id] e captc) valorizzati con l'hash di controllo?

come faccio a rendere hidden il secondo che mi mette, maledettamente, come type="text"? :tichedoff:

un'ultima domanda più malandrina: ma voi usate questo captcha o ve ne siete fatti uno manin manina senza ZF? (delle volte con ZF mi sembra di perdere inutilmente tempo)

grazie ciao

inviato 5 anni fa
fabio.pellati
modificato 5 anni fa
X 0 X

Io preferisco usare ReCaptcha, Zend Framework mette a disposizione l'oggetto apposito.

Comunque userei gli oggetti di zend per creare un captcha e non lo farei a manina.

Per rispondere alle prima domanda:

Il label è il "titolo" del tuo campo, poi hai l'immagine. Se tu vuoi nascondere il campo di testo, l'utente dove inserisce il codice che legge? Il campo di tipo hidden invece serve perchè altrimenti il tuo applicativo come fa ad associare il campo inserito dall'utente con l'immagine che vedeva?

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Il label è il "titolo" del tuo campo, poi hai l'immagine. Se tu vuoi nascondere il campo di testo, l'utente dove inserisce il codice che legge? Il campo di tipo hidden invece serve perchè altrimenti il tuo applicativo come fa ad associare il campo inserito dall'utente con l'immagine che vedeva?

Grazie MarioS,

ma non hai capito bene:

"label" (visibile),

"immagine" (visibile),

"hash"  (hidden)

"campoTesto" (visibile)

sarebbero 4 oggetti e andrebbe bene;

solo che, a me, ne genera 5 : c'è un'altro "hash" (visibile). Ed è una schifezza da vedere.

vado a vedere ReCaptcha, grazie

Fabio

risposto 5 anni fa
fabio.pellati
X 0 X

Ah giusto questo qui:

<input type="text" name="captc" id="captc" value="9b6c727567fc7dfaf8deafd1ac1cf5d8" />[/quote]
Ci fai vedere il codice con cui crei il form?
risposto 5 anni fa
Mario Santagiuliana
X 0 X

Ci fai vedere il codice con cui crei il form?[/quote]

eccolo

$this->setMethod('post');
        $captcha = $this->addElement('captcha', 'captc', array(
            'label' => "Inserite nel campo il testo che leggete nell'immagine: ",
            'order' => 1,
            'captcha' => array(
                'captcha' => 'Image',
                'usenumbers'    => '2346789',
                'font'  => DATA_PATH. '/locales/fonts/Courier_New_Bold_Italic.ttf',
                'fontsize'  => '32px',
                'imgdir'    =>  DATA_PATH. '/locales/tmp/',
                'imgurl'    => '/celecup/tools/captchaimage/id',
                'expiration' => 10,
                'suffix'    => '',
                'wordLen' => 4,
                'timeout' => 30,
                'height'    => '50',
                'width' =>'150'
            )
        ));

        $submit=$this->addElement('submit', 'submit', array('label'=>''));

          $elementdecorators=array(
          'ViewHelper',
          array('Errors'),
          array('HtmlTag',
                    array('tag' =>'td', 'class'=> 'element')
               ),
          array('Label',
                    array('tag' => 'td')
              ),
           array(
                    array('row'=>'HtmlTag'),
                    array('tag'=>'tr')
                )

          );
      $this->setElementDecorators($elementdecorators);

        }

questo codice è in

public function init()

di una classe Form che poi viene istanziata dal controller

risposto 5 anni fa
fabio.pellati
X 0 X

$captcha rimane li dove è?

risposto 5 anni fa
Mario Santagiuliana
X 0 X
$captcha rimane li dove è?

non ho capito la domanda.

risposto 5 anni fa
fabio.pellati
X 0 X

Quella variabile rimane li o la riutilizzi poi?

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Quella variabile rimane li o la riutilizzi poi?

è così:

class miaForm extend Zend_form
        public function init(){
              ..il codice scritto sopra
          }
}

nel controller

public function indexAction(){
    $frm= new miaForm();
     $this->view->variabile_form=$frm;
}

nello script view

echo $this->variabile_form
risposto 5 anni fa
fabio.pellati
X 0 X

Prova così:

$captcha = $this->addElement('captcha', 'captc', array(
            'label' => "Inserite nel campo il testo che leggete nell'immagine: ",
            'captcha' => 'Image',
            'captchaOptions' => array(
                  // ...solito...
risposto 5 anni fa
Mario Santagiuliana
X 0 X

Prova così:

...
            'captchaOptions' => array(
                  // ...solito...

No, non va.

il problema viene scatenato dall'applicazione dei decorators

$elementdecorators=array(
          'ViewHelper',
          array('Errors'),
          array('HtmlTag',
                    array('tag' =>'td', 'class'=> 'element')
               ),
          array('Label',
                    array('tag' => 'td')
              ),
           array(
                    array('row'=>'HtmlTag'),
                    array('tag'=>'tr')
                )
          );
        $this->setElementDecorators($elementdecorators);

se tolgo queste due righe, non mi applica più la distribuzione in tabella ma non genera più l'ultimo campo

<input type="text" name="captc" id="captc" value="9b6c727567fc7dfaf8deafd1ac1cf5d8" />

come dovrebbe essere.

mi sa che mi sono imbattuto in un bug

risposto 5 anni fa
fabio.pellati
X 0 X

ho risolto:

il problema era il decorator

        $elementdecorators=array(
          'ViewHelper',
          array('Errors'),
          array('HtmlTag',

nel caso dei Captcha non deve essere definito il decorator 'ViewHelper' che daltronde è fondamentale che ci sia nei campi di tipo Text

questo decorator vorrebbe generare il campo facendo riferimanto ad un Helper che non esiste.

quindi la forma funzionante per i Captcha è:

        $elementdecorators=array(
          array('Errors'),
          array('HtmlTag',
          ecc...
risposto 5 anni fa
fabio.pellati
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda