Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: zend e view

  1. #1

    zend e view

    Ciao a tutti, mi è chiaro come gestire forms e view in zend

    nel mio form creo tutti i campi, tipo:

    $mail = new Zend_Form_Element_Text('mail');
    $mail->setLabel('Email')
    ->setRequired(true)
    ->addFilter('StripTags')
    ->addFilter('StringTrim')
    ->addValidator('NotEmpty')
    ->addValidator(new Zend_Validate_EmailAddress());
    $mail->setAttrib('style', 'width:150px');


    e nella view carico il form ... che in automatico genera i campi precedenti

    questa soluzione però non consente di gestire graficamente la view in quanto i campi vengono generati dal form precedente.... come posso posizionare ogni singolo campo nella view'?

    Grazie
    Iceberg

  2. #2
    Codice PHP:
    echo $this->form->mio_elemento
    direttamente nella view
    oppure se vuoi usare una 'view'
    per la form
    nella tua form
    Codice PHP:
    $this->setDecorators(array(
            array(
    'ViewScript', array('viewScript' => 'user/registerForm.phtml'))),
            array(
    'Description', array('placement' => 'prepend'))
        ); 
    poi nella view ad esempio in questo caso è register
    metti
    Codice PHP:
    <?php echo $this->form?>
    e poi in registerForm.phtml
    Codice PHP:
    <form id="<?php echo $this->escape($this->element->getAttrib('id')); ?>" action="<?php echo $this->escape($this->element->getAction()); ?>" method="<?php echo $this->escape($this->element->getMethod()); ?>" class="<?php echo $this->escape($this->element->getAttrib('class')); ?>" enctype="<?php echo $this->escape($this->element->getEnctype()); ?>">


    <?php echo $this->element->name?></p>    
    </form>

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    Grazie mille, ora provo!!!

    Quindi nel tuo primo esempio tu dici:

    creo il mio form (come ho fatto) ... con tutti i campi e poi nella view faccio:

    echo $this->form->mio_elemento;

    per ogni campo mappato invece di fare come ora:

    <?php echo $this->form ;?>

    con quest'ultimo modo mi creava automaticamente tutti i campi ma non avevo controllo... invece tu suggerisci di fare

    echo $this->form->mio_elemento; per ogni campo

    mantendo comunque la gestione del form del tipo

    Codice PHP:
      $firstName = new Zend_Form_Element_Text('firstName');
            
    $firstName->setLabel('First Name')
                    ->
    setRequired(true)
                    ->
    addFilter('StripTags')
                    ->
    addFilter('StringTrim')
                    ->
    addValidator('NotEmpty');
            
    $firstName->setAttrib('style''width:150px');

            
    $lastName = new Zend_Form_Element_Text('lastName');
            
    $lastName->setLabel('Last Name')
                    ->
    setRequired(true)
                    ->
    addFilter('StripTags')
                    ->
    addFilter('StringTrim')
                    ->
    addValidator('NotEmpty');
            
    $lastName->setAttrib('style''width:150px'); 

    corretto??
    Iceberg

  4. #4
    si
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  5. #5
    Approfitto del post legato alle view in Zend per questo problema

    io sono riuscito a creare una semplice struttura con Controller, Model, Form e View ... tutto OK ma purtroppo ho dovuto creare due view (add.phtml e edit.phtml) per gestire l'inserimento di un nuovo elemento (add.phtml) e la modifica (edit.phtml) .... sono invece riuscito a gestire un unico form

    Non mi va molto l'idea di avere due file praticamente identici (add e edit) esiste una soluzione?

    allego i file utili a capire la mia soluzione

    application

    Grazie mille
    Iceberg

  6. #6
    Mah sinceramente non ne vedo l'utilita
    preferisco usare due file anche se quasi identici
    se proprio vuoi non fai altro che mettere
    un if else su il parametro id
    se è settato e valido fai edit se no insert.



    Ps
    il checkLogin() ad occhio e croce non va bene
    ti stanno li appositi metodi di Zend_Auht

    per json usa nelle chaimate ajax usa

    Codice PHP:
     $this->_helper->layout->disableLayout();
          
    $this->_helper->viewRenderer->setNoRender(true);
    $return Zend_Json::encode($data);
          return 
    $this->getResponse()->appendBody($return); 
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  7. #7
    Prima di tutto grazie per le info, sto proprio cercando di strutturare in modo corretto un'app con zend, quindi i tuoi suggerimenti mi sono molto d'aiuto.

    Non ho però capito cosa dovrei fare, provo a dettagliare:

    Mah sinceramente non ne vedo l'utilita
    preferisco usare due file anche se quasi identici
    se proprio vuoi non fai altro che mettere
    un if else su il parametro id
    se è settato e valido fai edit se no insert.
    non mi va di avere due files e tutte le volte doverne modificare/gestire due....potresti dirmi come dovrei modificare la mia unica view (cancellando quindi add.phtml and edit.phtml)?

    nelle mie due view non ho riferimenti al parametro ID, quindi non saprei dove inserire la condizione
    mentre nel form ho tenuto
    public function init() {

    //Set the method for the display form to POST
    $this->setMethod('post');

    $this->setAttrib('id', 'user');

    $id = new Zend_Form_Element_Hidden('id');
    $id->addFilter('Int');

    anche se nell'add l'ID non servirebbe



    Per quanto riguarda Json


    $this->_helper->layout->disableLayout();
    $this->_helper->viewRenderer->setNoRender(true);
    $return = Zend_Json::encode($data);
    return $this->getResponse()->appendBody($return);
    non ho capito dove modificarlo... io utilizzo Json in:
    listAction()
    townsAction()
    validateuserAction()

    come dovrei modificare il codice? (cosa in particolare??)

    ad esempio il mio listAction contiene un stringa abbastanza complessa Json, cosa dovrei cambiare?



    Grazie mille!
    Iceberg

  8. #8
    Ultima cosa se decidessi per un solo metodo
    devi per forza di cose nel senso o tutto o niente
    fare un unico metodo anche nel model
    tipo dal quick start di zend
    Codice PHP:
     public function save(Application_Model_Guestbook $guestbook)
        {
            
    $data = array(
                
    'email'   => $guestbook->getEmail(),
                
    'comment' => $guestbook->getComment(),
                
    'created' => date('Y-m-d H:i:s'),
            );
     
            if (
    null === ($id $guestbook->getId())) {
                unset(
    $data['id']);
                
    $this->getDbTable()->insert($data);
            } else {
                
    $this->getDbTable()->update($data, array('id = ?' => $id));
            }
        } 
    qui ci sta pure il mapper ma il concetto è quello.

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  9. #9
    Codice PHP:
    public function saveAction()
     {
        
    $id intval($this->_getParam('id',0));
        
    $request $this->getRequest();
        if(
    $id !== 0){
            
    // edit
        
    }
        else{
            
    // insert
        
    }

    la view avrà nome save.
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  10. #10
    Ciao, ho fatto alcune prove, grazie per tutte le info

    ho ripostato la mia app modificata in base a quanto da te indicato

    app

    credo di aver fatto un po' di casino nella mia nuova action saveAction()

    ho inserito due commenti per indicare le porzioni di codice recuperate dalle mie due vecchie azioni edit e add

    //***********************************
    // PARTE AGGIUNTA DALLA VECCHIA ACTION
    //***********************************

    //***************************************
    // FINE PARTE AGGIUNTA DALLA VECCHIA ACTION
    //***************************************


    quindi è facile capire cosa ho integrato io

    ... come dicevo, sono partito dalla tua soluzione ma credo di aver un po' "pasticciato" il controller

    e non so se model e form sono corretti

    ad esempio nel mio model ho creato la funzione save come da te indicato ma non so come gestire l'ID.... dato che prima nella mia funzione updateUser lo passavo direttamente:

    public function updateUser($id ,$firstName, $lastName, $email, $stateId, $cityId, $townId, $password, $active) {

    ora nella mia nuova funzione save mi trovo:


    if (null === ($id = $guestbook->getId())) {
    unset($data['id']);
    $this->insert($data);
    } else {
    $this->update($data, 'userId = '. (int)$id);
    }

    ma invece di $guestbook->getId() (che appartiene all'esempio quickstart) cosa devo fare?



    Potresti dirmi se sono OK o cosa cambiare?

    Grazie mille
    Iceberg

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.