Me gustaría instalar twig para un proyecto, pero no tengo acceso a la línea de comandos del servidor. Sólo puedo subir archivos a través de ftp. Esto significaría que tengo que configurar twig lib manualmente, es decir, crear el archivo Autoload.php yo mismo. He buscado a fondo pero la información sobre este tema es escasa. Probé la siguiente carga automática "prestada" de un proyecto diferente, pero esto no produce una configuración funcional.
<?php /* * This file is part of Twig. * * (c) 2009 Fabien Potencier * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ /** * Autoloads Twig classes. * * @author Fabien Potencier <fabien@symfony.com> */ class Twig_Autoloader { /** * Registers Twig_Autoloader as an SPL autoloader. * * @param bool $prepend Whether to prepend the autoloader or not. */ public static function register($prepend = false) { if (version_compare(phpversion(), '5.3.0', '>=')) { spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend); } else { spl_autoload_register(array(__CLASS__, 'autoload')); } } /** * Handles autoloading of classes. * * @param string $class A class name. */ public static function autoload($class) { if (0 !== strpos($class, 'Twig')) { return; } if (is_file($file = dirname(__FILE__).'/../'.str_replace(array('_', "\0"), array('/', ''), $class).'.php')) { require $file; } } }Cualquier ayuda sería apreciada.
Twig-2.x/src a Twig-2.x/TwigEjemplo de estructura de directorio:
Appdir/ Appdir/Twig-2.x/ Appdir/Twig-2.x/Twig/ <- this is the original src dir renamed to Twig Appdir/templates/ Appdir/templates/index.html Appdir/cache/ Appdir/index.phpCódigo "index.php":
<?php #ini_set('display_errors',1); # uncomment if you need debugging spl_autoload_register(function ($classname) { $dirs = array ( './Twig-2.x/' #./path/to/dir_where_src_renamed_to_Twig_is_in ); foreach ($dirs as $dir) { $filename = $dir . str_replace('\\', '/', $classname) .'.php'; if (file_exists($filename)) { require_once $filename; break; } } }); $loader = new \Twig\Loader\FilesystemLoader('templates'); $twig = new \Twig\Environment($loader, [ 'cache' => 'cache', ]); echo $twig->render('index.html', ['name' => 'Carlos']); ?>Código "index.html":
<h1>Hello {{ name }}!</h1>Si realmente necesita cargar Twig sin Composer, puede usar esto: https://gist.github.com/sarciszewski/b6cd3776fbd20acaf26b
Recomiendo configurar Composer en su entorno de desarrollo local. (Puede descargarlo desde https://getcomposer.org/ ) Instale twig con Composer.
composer require twig/twig:~2.0Luego incluya el autocargador en su proyecto:
require_once 'vendor/autoload.php';Puede trabajar localmente y, cuando el proyecto esté listo, implementarlo en su servidor con el directorio del proveedor, que contiene los paquetes instalados. No necesita compositor en su servidor.
Después de estudiar el enlace proporcionado por András, me di cuenta de que la clave no es el mecanismo de carga, sino el hecho de que "autoload.php" parece faltar. Luego descubrí que la versión de Twig que estaba usando era de hecho una versión 2.X, que requiere al menos PHP 7. Como estoy trabajando con 5.4, esto no funcionaría, obviamente. Afortunadamente, la última versión 1.X de lib proporciona un autoload.php, por lo que a partir de ahí todo funcionó bien.