Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
David Bubenik:18.10.2017 12:31

Zdravím,
už několik týdnů si stavím malý framework abych se naučil v MVC.
Největší překážkou pro mně byl asi Depencency Injection Container. Ten se mi za pomoci container.thep­hpleague.com povedlo implementovat a za pomoci lidí zde a na stackoverflow to oživit.
Rád bych se ale ujistil, že jdu správnou cestou a proto bych rád uvítal radu od někoho kdo tomu více rozumí.

Nějak takto vypadá moje struktura:

index.php

//..Autoloader trid, autoloader composeru a configu.

// Initialize Dependency Injection container and add classes
$di = new League\Container\Container;
$di->share('database', 'Database');
$di->share('json', 'Json');
$di->share('latte', function(){
    $latte = new Latte\Engine;
    $latte->setTempDirectory(NULL);
    return $latte;
});

// Initialize and run router
$routerController = new RouterController();
$routerController->process($di);

RouterController­.php

use League\Container\Container;

class RouterController
{
    public function process(Container $di)
    {
        $router = new AltoRouter();

        //..Mapping cest

        // Match current request url
        $match = $router->match();

        //..Podminky existence a podobne ve kterych se pri spravne vysledku spusti kod nize...

        //Add model to DIC and resolve dependencies
        $di->share($class, $class)
            ->withArgument('json')
            ->withArgument('database');
         //Add controller to DIC and resolve dependencies
        $di->share($controller, $controller)
            ->withArgument('latte')
            ->withArgument('json')
            ->withArgument($match['params'])
            ->withArgument($class);
         //Call controller with action
        $di->get($controller)->$action();
}

Controller.php

use Latte\Engine;

abstract class Controller
{
    protected $data = array();
    protected $model;
    protected $latte;
    protected $json;
    protected $args = array();

    public function __construct(Engine $latte, Json $json, array $args, $model)
    {
        $this->latte = $latte;
        $this->json = $json;
        $this->model = $model;
        $this->args = $args;
    }

    //..Vsechny mozne dalsi funkce nebo tridy
}

Pouzivam DIC správně? Nekazím něčím pattern?

Odpovědět
18.10.2017 12:31
Hardware je to, do čeho můžež kopnout, když nefunguje software.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.