mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-20 14:36:57 +00:00
192 lines
5.4 KiB
ReStructuredText
192 lines
5.4 KiB
ReStructuredText
Introduction
|
|
============
|
|
|
|
This is the documentation for Twig, the flexible, fast, and secure template
|
|
engine for PHP.
|
|
|
|
If you have any exposure to other text-based template languages, such as
|
|
Smarty, Django, or Jinja, you should feel right at home with Twig. It's both
|
|
designer and developer friendly by sticking to PHP's principles and adding
|
|
functionality useful for templating environments.
|
|
|
|
The key-features are...
|
|
|
|
* *Fast*: Twig compiles templates down to plain optimized PHP code. The
|
|
overhead compared to regular PHP code was reduced to the very minimum.
|
|
|
|
* *Secure*: Twig has a sandbox mode to evaluate untrusted template code. This
|
|
allows Twig to be used as a template language for applications where users
|
|
may modify the template design.
|
|
|
|
* *Flexible*: Twig is powered by a flexible lexer and parser. This allows the
|
|
developer to define its own custom tags and filters, and create its own DSL.
|
|
|
|
Prerequisites
|
|
-------------
|
|
|
|
Twig needs at least **PHP 5.2.4** to run.
|
|
|
|
Installation
|
|
------------
|
|
|
|
You have multiple ways to install Twig.
|
|
|
|
Installing via Composer (recommended)
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
1. Install composer in your project:
|
|
|
|
.. code-block:: bash
|
|
|
|
curl -s http://getcomposer.org/installer | php
|
|
|
|
2. Create a ``composer.json`` file in your project root:
|
|
|
|
.. code-block:: javascript
|
|
|
|
{
|
|
"require": {
|
|
"twig/twig": "1.*"
|
|
}
|
|
}
|
|
|
|
3. Install via composer
|
|
|
|
.. code-block:: bash
|
|
|
|
php composer.phar install
|
|
|
|
.. note::
|
|
If you want to learn more about Composer, the ``composer.json`` file syntax
|
|
and its usage, you can read the `online documentation`_.
|
|
|
|
Installing from the tarball release
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
1. Download the most recent tarball from the `download page`_
|
|
2. Unpack the tarball
|
|
3. Move the files somewhere in your project
|
|
|
|
Installing the development version
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
1. Install Git
|
|
2. ``git clone git://github.com/fabpot/Twig.git``
|
|
|
|
Installing the PEAR package
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
1. Install PEAR
|
|
2. ``pear channel-discover pear.twig-project.org``
|
|
3. ``pear install twig/Twig`` (or ``pear install twig/Twig-beta``)
|
|
|
|
Installing the C extension
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. versionadded:: 1.4
|
|
The C extension was added in Twig 1.4.
|
|
|
|
Twig comes with a C extension that enhances the performance of the Twig
|
|
runtime engine.
|
|
|
|
You can install it via PEAR:
|
|
|
|
1. Install PEAR
|
|
2. ``pear channel-discover pear.twig-project.org``
|
|
3. ``pear install twig/CTwig`` (or ``pear install twig/CTwig-beta``)
|
|
|
|
Or manually like any other PHP extension:
|
|
|
|
.. code-block:: bash
|
|
|
|
$ cd ext/twig
|
|
$ phpize
|
|
$ ./configure
|
|
$ make
|
|
$ make install
|
|
|
|
For Windows:
|
|
|
|
1. Setup the build environment following the `PHP documentation`_;
|
|
2. Use the ``configure --disable-all --enable-cli --enable-twig=shared``
|
|
command instead of step 14;
|
|
3. ``nmake``;
|
|
4. Copy the
|
|
``C:\php-sdk\phpdev\vcXX\x86\php-source-directory\Release_TS\php_twig.dll``
|
|
file to your PHP setup.
|
|
|
|
.. tip::
|
|
|
|
For Windows ZendServer, TS is not enabled as mentionned in `Zend Server
|
|
FAQ`_.
|
|
|
|
You have to use `configure --disable-all --disable-zts --enable-cli
|
|
--enable-twig=shared` to be able to build the twig C extension for
|
|
ZendServer.
|
|
|
|
The built DLL will be available in
|
|
C:\php-sdk\phpdev\vcXX\x86\php-source-directory\Release
|
|
|
|
Finally, enable the extension in your ``php.ini`` configuration file:
|
|
|
|
.. code-block:: ini
|
|
|
|
extension=twig.so #For Unix systems
|
|
extension=php_twig.dll #For Windows systems
|
|
|
|
And from now on, Twig will automatically compile your templates to take
|
|
advantage of the C extension. Note that this extension does not replace the
|
|
PHP code but only provides an optimized version of the
|
|
``Twig_Template::getAttribute()`` method.
|
|
|
|
Basic API Usage
|
|
---------------
|
|
|
|
This section gives you a brief introduction to the PHP API for Twig.
|
|
|
|
The first step to use Twig is to register its autoloader::
|
|
|
|
require_once '/path/to/lib/Twig/Autoloader.php';
|
|
Twig_Autoloader::register();
|
|
|
|
Replace the ``/path/to/lib/`` path with the path you used for Twig
|
|
installation.
|
|
|
|
If you have installed Twig via Composer you can take advantage of Composer's
|
|
autoload mechanism by replacing the previous snippet for::
|
|
|
|
require_once '/path/to/vendor/autoload.php';
|
|
|
|
.. note::
|
|
|
|
Twig follows the PEAR convention names for its classes, which means you
|
|
can easily integrate Twig classes loading in your own autoloader.
|
|
|
|
.. code-block:: php
|
|
|
|
$loader = new Twig_Loader_String();
|
|
$twig = new Twig_Environment($loader);
|
|
|
|
echo $twig->render('Hello {{ name }}!', array('name' => 'Fabien'));
|
|
|
|
Twig uses a loader (``Twig_Loader_String``) to locate templates, and an
|
|
environment (``Twig_Environment``) to store the configuration.
|
|
|
|
The ``render()`` method loads the template passed as a first argument and
|
|
renders it with the variables passed as a second argument.
|
|
|
|
As templates are generally stored on the filesystem, Twig also comes with a
|
|
filesystem loader::
|
|
|
|
$loader = new Twig_Loader_Filesystem('/path/to/templates');
|
|
$twig = new Twig_Environment($loader, array(
|
|
'cache' => '/path/to/compilation_cache',
|
|
));
|
|
|
|
echo $twig->render('index.html', array('name' => 'Fabien'));
|
|
|
|
.. _`download page`: https://github.com/fabpot/Twig/tags
|
|
.. _`online documentation`: http://getcomposer.org/doc
|
|
.. _`PHP documentation`: https://wiki.php.net/internals/windows/stepbystepbuild
|
|
.. _`Zend Server FAQ`: http://www.zend.com/en/products/server/faq#faqD6
|