summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Scheller <igor.scheller@igorshp.de>2017-09-19 14:50:20 +0200
committerIgor Scheller <igor.scheller@igorshp.de>2017-09-19 14:50:46 +0200
commit0ac981876432ff8f7f76ffee8c5102b633d760d4 (patch)
tree2d1bbfe85a74260ac937edd3da744ed84004256d
parent8c81adc8e83969e90b4c54daf4a396b1094134ff (diff)
Added Application
-rw-r--r--includes/engelsystem_provider.php19
-rw-r--r--src/Application.php25
-rw-r--r--src/Container/Container.php35
-rw-r--r--src/helpers.php8
4 files changed, 60 insertions, 27 deletions
diff --git a/includes/engelsystem_provider.php b/includes/engelsystem_provider.php
index f3c161a6..e10fdba0 100644
--- a/includes/engelsystem_provider.php
+++ b/includes/engelsystem_provider.php
@@ -1,13 +1,12 @@
<?php
+use Engelsystem\Application;
use Engelsystem\Config\Config;
-use Engelsystem\Container\Container;
use Engelsystem\Database\Db;
use Engelsystem\Exceptions\Handler as ExceptionHandler;
use Engelsystem\Http\Request;
use Engelsystem\Renderer\HtmlEngine;
use Engelsystem\Renderer\Renderer;
-use Psr\Container\ContainerInterface;
use Symfony\Component\HttpFoundation\Session\Session;
/**
@@ -18,18 +17,16 @@ require_once __DIR__ . '/autoload.php';
/**
- * Initialize the container
+ * Initialize the application
*/
-$container = Container::getInstance();
-$container->instance('container', $container);
-$container->instance(ContainerInterface::class, $container);
+$app = Application::getInstance();
/**
* Load configuration
*/
$config = new Config();
-$container->instance('config', $config);
+$app->instance('config', $config);
$config->set(require __DIR__ . '/../config/config.default.php');
if (file_exists(__DIR__ . '/../config/config.php')) {
@@ -48,7 +45,7 @@ date_default_timezone_set($config->get('timezone'));
* @var Request $request
*/
$request = Request::createFromGlobals();
-$container->instance('request', $request);
+$app->instance('request', $request);
/**
@@ -64,7 +61,7 @@ if ($config->get('maintenance')) {
* Initialize renderer
*/
$renderer = new Renderer();
-$container->instance('renderer', $renderer);
+$app->instance('renderer', $renderer);
$renderer->addRenderer(new HtmlEngine());
@@ -72,7 +69,7 @@ $renderer->addRenderer(new HtmlEngine());
* Register error handler
*/
$errorHandler = new ExceptionHandler();
-$container->instance('error.handler', $errorHandler);
+$app->instance('error.handler', $errorHandler);
if (config('environment') == 'development') {
$errorHandler->setEnvironment(ExceptionHandler::ENV_DEVELOPMENT);
ini_set('display_errors', true);
@@ -184,7 +181,7 @@ foreach ($includeFiles as $file) {
* Init application
*/
$session = new Session();
-$container->instance('session', $session);
+$app->instance('session', $session);
$session->start();
$request->setSession($session);
diff --git a/src/Application.php b/src/Application.php
new file mode 100644
index 00000000..674b3869
--- /dev/null
+++ b/src/Application.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Engelsystem;
+
+use Engelsystem\Container\Container;
+use Psr\Container\ContainerInterface;
+
+class Application extends Container
+{
+ public function __construct()
+ {
+ $this->registerBaseBindings();
+ }
+
+ protected function registerBaseBindings()
+ {
+ self::setInstance($this);
+ Container::setInstance($this);
+ $this->instance('app', $this);
+ $this->instance('container', $this);
+ $this->instance(Container::class, $this);
+ $this->instance(Application::class, $this);
+ $this->instance(ContainerInterface::class, $this);
+ }
+}
diff --git a/src/Container/Container.php b/src/Container/Container.php
index df2f92fe..9af5c1e6 100644
--- a/src/Container/Container.php
+++ b/src/Container/Container.php
@@ -49,6 +49,17 @@ class Container implements ContainerInterface
*/
public function instance($abstract, $instance)
{
+ $this->singleton($abstract, $instance);
+ }
+
+ /**
+ * Register a shared entry as singleton in the container
+ *
+ * @param string $abstract
+ * @param mixed $instance
+ */
+ public function singleton($abstract, $instance)
+ {
$this->instances[$abstract] = $instance;
}
@@ -69,9 +80,20 @@ class Container implements ContainerInterface
}
/**
+ * Resolve the requested object
+ *
+ * @param string $abstract
+ * @return mixed
+ */
+ protected function resolve($abstract)
+ {
+ return $this->instances[$abstract];
+ }
+
+ /**
* Get the globally available instance of the container
*
- * @return Container
+ * @return self
*/
public static function getInstance()
{
@@ -91,15 +113,4 @@ class Container implements ContainerInterface
{
static::$instance = $container;
}
-
- /**
- * Resolve the requested object
- *
- * @param string $abstract
- * @return mixed
- */
- protected function resolve($abstract)
- {
- return $this->instances[$abstract];
- }
}
diff --git a/src/helpers.php b/src/helpers.php
index 733b902d..b942068f 100644
--- a/src/helpers.php
+++ b/src/helpers.php
@@ -1,15 +1,15 @@
<?php
// Some useful functions
+use Engelsystem\Application;
use Engelsystem\Config\Config;
-use Engelsystem\Container\Container;
use Engelsystem\Http\Request;
use Engelsystem\Renderer\Renderer;
use Engelsystem\Routing\UrlGenerator;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
/**
- * Get the global container instance
+ * Get the global app instance
*
* @param string $id
* @return mixed
@@ -17,10 +17,10 @@ use Symfony\Component\HttpFoundation\Session\SessionInterface;
function app($id = null)
{
if (is_null($id)) {
- return Container::getInstance();
+ return Application::getInstance();
}
- return Container::getInstance()->get($id);
+ return Application::getInstance()->get($id);
}
/**