* https://github.com/rdlowrey/Auryn. * * @author James Byrne <*****@*****.**> */ $injector = new \Auryn\Injector(); /** * Every time the type-hint of 1st argument is found inject an * instance of second argument. */ $injector->alias('Jay\\System\\Template', 'Jay\\System\\Template\\TwigRenderer'); $injector->alias('Jay\\System\\Adapter', 'Jay\\System\\Database\\PDOAdapter'); /** * Share the same instance across application */ $injector->share('Symfony\\Component\\HttpFoundation\\Request'); $injector->share('Symfony\\Component\\HttpFoundation\\Response'); /** * The below dependencies have construct parameters that are scalar * or non-object. These arguments are defined below. Some parameter * names can be prefixed with : as by default, Auryn assumes all * paramter names are classes - prefixing with : removes this behaviour. */ $injector->define('Symfony\\Component\\HttpFoundation\\Request', [$_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER]); $injector->define('PDO', ["mysql:host={$config['host']};dbname={$config['database']};charset{$config['charset']}", $config['username'], $config['password']]); // delegates $injector->delegate('Twig_Environment', function () use($injector) { $loader = new Twig_Loader_Filesystem(dirname(__DIR__) . '/src/views'); $twig = new Twig_Environment($loader); return $twig; }); return $injector;
<?php $injector = new \Auryn\Injector(); $injector->alias('Http\\Response', 'Http\\HttpResponse'); $injector->share('Http\\HttpResponse'); $injector->alias('Http\\Request', 'Http\\HttpRequest'); $injector->share('Http\\HttpRequest'); $injector->define('Http\\HttpRequest', [':get' => $_GET, ':post' => $_POST, ':cookies' => $_COOKIE, ':files' => $_FILES, ':server' => $_SERVER]); $injector->alias('TechTest\\People\\People', 'TechTest\\People\\JsonPeople'); $injector->share('TechTest\\People\\JsonPeople'); $injector->alias('TechTest\\Csrf\\Csrf', 'TechTest\\Csrf\\SessionCsrf'); $injector->share('TechTest\\Csrf\\SessionCsrf'); $injector->alias('TechTest\\Template\\Renderer', 'TechTest\\Template\\PhpRenderer'); return $injector;
public function setUp() { $cacheFactory = function () { $cacheDriver = new \Stash\Driver\FileSystem(); return new \Stash\Pool($cacheDriver); }; $injector = new Auryn\Injector(); $injector->delegate('Pool', $cacheFactory); $injector->define('APG\\Fleet\\Fleet', [':airline' => 'AFA', ':path' => 'tests/test_files']); $this->fleet = $injector->make('APG\\Fleet\\Fleet'); $this->aircraftCollection = new \APG\Fleet\Collections\AircraftCollection(); }
<?php $injector = new \Auryn\Injector(); //注入http处理类 $injector->alias('Http\\Request', 'Http\\HttpRequest'); $injector->share('Http\\HttpRequest'); $injector->define('Http\\HttpRequest', [':get' => $_GET, ':post' => $_POST, ':cookies' => $_COOKIE, ':files' => $_FILES, ':server' => $_SERVER]); $injector->alias('Http\\Response', 'Http\\HttpResponse'); $injector->share('Http\\HttpResponse'); //注入模板引擎类(MustacheRenderer) $injector->alias('My\\Template\\Renderer', 'My\\Template\\MustacheRenderer'); $injector->define('Mustache_Engine', [':options' => ['loader' => new Mustache_Loader_FilesystemLoader(dirname(__DIR__) . '/templates', ['extension' => '.html'])]]); //注入filepagereader类 $injector->define('My\\Page\\FilePageReader', [':pageFolder' => __DIR__ . '/../pages']); $injector->alias('My\\Page\\PageReader', 'My\\Page\\FilePageReader'); $injector->share('My\\Page\\FilePageReader'); //注入模板引擎类(Twig) $injector->alias('My\\Template\\Renderer', 'My\\Template\\TwigRenderer'); $injector->delegate('Twig_Environment', function () use($injector) { $loader = new Twig_Loader_Filesystem(dirname(__DIR__) . '/templates'); $twig = new Twig_Environment($loader); return $twig; }); //依赖于renderer $injector->alias('My\\Template\\FrontendRenderer', 'My\\Template\\FrontendTwigRenderer'); //menu interface $injector->alias('My\\Menu\\MenuReader', 'My\\Menu\\ArrayMenuReader'); $injector->share('My\\Menu\\ArrayMenuReader'); $injector->alias('My\\User\\user', 'My\\User\\adminUser'); $injector->share('My\\User\\adminUser'); return $injector;
<?php $injector = new \Auryn\Injector(); // Http request and response $injector->share('Symfony\\Component\\HttpFoundation\\Request'); $injector->define('Symfony\\Component\\HttpFoundation\\Request', [':query' => $_GET, ':request' => $_POST, ':attributes' => array(), ':cookies' => $_COOKIE, ':files' => $_FILES, ':server' => $_SERVER]); $injector->share('Symfony\\Component\\HttpFoundation\\Response'); // Templating engine $injector->alias('Pics\\Template\\Renderer', 'Pics\\Template\\MustacheRenderer'); $injector->define('Mustache_Engine', [':options' => ['cache' => '/tmp/cache/mustache', 'loader' => new Mustache_Loader_FilesystemLoader(dirname(__DIR__) . '/templates', ['extension' => '.html'])]]); // Database $injector->share('PDO'); $injector->define('PDO', [':dsn' => $config['database']['dsn'], ':username' => $config['database']['username'], ':password' => $config['database']['password'], ':options' => array(\PDO::ATTR_PERSISTENT => true)]); $injector->alias('Pics\\Repositories\\PicRepositoryInterface', 'Pics\\Repositories\\PSQLPicRepository'); $injector->alias('Pics\\Repositories\\CommentRepositoryInterface', 'Pics\\Repositories\\PSQLCommentRepository'); // Memcached $injector->share('Memcached'); // File storage $injector->share('Pics\\Storage\\AzureFileStorage'); $injector->define('Pics\\Storage\\AzureFileStorage', [':connectionString' => $config['azureConnString'], ':container' => $config['azureBlobContainer'], ':url' => $config['azureCDNUrl']]); $injector->alias('Pics\\Storage\\FileStorageInterface', 'Pics\\Storage\\AzureFileStorage'); return $injector;
<?php // di $injector = new \Auryn\Injector(); // request and response $injector->alias('Http\\Request', 'Http\\HttpRequest'); $injector->share('Http\\HttpRequest'); $injector->define('Http\\HttpRequest', [':get' => $_GET, ':post' => $_POST, ':cookies' => $_COOKIE, ':files' => $_FILES, ':server' => $_SERVER]); $injector->alias('Http\\Response', 'Http\\HttpResponse'); $injector->share('Http\\HttpResponse'); // session $injector->alias('App\\Session\\Session', 'App\\Session\\NativeSession'); $injector->share('App\\Session\\Session'); // blade //$injector->alias('duncan3dc\Laravel\BladeInstance', 'duncan3dc\Laravel\BladeInstance'); //$injector->share('duncan3dc\Laravel\BladeInstance'); //$injector->define('duncan3dc\Laravel\BladeInstance', [ // ':path' => getenv('VIEWS_DIRECTORY'), // ':cache' => getenv('CACHE_DIRECTORY') //]); // our renderer $injector->alias('App\\Renderers\\BladeRenderer', 'App\\Renderers\\BladeRenderer'); $injector->share('App\\Renderers\\BladeRenderer'); $injector->define('App\\Renderers\\BladeRenderer', [':path' => getenv('VIEWS_DIRECTORY'), ':cache' => getenv('CACHE_DIRECTORY')]); // monolog $injector->define('Monolog\\Logger', [':name' => 'applogger']); return $injector;
<?php use Symfony\Component\HttpFoundation\Request; $injector = new \Auryn\Injector(); $request = Request::createFromGlobals(); $injector->share($request); $twig = new \Twig_Environment(new \Twig_Loader_Filesystem('../resources/views/'), ['cache' => '../storage/twig-cache/']); $injector->share($twig); $injector->define('Jehaby\\Homepage\\Page\\FilePageReader', [':pageFolder' => __DIR__ . '/../resources/pages/']); $injector->alias('Jehaby\\Homepage\\Page\\PageReader', 'Jehaby\\Homepage\\Page\\FilePageReader'); $injector->share('Jehaby\\Homepage\\Page\\FilePageReader'); return $injector;
<?php $injector = new \Auryn\Injector(); $injector->alias('Response', 'Symfony\\Component\\HttpFoundation\\Response'); $injector->share('Symfony\\Component\\HttpFoundation\\Response'); $injector->alias('Request', 'Symfony\\Component\\HttpFoundation\\Request'); $injector->share('Symfony\\Component\\HttpFoundation\\Request'); $injector->define('Symfony\\Component\\HttpFoundation\\Request', [':query' => $_GET, ':request' => $_POST, ':attributes' => array(), ':cookies' => $_COOKIE, ':files' => $_FILES, ':server' => $_SERVER]); $injector->alias('DiffProvider', 'Karadiff\\Diff\\Providers\\DiffProvider'); $injector->share('Karadiff\\Diff\\Providers\\DiffProvider'); return $injector;
use Symfony\Component\HttpFoundation\Session\Session; $config = (include_once __DIR__ . '/../config/config.php'); $route = (include_once __DIR__ . '/../config/route.php'); $baseDir = $config['baseDir']; $injector = new Auryn\Injector(); // global parameter $injector->defineParam('config', $config); // route dispatcher $injector->prepare('Dispatcher', function ($obj, $injector) { $obj->injector = $injector; }); // request $request = Request::createFromGlobals(); $injector->share($request); // router $injector->define('AltoRouter', [':routes' => $route, ':basePath' => rtrim($baseDir, '/')]); // template engine $injector->alias('Template\\Renderer', 'Template\\PlatesRenderer'); $injector->define('League\\Plates\\Engine', [':directory' => __DIR__ . '/views/' . $config['theme']]); $injector->alias('League\\Plates\\Extension\\ExtensionInterface', 'Template\\MyPlatesExtension'); $injector->define('Template\\MyPlatesExtension', [':baseDir' => $baseDir]); // session and flash $sessionFactory = function () { $session = new Session(null, null, new Lib\MyFlash()); $session->setName('RakitanFramework'); $session->start(); return $session; }; $injector->delegate('Symfony\\Component\\HttpFoundation\\Session\\Session', $sessionFactory); $injector->share('Symfony\\Component\\HttpFoundation\\Session\\Session'); // authentication class
<?php $injector = new Auryn\Injector(); $injector->share('Framework\\Http\\Request'); $injector->define('Framework\\Http\\Request', [':query' => $_GET, ':request' => $_POST, '' => array(), ':server' => $_SERVER, ':files' => $_FILES, ':cookies' => $_COOKIE]); $injector->share('Framework\\Http\\Response'); $injector->define('League\\Plates\\Engine', [':directory' => __DIR__ . '/../templates']); $injector->alias('Framework\\Templates\\Renderer', 'Framework\\Templates\\PlatesRenderer'); $injector->share('Framework\\Templates\\PlatesRenderer'); $injector->define('Framework\\Page\\FilePageReader', [':pageFolder' => __DIR__ . '/../pages']); $injector->alias('Framework\\Page\\PageReader', 'Framework\\Page\\FilePageReader'); $injector->share('Framework\\Page\\FilePageReader'); $injector->alias('Framework\\Templates\\FrontendRenderer', 'Framework\\Templates\\FrontendPlatesRenderer'); $injector->share('Framework\\Templates\\FrontendPlatesRenderer'); return $injector;
<?php require_once "vendor/autoload.php"; $cacheFactory = function () { $cacheDriver = new \Stash\Driver\FileSystem(); return new \Stash\Pool($cacheDriver); }; $injector = new Auryn\Injector(); $injector->delegate('Pool', $cacheFactory); $injector->define('APG\\Fleet\\Fleet', [':airline' => 'AFA', ':path' => 'downloads/fleet/standard/']); $fleet = $injector->make('APG\\Fleet\\Fleet');
<?php $injector = new \Auryn\Injector(); $connectionParams = ['driver' => 'pdo_sqlite', 'path' => \Jehaby\Exesise\Config::getDir() . '/storage/database.sqlite']; $conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams); $injector->share($conn); $injector->alias(\Symfony\Component\Console\Output\OutputInterface::class, \Symfony\Component\Console\Output\ConsoleOutput::class); $injector->define(\Monolog\Logger::class, ['defaultLogger', [new \Monolog\Handler\StreamHandler('storage/default.log')]]); $injector->alias(\Psr\Log\LoggerInterface::class, \Monolog\Logger::class); $injector->share(\Monolog\Logger::class);
<?php // Require .env for db config. if (!is_file($env = __DIR__ . '/../.env')) { throw new RuntimeException('Please create a .env file before starting the app!'); } require __DIR__ . '/../vendor/autoload.php'; //Load ENV vars. $env = (new josegonzalez\Dotenv\Loader($env))->parse()->toArray(); //Create Injector for PDO db connection. $injector = new \Auryn\Injector(); $injector->define('PDO', [':dsn' => 'mysql:host=localhost;dbname=' . $env['db_database'], ':username' => $env['db_username'], ':passwd' => $env['db_password']]); $injector->share('PDO'); $injector->share('FluentPDO'); $app = Spark\Application::boot($injector); $app->setMiddleware(['Relay\\Middleware\\ResponseSender', 'Spark\\Handler\\ExceptionHandler', 'Spark\\Handler\\RouteHandler', 'Spark\\Handler\\ActionHandler']); $app->addRoutes(function (Spark\Router $r) { $r->get('/', 'Spark\\Project\\Domain\\APIDocs'); // TODO: Implement a login/logout and pass around tokens instead of just the user's ID every call. /* * Notes on Auth Layer: * This API currently *only* covers the User Stories listed in the assignment * As such it does not currently handle any validation of the user being who they claim to be. * It does verify that the userId (employee or manager) is valid for the type of request issued. * The current userId field should be replaced with a validated token when validation is added. * I did not add an authentication layer, as the user stories do not reference how the login would occur * We might do oauth or direct API via a POST to create a login token, etc. */ //Employees can only GET (read) information. $r->get('/myshifts[/{employeeId}]', 'Spark\\Project\\Domain\\Employee\\Shifts'); $r->get('/mycoworkers[/{employeeId}]', 'Spark\\Project\\Domain\\Employee\\Coworkers');
*/ require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/paths.php'; /** * ------------------------------- * | DEPENDENCY INJECTOR * ------------------------------- */ $injector = new Auryn\Injector(); /** * ------------------------------- * | SETUP CONFIG * ------------------------------- */ $injector->share(YamlLoader::class); $injector->define(YamlLoader::class, [':directory' => PATH['CONFIG']]); $injector->define(Config::class, ['loader' => YamlLoader::class]); /** @var Config $config */ $config = $injector->make(Config::class); /** * ------------------------------- * | SETUP TWIG * ------------------------------- */ /** @var \G4MR\Configs\Item $twig_options */ $twig_options = $config->getItem('twig'); $injector->share(Twig_Loader_Filesystem::class); $injector->define(Twig_Loader_Filesystem::class, [':paths' => PATH['TEMPLATE']]); $injector->share(Twig_Environment::class); $injector->define(Twig_Environment::class, ['loader' => Twig_Loader_Filesystem::class, ':options' => ['autoescape' => $twig_options->get('autoescape', false), 'strict_variables' => $twig_options->get('strict_variables', false)]]); /**
<?php $injector = new \Auryn\Injector(); $injector->alias("Http\\Request", "Http\\HttpRequest"); $injector->alias("Http\\Response", "Http\\HttpResponse"); $injector->share("Http\\Request"); $injector->share("Http\\Response"); $injector->share("Pool\\Model\\Params"); $injector->share("View\\Site"); $injector->define("PDO", [":dsn" => "sqlite:" . __DIR__ . "/../data/pooldb.db", ":options" => [PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]]); $injector->define("Http\\Request", [":get" => $_GET, ":post" => $_POST, ":files" => $_FILES, ":cookies" => $_COOKIE, ":server" => $_SERVER]); $injector->alias("Templating\\Renderer", "Templating\\PhpTemplatesRenderer"); $injector->share("Templating\\Renderer"); $injector->define("Storage\\FileLoader", [":root" => __DIR__ . "/../templates", ":extension" => "php"]); $injector->define("BasicWebsite\\Pages\\FilePageReader", [":pageFolder" => __DIR__ . "/../pages"]); $injector->alias("BasicWebsite\\Pages\\PageReader", "BasicWebsite\\Pages\\FilePageReader"); $injector->share("BasicWebsite\\Pages\\PageReader"); $injector->alias("BasicWebsite\\Menu\\MenuReader", "BasicWebsite\\Menu\\ArrayMenuReader"); $injector->share("BasicWebsite\\Menu\\MenuReader"); return $injector;
<?php /** * Returns $injector */ $config = (require __DIR__ . '/config.php'); $injector = new Auryn\Injector(); $injector->define('SQLite3', [':filename' => __DIR__ . '/storage/sqlite.db', ':flags' => \SQLITE3_OPEN_READWRITE | \SQLITE3_OPEN_CREATE, ':encryption_key' => $config['ENCRYPTION_KEY']]); $injector->share('SQLite3'); return $injector;
<?php namespace Src; $injector = new \Auryn\Injector(); $injector->alias('Http\\Request', 'Http\\HttpRequest'); $injector->share('Http\\HttpRequest'); $injector->define('Http\\HttpRequest', [':get' => $_GET, ':post' => $_POST, ':cookies' => $_COOKIE, ':files' => $_FILES, ':server' => $_SERVER]); $injector->alias('Http\\Response', 'Http\\HttpResponse'); $injector->share('Http\\HttpResponse'); $injector->alias('Src\\Template\\Renderer', 'Src\\Template\\MustacheRenderer'); $injector->define('Mustache_Engine', [':options' => ['loader' => new \Mustache_Loader_FilesystemLoader(dirname(__DIR__) . '/src/template/views', ['extension' => '.html'])]]); return $injector; /** ********** SHARE ********* * Coming soon */ /** ********** ALIAS ********* * Just like define, but instead of injecting raw data through the constructor, we create or * add an instance of a class (object), this is called dependency injecton * @example see below */ /** * interface Engine {} * class V8 implements Engine {} * class V6 implements Engine {} * class Car { * private $engine; * public function __construct(Engine $engine) { * $this->engine = $engine;
<?php // di $injector = new \Auryn\Injector(); $signer = new Kunststube\CSRFP\SignatureGenerator(getenv('CSRF_SECRET')); $injector->share($signer); $blade = new duncan3dc\Laravel\BladeInstance(getenv('VIEWS_DIRECTORY'), getenv('CACHE_DIRECTORY')); $injector->share($blade); $injector->make('Acme\\Http\\Request'); $injector->make('Acme\\Http\\Response'); $injector->make('Acme\\Http\\Session'); $injector->share('Acme\\Http\\Request'); $injector->share('Acme\\Http\\Response'); $injector->share('Acme\\Http\\Session'); $injector->define('Acme\\Auth\\LoggedIn', ['session' => 'Acme\\Http\\Session']); $injector->make('Acme\\Auth\\LoggedIn'); return $injector;