Sadece PHP kullanarak üzerinde çiftleşmiş motorları gerçek avantajları nelerdir?

7 Cevap php

Ben görünüm dosyaları için sadece PHP kullanarak benim web uygulamaları geliştirmek ve ben herhangi bir şekilde sınırlı hissetmiyorum, ama ben "dış" çiftleşmiş motorları savunan geliştiriciler tutarlı bir numara var duydum. Yani motor şablonu basit bir PHP yoksun bu ne sunuyorsunuz?

Ben pratik şeyler arıyorum, o yüzden aşağıdaki hariç:

  • bebek bakımı kötü geliştiriciler (yani sunu içine kod karıştırmak değil zorlar çünkü bir şablon motoru kullanmak)
  • sözdizimi kısalık (Ben kıvırcık parantez kullanarak, <?php echo $stuff; ?> gibi şeyler için Vim eşlemeler herhangi bir fark olmaz)
  • olmayan programcılar için kolay sözdizimi (o bir sorun değil bu yüzden ben yalnız geliştirmek)

7 Cevap

New Syntax


Bazı insanlar alışkanlık kabul ediyorum, ama ben "için ... else" dal kullanarak oldum yana sağ hissediyor. Bu çok olmayabilir, ama bu biraz temiz benim şablonları tutar.

{% for row in articles %}
 Display articles ...
{% else %}
 No articles.
{% endfor %}

Automatic Escaping


Sen motor şablonu otomatik olarak herhangi bir çıkış kaçış olabilir. Artık her yerde ... htmlspecialchars tekrarlamak zorunda gibi bu harika. Dal güzel yapar.

{% autoescape on %}
  Everything will be automatically escaped in this block
{% endautoescape %}

Template Inheritance


Sevdiğim diğer bir özelliği baz şablonlar genişletmek için yeteneğidir. Burada temel bir örnek

base.html template

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  {% block head %}
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}{% endblock %} - My Webpage</title>
  {% endblock %}
</head>
<body>
  <div id="content">{% block content %}{% endblock %}</div>
  <div id="footer">
    {% block footer %}
      &copy; Copyright 2009 by <a href="http://domain.invalid/">you</a>.
    {% endblock %}
  </div>
</body>

child.html template

{% extends "base.html" %}

{% block title %}Index{% endblock %}
{% block head %}
  {% parent %}
  <style type="text/css">
    .important { color: #336699; }
  </style>
{% endblock %}
{% block content %}
  <h1>Index</h1>
  <p class="important">
    Welcome on my awesome homepage.
  </p>
{% endblock %}

Bir çocuk şablon vb sayfa belirli stilleri, içerik, için blokları kılabilirsiniz ... Ayrıca baskın sırasında bunu tüm kaybetmek yok bu yüzden anne içeriğini kapmak {% ebeveyn%} kullanımını fark edebilirsiniz.

Sana Twig bir gitmek vermek öneririz. Son derece yararlı.

Separation of concerns.

Eğer düz ol 'PHP kullanarak eğer veri sunumu mutlaka bir veri ekran ayrılmış, ama değil - bir MVC / MTV yaklaşım kullanıldığında şeyler Bu tür standart olarak geliyor.

Bir şablon motoru kullanarak kolay görüntülendiği nasıl itibaren görüntülenen ne dışarı ayırmak için yapar.

Bunu iyi bir geliştirici zaten bunu yapmak gerektiğini, çünkü "çocuk bakıcılığı kötü geliştiriciler" altında düşüyor, ama benim görüşüme göre, bir şablon motor çok iyi geliştiriciler için daha kolay hale getirdiğini iddia varsayalım.

Görünümler arasında kolay geçiş

Web mevcut durumu ile, farklı biçimlerde benim bilgileri vermeniz gerekiyor:

  • Bir statik html sayfası
  • Başka bir HTML sayfası üzerinde bir dinamik olarak yüklenen görünüm
  • Verilerin bir JSON nesnesi
  • Benim flaş kısmen kullanılan verilerin bir XML feed,

Bu formatları için bilgi eşit olabilir, sadece görünümü farklıdır. Şablon motoru çeşit kullanarak, ben hızlı bir şekilde bu görünümler arasında geçiş yapabilirsiniz.

Şablonları ile de tasarımcılara sunum resposibilitys devredebilir. Tasarımcılar şablonları oluşturabilir ve geliştiriciler mantığı çalışabilir. Bu tutarlı sunum tutmak için de daha kolaydır.

Örneğin, mantık ayrılmış tasarım tutarken farklı şablonlar ve düzenleri bir çok özelleştirilebilir uygulamalar geliştirmek istiyorum Farklı müşteriler için, bir şablon sistemi kullanarak düşünebilirsiniz.

Uygulamalarınızı sadece one şablonu ve asla düzenini çok değiştirmek gerekiyorsa, o zaman ne için çalışır sopa ile, neden değiştirmek? :)

Sizin olmayan cevaplar gerçek cevaplar gibi görünüyorsun ama çok küçümseyen bir şekilde ifade edilmiş. Örneğin:

babysitting bad developers (i.e. use a template engine because it forces you to not mix code into presentation)

Ben bu Rule of Least Power bir uygulama çağırır. Bu şablon çok daha yararlı tüm kullanıcılar için değil, sadece "kötü geliştiriciler" yapar.

Kısıtlamalar programlama dilleri ne yapmak vardır. PHP bir inline-derleme özelliğine sahip değildir, ve Rasmus tüm "bebekler" olarak düşündüm, çünkü öyle değil.

Ben sandboxing gerektiğinde kendimi çiftleşmiş motorlarını kullanarak bulabilirsiniz. Örneğin, bir ev sahipliği CMS düzenleme şablonları kullanıcıların izin.