Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [ZF2 - ZEND FRAMEWORK 2] inserire funzione con risultati del database nel layout

    Avrei un problema da risolvere. Il nuovo ZF2 suggerisce l'utilizzo del serviceLocator per configurare le classi che gestiranno i risultati delle tabelle del database. Solo che questa soluzione non mi permette di utilizzare un metodo anche "statico" nel LAYOUT del sito. Ora cerco di spiegarmi meglio con un esempio.
    Il mio obiettivo è visualizzare una lista di categorie in tutte le pagine del sito. Quindi immagino di avere nel mio LAYOUT.PHTML un metodo statico che recuperi questa lista, ad esempio "CategoryEntity::listCategories()". Questa cosa non è fattibile con ZF2 in quanto il metodo "listCategories" deve a sua volta richiamare un altro metodo della classe che gestisce la tabella, quindi il metodo "getResult()" della classe "CategoriesTable". Solo che per richiamare la classe "CategoriesTable" occorre passare il "$tableGateway" che lo posso recuperare solo dai CONTROLLER. Quindi come posso fare se questo metodo mi occorre nel LAYOUT ? È impensabile passare una variabile al LAYOUT da ogni CONTROLLER, mi servirebbe qualcosa di più generale.
    Di seguito il codice di esempio che mi "blocca"

    Codice PHP:
    Class CategoriesEntity
    {
    protected 
    $_table;


    function 
    __construct($sm)
    {
    $this->_sm        $sm;
    $tableGateway     $sm->get('CategoriesTableGateway');
    $this->_table     = new CategoriesTable($tableGateway);

            }

    static public function 
    getInstance($sm)[/FONT][/COLOR]
    {
    if (!
    self::$instance)
    {
                   
    self::$instance = new self($sm);
    }

    return 
    self::$instance;
    }

            static public function 
    listCategories()
            {
                
    $table = new CategoriesTable($tableGateway); //come faccio a recuperare il $tableGateway nel LAYOUT????
                
    return $table->getCategories();
            }

            public function 
    listCategoriesInController()
            {
                return 
    $this->_table->getCategories(); //così funziona ma può essere utilizzato solo nei controller e non in LAYOUT
            
    }


  2. #2
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Be', non puoi accedere ai dati del modello dalla vista, sarebbe una violazione del pattern MVC.
    Quello che di solito si fa in altri framework è richiamare il metodo di un controller, che estrae i dati dal model e li restituisce a una vista "parziale" (che poi sarà inserita nella view chiamante).
    Io non ho mai usato zf né zf2, ho cercato degli esempi in giro e la cosa più simile al tuo problema che ho trovato è questa: http://samsonasik.wordpress.com/2012...nd-navigation/
    Spero che vada bene... lasciami dire però che zf2 mi sembra un gran casino (come mi sembrava pure il vecchio zf)

  3. #3
    concordo con te che non è possibile (o non dovrebbe esserlo) accedere a dati del modello da una vista, esistono però problematiche pratiche che dovrebbero permettere cose simili. L'esempio che mi hai postato è corretto per la realizzazione di un menù utilizzando la classe già esistente di ZEND "navigation". In pratica modifica o estende una classe di zf2 che ti crea un menù in modo personalizzato. A me servirebbe qualcosa di più generale. Ho fatto l'esempio di un elenco di categorie, ma un'altro esempio potrebbe essere la lista di prodotti più venduti, o altro ancora.

    In pratica un modulo che richiama dati nel database e visibile in tutte le pagine del sito. Infatti l'esempio che hai linkato viene richiamato in tutte le VIEW e questo credo sia impensabile da fare. Immagina che ad ogni VIEW bisogna aggiungere questo "partial", impensabile. Sarebbe più comodo un metodo che venga richiamato nel LAYOUT generale e non in ogni singola view, non credi?

  4. #4
    Rettifico la mia risposta…leggendo meglio probabilmente quella della "navigation" potrebbe essere una buona soluzione

    grazie mille gerakkio

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 © 2025 vBulletin Solutions, Inc. All rights reserved.