0%

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.

  • 2024
  •  
  • profile

    Major Tibor 2019/04/10 08:16 reply

    Köszi a bejegyzést, nagyon hasznos. Csomó bogarászástól mentettél meg!!!

Article

Twig 2.x Autoloader Composer nélkül?