Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

ChillDevViewHelpersBundle - PHP pomagač templata za Symfony 2

Wrzasq.pl

Da bi moji projekti bili ažurirani pre nekog vremena izabrao sam Symfony 2 kao bazni okvir za zamenu zastarelog Zend Framework (verzija 1 je stara i veoma nazadna, a verzija 2 je daleko iza Symfony i novog ZF2). Symfony 2 je sajan okvir, ali postoji jedna stvar koju ne mogu da razumem - zašto uopšte koristiti Twig!? Godinma su se ljudi udaljavali od mašinerija kao što je Smarty do PHP views/templates govoreći da su mšine templata za PHP glupa ideja; i ja to u potpunosti podržavam. PHP jeste divna mašina templata, ali PHP je napravljen za osnovnu upotrebu; za razliku od Python ili Java gde sam sdaržaj mora biti eksplicitan - samo je jedna karakteristika u slučaju PHP. Smatram da je Twig veliki korak unazad i da ostajemo pri samim templatima. Nažalost osobe koje prate Twig-based konvencije pa ondda žele da upotrebe PHP treba da urade mnoge prepravke same - većina popularnih trmplata dolaze samo sa produžetkom za Twig, ali ne i sa pomagalima kada je u slučaju PHP. To je slučaj kada ChillDevViewHelpersBundle stupa na snagu! To je set pomagala za PHP bazirane template (sa tendencijom pročirivanja u budućnosti).

Zašto običan-PHP templat u svakom slučaju?

Pa, o tome se već dosta raspravljalo, na primer i ovde tako da ću vam ja dati samo nekoliko manjih primera:

  • PHP jeste veoma popularan jezik - tako da je moguće da ga vaš saradnik već poznaje, čak i ako ga nije kodirao, ali dovoljno da stavi zeljeni (X)HTML na pravo mesto (da li stvarno da poverujem da su programei zainteresovani za PHP template sve dok ih ne upotrebe)...
  • cak i ako ne poznaje dobro PHP lakše je da nauči PHP, koji je voma popularan ima mnogosadržaja na mreži, lak je za učenje, lako se savlada i čitljiv je (na lak i prepoznatljiv PHP način ;) )
  • pošto PHP jeste sam po sebi jedan ugledan PHP tempat, više je ogranničen, zašto ga onda i sami ograničavati?;
  • imajte na umu da templati dovode do smanjenja rizika zbunjenosti i mešanja - ali ja samtram da to nije istina i da ni jedan tempal ne može to uraditi, niti vas ikada nijedan templat ne može sprečiti da vidite željeno tako što ćete da pomerite edelove koda sami;
  • imajte na umu da PHP templati sadrže složene strukture nego neki drugi sliženiji tempalti? pa, imajte na umu koliko ove izjave nekada nisu u pravu, i da lako možete implementirati u mašine templata?

Instalacija

Projekat je dostupan kao Composer paket. Sve što bi trebalo da uradite jeste da se inatsalira vaš projekat i doda na sledeći niz nezavisno od composer.json fajla u "requires" sekciji (akoelite da upotrebite neku posebnu verziju možete da zamenite dev-master sa željenom stavkom - izačlo je izdanje 0.0.1):

"chilldev/view-helpers-bundle": "dev-master"

Sada samo ukucajte ChillDev\Bundle\ViewHelpersBundle\ChillDevViewHelpersBundle u vaš kernel.

Napomena: ovaj projekat upotrebljava PHP 5.4 karakteristike.

Pomagači

Dakle, šta ChillDevViewHelpersBundle vam donosi? Set korisnih pomagača koji se odnose na (X)HTML sloj (svi su inspirisani Zend Framework pomagačima, ali su implementirani na drugačiji način).

<title> pomagač

<title> tag pomagač vam dozvoljava da ubacite i trecu stranu u radnju i da je manipulište kroz vašu aplikaciju dok je na kraju ne prikažete. Dostupno je pod $view['title'] što je podklasa ArrayObject , tako da lako možete manipulisati. Kao dodatak pomagači implemntiraju setSeparator() metod koji može da promeni niz koji se koristi kao vezivo medju elemntima:

// additional feature - helper's append() method accepts variable list of arguments and appends them all
$view['title']->setSeparator(' :: ')
    ->append('foo', 'bar', 'baz');
unset($view['title'][1]);

echo $view['title']; // prints "<title>foo :: baz</title>"

Pošto mođete videti poslednji red, pomagač za titl implementira __toString() magičnu metodu, tako da je možete direktno priključiti. Odštampaće vam delove titla zajedno sa zavrčnim delom <title></title> tag. Takođe prihvata i sve druge delove pa ne morate brinuti.

Jako cest primer je dodavanje delova naslovu sto moze biti paginator:

<?php /* in your page view */
$view['title']->append($page->getName()); ?>
<?php /* in your KnpPaginator template */
if ($current > 1) {
    $view['title']->append('Page ' . $current);
} ?>
<?php /* in your main layout */ ?>
<html>
    <head>
        <?php echo $view['title']; ?>
        …
    </head>
    …
</html>

<meta> pomagač

Sledeći dobar pomagač je <meta> tag pomagač. Dozvoljava vam da definišete meta vredonsoti kod vašeg (X)HTML dokumenta, gropisanog kod ključnih karakteristika. Pstoje tri grupe koje su rasporešenje po karakteristikama: name attribute, property attribute i http-equiv attribute. Svaka ova grupa jeste samo ključ mape i ima pomoć set*(),get*() i unset*() metodu za svakog pojedinačno.

$view['meta']->setMetaName('description', \strip_tags($site->getShort()))
    ->setProperty('og:title', $site->getName())
    ->unsetHttpEquiv('Content-Type');

Sadržaj ima različite tagove, ali vi samo prebacujete pomagača i on vam daje niz koji vam je potreban, __toString() metoda (slična ovom pomagaču, meta pomagač vodi računa o vrednstima atributa - kao ključ i sadržaj atributa):

<html>
    <head>
        <?php echo $view['meta']; ?>
        …
    </head>
    …
</html>

Ključne reči

<meta> pomagačprebacuje vrednosti niza iza rikazanog, tako da ne morate da čuvate stvari - možete da sačvate bilo koji objekat. Na primer, pomagači dolazi sa već definisanim <meta name="keywords"/>> tag definisanim kao sadržaj fraze. Možete mu pristupiti pomoću $view['meta']->getMetaName('keywords') i manipulisti kao ArrayObject (ključne reči kontejner koristi kao superiornije klase koje nema poagač, tako da možete pretržati razne vrednosti kada jesnom dođđete do append() metode):

$keywords = $view['meta']->getMetaName('keywords');
$keywords->append('xhtml', 'chilldev', 'view helpers');
unset($keywords[1]);

<link> pomagač

Drugi uobičajeni HTML element, koji se mora više puta prikazivati, obično se definiše negde drugo kao <link> element. Slično meta pomagaču - link pomagač definiše samo linkove. Imate četiri parametra koji se mogu definisati:

  • $href (string) - link destination,
  • $rels (string[]) - list of rel attribute values (can be a single string if there is only one value),
  • $type (optional, string) - MIME-Type,
  • $media (optional, string) - media query.

Da bi ste dodali link koristite add() metod:

$view['link']->add('/styles/style.css', 'stylesheet', 'text/css')
    ->add('/images/favicon.png', ['shortcut', 'icon']);

Štampanje lonkova radi na isti način kao kod pretodnog pomagača (link pomagač nema nikakve vrednosti atributa:

<html>
    <head>
        <?php echo $view['link']; ?>
        …
    </head>
    …
</html>

XHTML Content-Type fiks

XHTML pomagač ima Content-Typekoji služi za napajanje vaše stvarne XHTML applikacije sa application/xhtml+xml MIME Type. Mnogi i dalje ovo ne znaju, ali na stranicama XHTML postoje aplikacije koje ne služe direktno za text/html tip (ipak ne bi treba da imate pretraživač koji ne podržava XHTML sadržaj).

Ako zelite da koristite XHTML helper morate prvo da ga osposobite ptvo u vasoj konfiguraciji aplikacije:

chilldev_viewhelpers:
    xhtml: true

Ako želite da koristite pomagač onda je standardni Content-Type i vaša će stranica odmah da XHTML-kompatiibilna. zato bi trebalo da pozovete pomagača koji ima vaš pogled. UU većini slučajeva ovako stavite poziv na površinu među prvima:

<?php $view['xhtml'](); ?>

Napomena: XHTML je veoma straktan - pre prebacivanja imajte na umu da vam stranice sadrže validne i prave XHTML strukture.

Serijski pomagači

Poslednji pomagač koji je ovde dodat jeste JMSSerializerBundle . Ovde se nalaze Twig ekstenzije, tako da morate upotrebiti PHP pa možete koridtiti pomagač kod pogleda... ne bez ChillDevViewHelpersBundle. Lakoa je veoma upotreba:

<?php echo $view['serializer']->serialize([
        'foo' => 'bar',
], 'json'); ?>

Drugi argument je opcioni, format za serilizaciju je JSON.

Čestitamo

Pored činjenice da se mnogo pmagača može definisati, odmah ubacite željeni konfiguracioni fajl. Ipak, n objašnjavam ovde u detaljima, jer je sve to objašbnjeno u konfiguraciji dokumentacije!

Doprinesite!

Ovo je MIT-licencirana projekat otvorenog sadržaja koji objavljuje GitHub. Ne bi trebalo da zapitkujete, ako vam nešto ne treba. Jer svo koriste sada upravo Twig…





Published (Last edited): 17-06-2013 , source: http://wrzasq.pl/blog/chilldevviewhelpersbundle-php-templating-helpers-for-symfony-2.html