ChillDevViewHelpersBundle – PHP skabeloner hjælpere for Symfony 2

Link: https://wrzasq.pl/blog/chilldevviewhelpersbundle-php-templating-helpers-for-symfony-2.html

For at holde mine projekter op-til-dato for noget tid siden, jeg har valgt Symfony 2 som en base ramme for at erstatte forældede Zend Framework (version 1 er gamle og langt bagud moder web-og version 2-udvikling er langt bagud Symfony s og den nye ZF2 er oppustet og rodet op). Symfony 2 er en fantastisk ramme, men der er én ting, at jeg ikke kan forstå, hvorfor fanden bruge Twig!? I år var folk migrerer fra motorer som Smarty til almindelig PHP visninger/skabeloner råben, at templating motorer til PHP er dum idé, og jeg støtter fuldt ud denne afhandling. PHP er et stort templating motor som standard, dette er, hvad PHP blev skabt for på det grundlæggende formål: det er ikke ligesom Python eller Java, hvor du er nødt til at sende output eksplicit – dette er den eneste funktion i tilfælde af PHP. Hvorfor fylde den med yderligere templating lag? Personligt mener jeg, at Twig som et skridt tilbage og ophold med almindelig PHP skabeloner. Desværre er folk, der blev fulgt på Twig-baseret konventioner, og hvis du ønsker at bruge PHP rendering er du nødt til at gøre mange ting på egen hånd – de fleste af de populære bundter kommer kun med udvidelser til Twig, men ikke med hjælpere til PHP rendering engine. Dette er, hvor ChillDevViewHelpersBundle kommer i! Det er et sæt af grundlæggende hjælpere for PHP-baseret skabeloner (håber at udvide det i fremtiden, selvfølgelig).

Hvorfor plain-PHP skabeloner alligevel?

Nå, det blev allerede diskuteret mange gange, for eksempel her, så jeg vil lige sætte nogle af mine punkter her:

  • PHP er et meget populært sprog – det er meget sandsynligt, at din frontend developer, vil allerede ved det, selv om han ikke kode i det, bare godt nok til at sætte krævede (X)HTML-på det rigtige sted (mens jeg tror næppe, at frontend-udviklere er interesseret i PHP templating motorer, indtil de virkelig er nødt til at arbejde med dem)…
  • …og selv hvis han ikke kender til PHP er det mere sandsynligt, at han vil lære PHP, som er populær, har mange ressourcer over nettet og i virkeligheden er nok mere læsbar og ren (i form af at blive clean PHP måde ;)), så nogle brugerdefinerede skabelon-motor;
  • da PHP er et anstændigt templating motor i sig selv, så hvorfor oppustethed projekt med en anden templating lag?;
  • templating motor skrevet i PHP vil altid være mere begrænset, så PHP selv, så hvorfor begrænse dig selv?;
  • punkt, at templating motorer forhindre fra at blande logik, der ikke hører til syn – bullshit, ingen templating motor nogensinde vil helt forhindre dig i det, og du kan undgå, at der i PHP synspunkter, også ved at flytte dele af koden til hjælpere for eksempel;
  • punkt, at PHP-skabeloner indeholder komplekse strukturer til mere komplicerede skabeloner? huh, så kan du ikke huske, hvordan grim er nogle uddrag at gøre selv simple ting, men bare ikke er implementeret i templating motor?

Installations

Projektet er tilgængelige som Composer – pakke. Alt du skal gøre for at installere det i dit projekt, er at tilføje følgende afhængighed definition til dine composer.json fil “requires” afsnit (hvis du ønsker at bruge særlig version, kan du erstatte dev-master med den ønskede begrænsning – der er i øjeblikket 0.0.1 slippe ud):

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

Efter at du skal blot indlæse ChillDev\Bundt\ViewHelpersBundle\ChillDevViewHelpersBundle bundt klasse til i din kerne.

Bemærk: dette projekt benytter PHP 5.4 funktioner.

Hjælpere

Så, hvad ChillDevViewHelpersBundle bringer til dig? Så sæt nyttige hjælpere i forbindelse med de centrale (X)HTML layout (de er meget inspireret af standard Zend Framework hjælpere, men der gennemføres en lidt anden måde).

<title> hjælper

<title> – tag helper giver dig mulighed for at stable flere afsnit, dele og manipulere det gennem din ansøgning flow, indtil der til sidst vises. Det er udgivet under $udsigt[‘title’], og i virkeligheden er blot en underklasse af ArrayObject, så du kan manipulere det frit. Derudover hjælper gennemfører setSeparator() – metode, som kan ændre lim-streng, der vil blive brugt til at sammenkæde alle elementer (som standard ):

