CodeCaster schreef op woensdag 24 juni 2009 @ 14:15:
De code die jij post is ook niet netjes, maar ik noemde twee gangbare templatesystemen waarin je dergelijke code grotendeels afwezig kunt laten.
Ik vind een syntax zoals Smarty die gebruikt persoonlijk best prettig:
HTML:
1
2
3
4
| {if $name_exists}
<p class="error">* Er bestaat al een project met deze naam.</p>
{/if}
<label for="name">Naam:</label> <input id="name" type="text" name="name" value="{$data.name}" maxlength="32" /> (maximaal 32 tekens lang)<br /> |
Of anders TemplatePower:
HTML:
1
2
3
4
| <!-- START BLOCK : name_exists -->
<p class="error">* Er bestaat al een project met deze naam.</p>
<!-- END BLOCK : name_exists -->
<label for="name">Naam:</label> <input id="name" type="text" name="name" value="{$data.name}" maxlength="32" /> (maximaal 32 tekens lang)<br /> |
Nu was mijn voorbeeld ook expres wat cluttered, om te laten zien dat je bij een extra mogelijkheid voor een melding een heel bups aan code nodig hebt in diezelfde view. Of het nu met php gaat, Smarty of TemplatePower maakt in die zin niet heel veel uit natuurlijk. Waar jij nu meer op doelt is syntax, maar dat is voor mij eigenlijk minder belangrijk

Jij houdt je bezig met het in HTML stoppen van je bericht, en dat doe je in je controller... dat lijkt me minder wenselijk dan een eenvoudige $tpl->assign("name_exists", true);.
Wat ik belangrijker vind is dit punt. Je kan namelijk zowel in je controller als in je view een bug introduceren. Je kan een typefout maken of een fout in de omliggende if/else. En dat dus twee keer. Een notification oproepen beperkt zich eigenlijk enkel tot in de controller. Dus kan je daar minder fouten in maken.
offtopic:
Ja, ik wel eens gewerkt met systemen die een $isNotRight achtige variabele hebben. Je wil dat het wel goed is, dus moet de $isNotRight false zijn om met dubbele ontkenning je waarheid te krijgen. Imho grote bron van bugs

Daarnaast wil ik graag de verantwoordelijkheid van mijn 'blog-artikel-view' beperken tot het weergeven van een artikel. En liefst niet alle meuk eromheen die wel van belang is, maar niet per definitie tot de verantwoordelijkheid behoort om het blog artikel te laten zien.
Het voordeel van mijn werkwijze waarbij ik gebruik maak van templates is dat ik de positie, opmaak én inhoud van berichten in mijn view kan bepalen.
Dat is nu het fijne van het Zend Framework waarin ik werk. Voor je eerste punt: wat ik al eerder zei, het is geen probleem om de opmaak van het berichtje via een view te laten verlopen. Dat is voor mij luiheid dat ik het niet doe, maar maakt niet uit voor dit principe.
Verder denk ik niet dat je view bedoeld is om inhoud van bericht te bepalen. Dat doe ik in mijn controller. Of beter gezegd, ik roep in mijn controller een string aan die door Zend_Translate vertaald wordt naar de juiste taal. Die staat in een apart bestand en is dus onafhankelijk van view of controller.
Het derde ding (positie): het handige is dat ik de notificatie in de body van de layout dump, voordat de view erin komt te staan (in de controller gooi je eerst de notificatie, daarna wordt aan het einde van de actie de view gerendered). Dat betekent als ik een pagina heb met drie blokken:
Waarbij A en C tekst zijn en B een contact formulier, de notificatie altijd tussen A en B in komt te staan: zo dicht mogelijk bij het betreffende blok en altijd erboven. Voor mij dus de optimale situatie: het gebeurt goed en ik hoef er niet meer over na te denken.
[...]
Ik hoef niet te weten dat een post is mislukt, maar waaróm. Bijvoorbeeld welke query is uitgevoerd, en wat hiervan het resultaat was. De gebruiker heeft daar niet alleen niets aan, maar ook nog eens helemaal niets mee te maken. En wat als ik bij het tonen van een message met jouw systeem een afbeelding, bijvoorbeeld een mooi uitroepteken, mee wil geven? Moet ik dat dan in de message zelf zetten?
Waar je nu op doelt is waarschijnlijk meer een berichtgeving bij een input field dat er iets niet goed is gegaan (te kort, te lang, leeg, geen email adres etc). Dat zijn zaken die in Zend via
validators gaan. Die geven bepaalde meldingen (bijv. "Value is required and can't be empty"). Deze teksten zijn weer te vertalen. De positie van deze meldingen zijn weer te bepalen via
decorators.
De eigenlijke foutmeldingen bij een formulier staan dus los van andere meldingen die ik geef (taal niet gevonden, bericht met succes geplaatst, login correct etc).
Maar eigenlijk denk ik dat beide methoden niet slecht zijn. Er leiden meer wegen naar Rome. Ik denk wel dat "mijn manier" wat meer voordelen zal bieden als je systeem groter wordt. "Jouw manier" zal eenvoudiger zijn om in begin op te zetten en daarom makkelijker voor kleinere applicaties