chiarimenti su modello e controller

Gianni ancora devo capire bene come separare il codice ( non dalle viste, quello č facile ) ma come separare il codice che va nel controller da quello che va nel modello.

Non mi č ancora ben chiaro cosa va dove.

ad esempio, sto creando un webservice per la prenotazione online, il mio script riceve la richiesta da un referer esterno, nel modello c'č il metodo registredRefer che se il referer č registrato ritorna il suo id.

ecco il codice del controller

<?php
class BookingController extends Zend_Controller_Action
{
   private $_my_lang;
   private $_booking;
   private $_db;
   
   public function init()
   {
      $this->_my_lang = Zend_Registry::get('translate');
      $this->_booking = new Booking();
      $this->_db = Zend_Registry::get('db');
      $this->view->lang = $this->_my_lang;
   }
   
   public function externalAction()
   {
      $serial = $this->_getParam('code');
      if ( ! $info = $this->_booking->registredReferer($serial) ) {
         $this->view->message = array('error', $this->_my_lang->_('Impossibile effettuare la richiesta, host non riconosciuto'));
         return;
      }
      
      $this->_db->beginTransaction();
      $data = $_POST;
      $data = array(
            'firstname'   => $data['firstname'],
            'lastname'   => $data['lastname'],
            'address'   => $data['address'] . ', ' . $data['city'] . ', ' . $data['state'],
            'email'      => $data['email'],
            'phone'      => $data['phone'],
            'fax'      => $data['fax'],
            'type'      => $data['type'],
            'room'      => $data['room'],
            'nights'   => $data['nights'],
            'people'   => $data['people'],
            'structure'   => $info->id,
            'ip'      => ip2long($_SERVER['REMOTE_ADDR'])            
            );
      try{
      
         $this->_db->insert('reservations', $data);         
         $this->_db->commit();         
         $this->view->message = array('success', $this->_my_lang->_('Prenotazione inserita nel sistema'));
         
      }catch(Zend_Db_Exception $e){
         $this->_db->rollback();
         $this->view->message = array('error', $e->getMessage());
      }
   }
}

ed ecco il codice del modello :

<?php
class Booking
{            
   private $_delay = 64;
   private $_separator = ':';
   private $_db;
   private $_my_lang;
   
   public function __construct()
   {
      $this->_db = Zend_Registry::get('db');
      $this->_db->setFetchMode(Zend_Db::FETCH_OBJ);
   }
   
   public function encryptSerial($structure)
   {   
      //algoritmo per la decriptazione della chiave di identificazione del sito, per vedere se č registrato nel database in modo da evitare richieste da qualsiasi referer
   }
   
   public function decryptSerial($serial)
   {
//algoritmo per la decriptazione della chiave di identificazione del sito, per vedere se č registrato nel database in modo da evitare richieste da qualsiasi referer
      return $string;
   }
   
   public function registredReferer($serial)
   {
      $sql = "SELECT `id`, `web` FROM `structures` WHERE `serial`='" . $serial . "' LIMIT 1";
      $referer = $_SERVER['HTTP_REFERER'];
      $results = $this->_db->fetchAll($sql);
      if ( $results ) {
         if ( strpos($referer, $results[0]->web )) {
            return $results[0];
         } else {
            return false;
         }
      }
   }
   
   public function getStructureByCode($code)
   {
      $sql = "SELECT `id` FROM `structures` WHERE `serial`='" . $code . "' LIMIT 1";
      $results = $this->_db->fetchAll($sql);
      if ( $results ) {
         return $results[0]->id;
      } else {
         return false;
      }         
   }
}

č diviso bene il codice ?

mi daresti una spiegazione veloce su dove scrivere cosa per favore???

per il linguaggio, sto evitanto di usare testo nei file del modello e spostando tutti i messaggi nel controller.

 :bye:

inviato 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

a quanto pare ho sbagliato tutto, le azioni vanno tutte nel modello ( estrazione,update,inserimento dei dati e/o manipolazione degli stessi ) invece il controller non fa altro che processare l'input e chiamare il metodo del modello che serve ...

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

a quanto pare ho sbagliato tutto, le azioni vanno tutte nel modello ( estrazione,update,inserimento dei dati e/o manipolazione degli stessi ) invece il controller non fa altro che processare l'input e chiamare il metodo del modello che serve ...

:bye:

esatto, e questo č ancor pių vero se utilizzi il componente Zend_Table che esegue le query da solo, senza che tu debba scrivere SQL.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

sto utilizzando Zend_Select per fare le query di select.

ok ho riscritto gran parte del codice sbagliato da capo in questa nuova maniera, ora il problema č un'altro ( -> vedi altro topic :2funny: )

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Gianni č corretto passare alla vista l'istanza di Zend_Tranlsate per scrivere qualcosa tradotto in questo modo :

vista.php

<head>
<title><?php echo  $this->escape($this->lang->_('Titolo Della Pagina In Italiano'))?>

anzichč fare cosė

controller.php

$this->view->title = $this->_lang->_('Titolo Della Pagina In Italiano');

vista.php

<head>
<title><?php echo  $this->escape($this->ltitle)?>

qual'č il dei due il metodo pių corretto?

e se il metodo corretto č il secondo, come fare a valorizzare sempre n variabili del template ad ogni chiamata di controller ( controller1 valorizza : titolo, campi del menu e altro, controller2 quando chiamato fa lo stesso, quindi devo riscrivere le valorizzazioni nel metodo init di ogni controller...)

invece con il primo traduco e mostro direttamente nella vista,mi basta passare l'istanza di Zend_Traslate per permettere alla vista di avere accesso ai metodi di esso.

quindi meglio il primo ( veloce e semplice, DRY ) o il secondo ( lento e noioso, ma magari c'č qualcosa che permette di evitare tutto cio... )

PS: ora che ci penso ... potrei fare tutte le valorizzazioni del linguaggio dal file di bootstrap ...  ::) ... dopo tutto il menu e altre voci nel template ci sono sempre,quindi si potrebbe fare da index.php!

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

non vedo controindicazioni nel primo metodo  :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda