1 comments 2073 views
Ez egy különösen jó kérdés! Ha ismereteim nem csalnak az 1.21-es verzió után már nem tartalmaz a Twig Autoloader-t és ez egy borzasztóan nagy hiba!
Miért?
Csupán azért, mert mint ahogy én sem, így más sem biztos, hogy használ composer-t, hogy ezeket a nyamvadt fájlokat betöltse és tudja használni a projektjében.
Kicsit csalódás részemről ez a Twig Autoloader nélkül. Azért nagyon remélem a Twiges fiúk átgondolják a dolgot, majd adnak hozzá újra egy natív loadert is a jövőben. Én úgy vélem, ha van egy szélesebb körben elterjedt script, akkor ahhoz bizony illene adni egy gyári
loadert.
Composer ide, composer oda, sokan nem használnak és rengeteg panaszt olvastam emiatt. Többek között ezért is dobtam össze ezt az Autoloader Class-t.
Bízom benne, hogy sokaknak segít majd a dolog.
Íme az Autoloader.php:
<?php /** * * Autoloader for Twig * * by Márk Borbély * www.markborbely.com * */ namespace Twig; class Autoloader { public static function register( $path ) { $composer = json_decode(file_get_contents($path . '/composer.json'), true); spl_autoload_register(function ($class) use ($path, $composer) { if (strpos($class, 'Twig') === false) return; if (!isset($composer['autoload'])) return; foreach ($composer['autoload'] as $mode => $load){ foreach ($load as $name => $dir){ if (strpos($class, $name) === 0){ if ($mode == 'psr-4'){ preg_match('#^' . addslashes($name) . '(?.*)#', $class, $match); $class_name = trim(str_replace('\\', '/', $match['classname']), '\\/'); } elseif ($mode == 'psr-0'){ preg_match('#^(? ' . addslashes($name) . '.*)#', $class, $match); $class_name = trim(str_replace('_', '/', $match['classname']), '\\/'); } $file = $path . '/' . $dir . '/' . $class_name . '.php'; if (is_file($file)){ include $file; } } } } }); } } ?>
Valamint a használata:
<?php include 'Autoloader.php'; # twig package path \Twig\Autoloader::register( 'path/to/Twig-2.x' ); $loader = new \Twig\Loader\FilesystemLoader('path/to/templates/'); $twig = new \Twig\Environment($loader, [ 'cache' => false, # disable cache ]); $twig->display('index.tpl', ['name' => 'Autoloader test']); ?>
Itt értelem szerűen az elérési útvonalat be kell helyettesíteni, így tudjuk betölteni a csomagot.
Major Tibor 2019/04/10 08:16