Zend Framework Generați HTML în buclă

Sunt nou în Zend Framework și aș dori sfaturi cu privire la modul cel mai bun de a intra în buclă prin intermediul bazei de date pentru a genera o listă de link-uri. Înțelegerea mea este că modelul ar trebui să conțină cea mai mare parte a logicii aplicației cu controlorii și vizualizările fiind cât mai ușoare posibil.

Sunt interogarea db pentru a obține un set de înregistrări și vreau să le rupe prin ele și să genereze linkuri HTML. Pseudocodul de mai jos.

CONTROLOR:

$this->view->myList = MODEL->generateHtml();

MODEL:

function generateHtml() {
    query db

    loop through record set

    build a string of html within loop including links

    return string to controller

}

VEDERE:

echo $this->myList;

Acest lucru pare să pună logica în model și să lase controlerul să lumineze și vizualizarea doar pentru redare.

One problem I have is that I want to use $this->view->url to generate routing links in the html I output but cannot do that in the model. The reading I have done online suggests that you should not be building html in the model. I can generate an array of the required data in the model and return that and then loop through that in either the controller or the view to generate the html but am unsure as to what is the correct approach and would appreciate some advice.

Multumesc pentru orice ajutor dat.


NOU PROBLEM - COD ACTUALIZAT:

Bună din nou .... am sugestie obosită de mai jos, dar au o problemă diferită acum.

Codul meu este acum:

MODEL:

nu se utilizează pentru acest test. va întoarce o matrice similară matricei create în controler.

CONTROLOR:

    $aStoryList = array( 
        array(
           'headline' => 'Headline 1', 
           'story' => 'Story 1' 
        ), 
        array(
           'headline' => 'Headline 2',
           'story' => 'Story 2'
        )
    );
    $this->view->aStoryList = $aStoryList;

VEDERE:

echo $this->partialLoop('partials/storyList.phtml', $this->aStoryList);

storyList.phtml:

echo "
" . $this->headline . $this->story;

Am pus parțial astfel ...

vizualizari/amprente parțiale/storyList.phtml

This placement and the path used in the view are derived from the answer to this stackoverflow question - Where do I save partial (views) in Zend Framework, to be accessible for all Views in my App?

Când execut acest lucru primesc următoarea eroare

Mesaj: scriptul "partials/storyList.phtml" nu a fost găsit în cale (/home/sites/xxxxx.com/public_html/xxxxxxx/application/views/scripts/)

Trageți-mi părul acum!

0

1 răspunsuri

The model should be used to pull data from your data source, but should not be generating any HTML markup. Save the HTML generation for the view. The controller will be the glue between the model and view; that is the controller will do the work to fetch the data and hand it off to the view where the output is generated.

In your particular case, the PartialLoop View Helper should be useful for creating markup in a loop.

Aș propune următorul Pseudocod în loc de ceea ce ați publicat mai sus:

CONTROLLER:

$this->view->myList = MODEL->getListOfItems(); //return an array of data

MODEL:

function getListOfItems() {
    $results = array();//array of data to return

   //query db

   //loop over result set
    foreach($result as $row) {
        $results[] = $row;
    }

    return $results;
}

VIEW:

<?php echo $this->partialLoop('myList.phtml', $this->myList);

MyList.phtml Vizualizare parțială:

<tr>
    <td><?php echo $this->username ?></td>
    <td><?php echo $this->firstName ?> <?php echo $this->lastName ?></td>
    <td><?php echo $this->email ?></td>
</tr>

A rezuma:

  • Controller queries model for data
  • Model returns an array of results
  • Controller passes array directly to view
  • View calls partialLoop helper and passes the array from the model
  • partialLoop helper iterates over all of the results, passing them one at a time to myList.phtml (note how the variable scope becomes local to the view partial).

Exemplul meu presupune că matricea returnată de model conține id , username , firstName , lastName .

Sper că vă ajută, nu ezitați să comenteze dacă aveți întrebări.

0
adăugat
Salut Drag - mulțumesc foarte mult pentru că ați avut timp să scrieți un răspuns detaliat și informativ. Nu am auzit de ajutorul parțială pentru vizualizarea parțială, dar va arunca o privire. Privind la pseudocodul tau, arata exact ceea ce vreau. Apreciez cu adevărat efortul tău - mulțumiri (stackoverflow nu mă lasă să votez răspunsul tău, deoarece sunt nou, dar cu adevărat apreciez eforturile tale)
adăugat autor slip0000, sursa
Bună din nou - mi-am modificat întrebarea de mai sus pentru a ilustra o nouă problemă legată de calea pe care o am. Sunt sigură că răspunsul parțial la pauză va funcționa dacă nu reușesc decât să fug. Mulțumesc oricui mă poate sfătui.
adăugat autor slip0000, sursa
vă mulțumesc desenat ..... va încerca în această seară
adăugat autor slip0000, sursa
Puteți să apelați partialLoop în interiorul altui partialLoop ? Un alt lucru (dar nu sunt sigur de asta) nu folosește ajutorul pentru vizualizarea parțială pentru performanță și ar trebui să folosească în schimb render ?
adăugat autor Songo, sursa
Doar o îmbunătățire foarte mică. Interogarea către baza de date ar trebui să returneze, în mod ideal, o matrice deja, astfel încât să nu mai fie nevoie de buclă suplimentară în interiorul PHP pentru a crea matricea.
adăugat autor Sam, sursa
@Songo Din căutarea codului pentru partial și partialLoop , nu văd nici un motiv pentru care nu ați putea apela un partialLoop un alt partialLoop (atata timp cat nu intrati intr-o gaura recursiva prin trecerea acelorasi date). Există probabil unele rezultate ca partialLoop apelurile parțiale care obiectul dvs. de vizualizare, elimină vars-urile și le atribuie vars parțial apoi apelează render() în vizualizarea clonată și returnează conținutul. S-ar putea fi interesant să
adăugat autor drew010, sursa
@ slip0000 Locația căutată pentru directorul partials este în /home/sites/xxxxx.com/public_html/xxxxxxx/application/views/‌ scripts/ . Deci, dacă creați /home/sites/xxxxx.com/public_html/xxxxxxx/application/views/‌ scripts/partials/sto & zwnj; ryList.phtml , ar trebui să funcționeze corect.
adăugat autor drew010, sursa
PHP România, Moldova
PHP România, Moldova
173 participanți

Vorbim despre Yii, Laravel, Symphony, MySQL, PgSQL, WP, OpenCart... Pentru confort, opriți notificările. Parteneri: https://ciupacabra.com @js_ro @node_ro @python_ro @seo_ro @Romania_Bot Offtop: @holywars_ro Joburi: @php_job @Grupuri_IT