Models e View Helper

Ritorno all'amato Framework dopo un anno e mezzo di assenza e mi sono dimenticato quasi tutto!!!

Ciò che amo e che mi sconcerta di questo Framework è che ci sono mille modi per fare la medesima cosa.

Veniamo al problema.

Per avere libertà di creazione delle pagine ho creato una serie di View Helpers che posso richiamare dai view scripts.

Per esempio in view script posso fare:

$marcheH = new helpers_Marche();
$marche = $marcheH->getMarche();

$prodottiH = new helpers_Prodotti();
$prodotti = $prodottiH->getProdotti();

e quindi (nello stesso view script):

<h2><?php echo $marca->nome; ?></h2>
<ul>
<?php
   foreach($prodotti as $prodotto)
   {
      if($prodotto->fk_marca == $marca->id)
         echo '<li>' . $prodotto->nome . '</li>';
   }
}
?>
</ul>

va da se che tutto ciò è estremamente barbaro (anche se funziona).

Mi piacerebbe usare tutti i gingillini che ZF mette a disposizione, quindi ho pensato a partial e partialLoop

Una cosa simile nel view script:

<?php echo $this->partial('marcheProdottiList.phtml', $marche); ?>

quindi nel partial marcheProdottiList.phtml:

<h2><?php echo $this->nome; ?></h2>
<ul>
   <?php echo $this->partialLoop('prodottiList.phtml', $this->model); ?>
</ul>

e nel partial prodottiList.phtml:

<li><?php echo $this->nome); ?></li>

al che mi sono fermato e ho detto: qui qualcosa non torna.

Se considerate il primo esempio (quello barbaro che funziona), noterete che gli oggetti $marche e $prodotti sono diversi e che quindi devo fare un ciclo su $prodotti per selezionare quelli che corrispondono alla data marca.

Per usare il loop invece l'oggetto $marche deve essere gia fillato con i prodotti ad esso correlati (nella proprietà model che si vede nell'esempio).

Ma se ho usato due oggetti distinti ($marche e $prodotti) è perchè lo stesso oggetto $prodotti viene riusato altre volte nella pagina.

L'idea è quella di risparmiare query (trattandosi di query non da poco).

È chiaro che l'approccio che uso non è corretto.

Ma qual'è la strada giusta?

Non sono nemmeno convinto che l'uso che faccio dei View Helper sia ortodosso. L'idea era quella di creare dei widget.

Spero di non essere stato troppo confuso e che possiate darmi qualche indicazione su come è più corretto agire.

inviato 7 anni fa
arjuna
X 0 X

Leggendo questo post

http://devzone.zend.com/article/3412

e studiando alcuni view helper di zend mi sembra di capire che i view helper vengono usati con un unico metodo.

il modo in cui ho usato gli helper nell'esempio che ho postato prima è diverso, posso fare chiamate a differenti metodi:

$categorieH = new helpers_Categorie();

$categoria = $categorieH->getCategorieById(11);

$categoria = $categorieH->getCategorieByName('articolo');

etc

però posso anche fare così:

class Zend_View_Helper_FooBar
{
    public $view;

    public function fooBar()
    {
        return $this;
    }
   
   public function pippo()
    {
       return 'pluto';   
   }

    public function setView(Zend_View_Interface $view)
    {
        $this->view = $view;
    }
}

e nella view:

<?php echo $this->fooBar()->pippo(); ?>

// output: pluto

quindi la strada più interessante per il mio caso sarebbe quella di creare questo mega helper che restituisce se stesso in modo da poter creare diversi metodi i quali fanno richieste al model solo se non sono gia state fatte prima.

ora però basta: domani si parte, ci vediamo tra due settimane.

risposto 7 anni fa
arjuna
X 0 X

Ma se il tuo helper inizia ad essere troppo grande ed andare al di fuori del concetto di "view helper" non è il caso di creare una propria libreria?  ;)

Ciao ciao

risposto 7 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda