Scottchiefbaker/master (#1019)

* Add a PSR-4 loading script to allow Smarty to be used without Composer
authored-by: Scott Baker <scott@perturb.org>
This commit is contained in:
Simon Wisselink
2024-05-24 00:21:02 +02:00
committed by GitHub
parent 3293a873bd
commit 61db287b8f
3 changed files with 51 additions and 0 deletions

1
changelog/1017.md Normal file
View File

@ -0,0 +1 @@
- Added a PSR-4 loading script to allow Smarty to be used without Composer [#1017](https://github.com/smarty-php/smarty/pull/1017)

View File

@ -25,9 +25,17 @@ Here's how you create an instance of Smarty in your PHP scripts:
```php ```php
<?php <?php
// Instantiated via composer
require 'vendor/autoload.php'; require 'vendor/autoload.php';
use Smarty\Smarty; use Smarty\Smarty;
$smarty = new Smarty(); $smarty = new Smarty();
// or ...
// Instantiated directly
require("/path/to/smarty/libs/Smarty.class.php");
use Smarty\Smarty;
$smarty = new Smarty();
``` ```
Now that the library files are in place, it's time to set up the Smarty Now that the library files are in place, it's time to set up the Smarty

42
libs/Smarty.class.php Normal file
View File

@ -0,0 +1,42 @@
<?php
/////////////////////////////////////////////////////////////////////
// This is a stub PSR-4 loading script that gets all the pieces of //
// Smarty 5.x loaded without requiring the use of composer. It's //
// not really a 'class' file, but the name is used so we're //
// backwards compatible with previous versions of Smarty. //
// //
// Example: //
// require_once("/path/to/smarty/libs/Smarty.class.php"); //
// //
// $smarty = new Smarty\Smarty; //
// $smarty->testInstall(); //
/////////////////////////////////////////////////////////////////////
define('__SMARTY_DIR', __DIR__ . '/../src/');
// Global function declarations
require_once(__SMARTY_DIR . "/functions.php");
spl_autoload_register(function ($class) {
// Class prefix
$prefix = 'Smarty\\';
// Does the class use the namespace prefix?
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
// If not, move to the next registered autoloader
return;
}
// Hack off the prefix part
$relative_class = substr($class, $len);
// Build a path to the include file
$file = __SMARTY_DIR . str_replace('\\', '/', $relative_class) . '.php';
// If the file exists, require it
if (file_exists($file)) {
require_once($file);
}
});