// ekstra funktion - hjælper append() metode accepterer variabel liste af argumenter og føjer dem alle
$view['title']->setSeparator(' :: ')
    ->append('foo', 'bar', 'baz');
unset($view['title'][1]);

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

Som du kan se i den sidste linje, afsnit hjælper gennemfører __toString() magic metode, så du kan sende det direkte. Det vil udskrive alle dele af titlen sammen med vedlægge <title></title> – tags. Det er også undslipper titel dele, så du behøver ikke at bekymre dig om det.

Meget almindeligt eksempel for at tilføje titel dele kan være en paginator:

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

<meta> hjælper

Næste nyttigt helper <meta> – tag helper. Det giver dig mulighed for at angive meta-værdier for din (X)HTML-dokument, der er grupperet af nøgle-attribut navn. Tre grupper, der er indtastet ved forskellige attributter understøttes: name– attributten, property – attributten og http-equiv – attributten. Hver af disse grupper er en simpel nøgle-værdi-kort, og hjælper giver set*()get*() og unset*() metoder for hver af dem.

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

Til output, indeholdt alle meta tags, skal du blot output-en hjælper, der kan producere string repræsentation med __toString() – metode (også meget gerne title hjælper, meta hjælperen tager sig om at undslippe værdier af alle attributter – både centrale og indhold attributter):

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

Søgeord

<meta> helper konverterer alle værdier til strengen, når der vises, hvilket betyder, at du ikke behøver at gemme kun strenge – du kan gemme ethvert objekt, du ønsker, der kan konverteres til en streng. For eksempel, hjælpere kommer med pre-definerede <meta name=”keywords”/>> – tag, der er defineret som beholder af sætninger. Du kan få adgang til det med $view[‘meta’]->getMetaName(‘keywords’)  og manipulere det som ArrayObject (søgeord container bruger samme super-klasse, der title hjælper ikke, så du kan bestå af flere værdier på én gang til append() metode):

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

<link> hjælper

En anden almindelig HTML-element, der skal vises i main layout, men som regel er defineret andetsteds er <link> – element. Svarende til meta – hjælper- link helper er en beholder for alle links definitioner. Du kan definere fire parametre link (hvor de første to af dem er påkrævet):

  • $href (string) – link retning,
  • $rels (string[]) – liste rel attribut-værdier (kan være en enkelt streng, hvis der kun er én værdi),
  • $type (optional, string) – MIME-Type,
  • $media (optional, string) – medier forespørgsel.

For at tilføje et link-brug add() metode:

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

Udskrivning links fungerer på præcis samme måde som i de foregående hjælpere (link helper også undslipper alle attributter værdier):

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

XHTML Content-Type fix

XHTML helper giver Content-Type switch, der giver dig mulighed for at tjene din real XHTML programmer med application/xhtml+xml MIME-Type. Mange mennesker stadig ikke ved, at sider, der er XHTML applikationer bør ikke være tjent med text/html type (men de bør for browsere, der ikke understøtter XHTML indholdstyper).

Hvis du ønsker at bruge XHTML, hjælper du nødt til at aktivere det første i din ansøgning konfiguration:

chilldev_viewhelpers:
    xhtml: true

Men det er ikke slutningen – det vil kun gøre det muligt for hjælperen. Standard Content-Type på din side, vil stadig være text/html – det er fordi, at når du bruger Symfony du har en masse indbyggede sider som fejl-sider, web developer toolbar osv. der er ikke XHTML-kompatibel. Det er derfor, du er nødt til at kalde det hjælper eksplicit i din opfattelse. I de fleste tilfælde den bedste måde er bare at sætte det kalder på toppen af dit layout:

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

Bemærk: XHTML er meget strenge – før du skifter til det sikre, at alle dine sider indeholder gyldig og korrekt XHTML struktur.

Serializer hjælper

Sidste helper, der gennemføres i denne pakke er en wrapper til JMSSerializerBundle. Denne pakke indeholder kun en Twig udvidelse, så hvis du bruger PHP rendering kan du ikke bruge det hjælper i udsigt… ikke uden ChillDevViewHelpersBundle. Det er brug så nemt er det:

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

Det andet argument er valgfrit, default serialisering format JSON.

Konfiguration

Bortset fra handy se hjælpere, kan du også definere en masse af disse parametre, uden at røre en visning – du kan sætte de fleste af definitionerne ret i din konfigurationsfil. Men jeg vil ikke beskrive det her i detaljer, fordi det er allerede godt forklaret i konfiguration dokumentation.

Bidrag!

Dette er MIT-licenseret open-source projekt, offentliggjort på GitHub. Du behøver ikke at spørge, hvis du kan, skal du blot gøre alle de fantastiske ting, du ønsker! Fordi ikke alle bruger Twig…