You are browsing the unmaintained documentation for old Nette 2.1. See documentation for current Nette.

Systémový kontejner

Příklad základního systémového kontejneru.

<?php

/**
 * @property Nette\Application\Application $application
 * @property Nette\Caching\Storages\FileStorage $cacheStorage
 * @property Nette\DI\Container $container
 * @property Nette\Http\Request $httpRequest
 * @property Nette\Http\Response $httpResponse
 * @property Nette\DI\Extensions\NetteAccessor $nette
 * @property Nette\Application\IRouter $router
 * @property Nette\Http\Session $session
 * @property Nette\Security\User $user
 */
class SystemContainer extends Nette\DI\Container
{

    public function __construct()
    {
        parent::__construct(array(
            'appDir' => '...',
            'wwwDir' => '...',
            'debugMode' => TRUE,
            'productionMode' => FALSE,
            'environment' => 'development',
            'consoleMode' => FALSE,
            'tempDir' => '...',
        ));
    }


    /**
     * @return App\Model\UserManager
     */
    public function createService__22_App_Model_UserManager()
    {
        $service = new App\Model\UserManager($this->getService('nette.database.default.context'));
        return $service;
    }


    /**
     * @return App\RouterFactory
     */
    public function createService__23_App_RouterFactory()
    {
        $service = new App\RouterFactory;
        return $service;
    }


    /**
     * @return Nette\Application\Application
     */
    public function createServiceApplication()
    {
        $service = new Nette\Application\Application(
            $this->getService('nette.presenterFactory'),
            $this->getService('router'),
            $this->getService('httpRequest'),
            $this->getService('httpResponse')
        );
        $service->catchExceptions = FALSE;
        $service->errorPresenter = 'Error';
        Nette\Application\Diagnostics\RoutingPanel::initializePanel($service);
        Nette\Diagnostics\Debugger::getBar()->addPanel(new Nette\Application\Diagnostics\RoutingPanel(
            $this->getService('router'), $this->getService('httpRequest'), $this->getService('nette.presenterFactory')
        ));
        return $service;
    }


    /**
     * @return Nette\Caching\Storages\FileStorage
     */
    public function createServiceCacheStorage()
    {
        $service = new Nette\Caching\Storages\FileStorage('...', $this->getService('nette.cacheJournal'));
        return $service;
    }


    /**
     * @return Nette\DI\Container
     */
    public function createServiceContainer()
    {
        return $this;
    }


    /**
     * @return Nette\Http\Request
     */
    public function createServiceHttpRequest()
    {
        $service = $this->getService('nette.httpRequestFactory')->createHttpRequest();
        if (!$service instanceof Nette\Http\Request) {
            throw new Nette\UnexpectedValueException('Unable to create service \'httpRequest\', value returned by factory is not Nette\\Http\\Request type.');
        }
        return $service;
    }


    /**
     * @return Nette\Http\Response
     */
    public function createServiceHttpResponse()
    {
        $service = new Nette\Http\Response;
        return $service;
    }


    /**
     * @return Nette\DI\Extensions\NetteAccessor
     */
    public function createServiceNette()
    {
        $service = new Nette\DI\Extensions\NetteAccessor($this);
        return $service;
    }


    /**
     * @return Nette\Caching\Storages\FileJournal
     */
    public function createServiceNette__cacheJournal()
    {
        $service = new Nette\Caching\Storages\FileJournal('...');
        return $service;
    }


    /**
     * @return Nette\Database\Connection
     */
    public function createServiceNette__database__default()
    {
        $service = new Nette\Database\Connection('mysql:host=127.0.0.1;dbname=test', NULL, NULL, array('lazy' => TRUE));
        $service->setContext(new Nette\Database\Context(
            $service,
            new Nette\Database\Reflection\DiscoveredReflection($service, $this->getService('cacheStorage')), $this->getService('cacheStorage')
        ));
        Nette\Diagnostics\Debugger::getBlueScreen()->addPanel('Nette\\Database\\Diagnostics\\ConnectionPanel::renderException');
        Nette\Database\Helpers::createDebugPanel($service, TRUE, 'default');
        return $service;
    }


    /**
     * @return Nette\Database\Context
     */
    public function createServiceNette__database__default__context()
    {
        $service = $this->getService('nette.database.default')->getContext();
        if (!$service instanceof Nette\Database\Context) {
            throw new Nette\UnexpectedValueException('Unable to create service \'nette.database.default.context\', value returned by factory is not Nette\\Database\\Context type.');
        }
        return $service;
    }


    /**
     * @return Nette\Http\Context
     */
    public function createServiceNette__httpContext()
    {
        $service = new Nette\Http\Context($this->getService('httpRequest'), $this->getService('httpResponse'));
        return $service;
    }


    /**
     * @return Nette\Http\RequestFactory
     */
    public function createServiceNette__httpRequestFactory()
    {
        $service = new Nette\Http\RequestFactory;
        $service->setProxy(array());
        return $service;
    }


    /**
     * @return Nette\Latte\Engine
     */
    public function createServiceNette__latte()
    {
        $service = new Nette\Latte\Engine;
        return $service;
    }


    /**
     * @return Nette\Mail\SendmailMailer
     */
    public function createServiceNette__mailer()
    {
        $service = new Nette\Mail\SendmailMailer;
        return $service;
    }


    /**
     * @return Nette\Application\PresenterFactory
     */
    public function createServiceNette__presenterFactory()
    {
        $service = new Nette\Application\PresenterFactory('...', $this);
        $service->setMapping(array(
            '*' => 'App\\*Module\\Presenters\\*Presenter',
        ));
        return $service;
    }


    /**
     * @return Nette\Templating\FileTemplate
     */
    public function createServiceNette__template()
    {
        $service = new Nette\Templating\FileTemplate;
        $service->registerFilter($this->getService('nette.latte'));
        $service->registerHelperLoader('Nette\\Templating\\Helpers::loader');
        return $service;
    }


    /**
     * @return Nette\Caching\Storages\PhpFileStorage
     */
    public function createServiceNette__templateCacheStorage()
    {
        $service = new Nette\Caching\Storages\PhpFileStorage('...', $this->getService('nette.cacheJournal'));
        return $service;
    }


    /**
     * @return Nette\Http\UserStorage
     */
    public function createServiceNette__userStorage()
    {
        $service = new Nette\Http\UserStorage($this->getService('session'));
        return $service;
    }


    /**
     * @return Nette\Application\IRouter
     */
    public function createServiceRouter()
    {
        $service = $this->getService('23_App_RouterFactory')->createRouter();
        if (!$service instanceof Nette\Application\IRouter) {
            throw new Nette\UnexpectedValueException('Unable to create service \'router\', value returned by factory is not Nette\\Application\\IRouter type.');
        }
        return $service;
    }


    /**
     * @return Nette\Http\Session
     */
    public function createServiceSession()
    {
        $service = new Nette\Http\Session($this->getService('httpRequest'), $this->getService('httpResponse'));
        $service->setExpiration('14 days');
        return $service;
    }


    /**
     * @return Nette\Security\User
     */
    public function createServiceUser()
    {
        $service = new Nette\Security\User($this->getService('nette.userStorage'), $this->getService('22_App_Model_UserManager'));
        Nette\Diagnostics\Debugger::getBar()->addPanel(new Nette\Security\Diagnostics\UserPanel($service));
        return $service;
    }


    public function initialize()
    {
        date_default_timezone_set('Europe/Prague');
        Nette\Caching\Storages\FileStorage::$useDirectories = TRUE;
        $this->getByType("Nette\Http\Session")->exists() && $this->getByType("Nette\Http\Session")->start();
        header('X-Frame-Options: SAMEORIGIN');
        @header('X-Powered-By: Nette Framework');
        @header('Content-Type: text/html; charset=utf-8');
        Nette\Utils\SafeStream::register();
    }

}