NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Dependency Injection - Napsat si ho nebo pouužít hotové?

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
David Bubenik:13.10.2017 14:19

Zdravím, nedávno jsem se opřel do přepisování mého staršího projektu (Sázecí stránky pro hru). Už jsem nechtěl jít ve starých kolejích a psát všechno do jednoho indexu tak jsem si řekl, že to napíšu co nejlépe za pomoci MVC patternu. Všechno se mi dařilo až do dnes kdy jsem se dostal do problémů s využíváním databáze a template enginu (konkrétně Latte). Samozřejmě, že nechci v každém kontroleru vytvářet novou instanci databáze nebo šablon. systému. Objevil jsem, že existuje něco jako Dependency Injection a přečetl si o tom něco.

Můj problém ale tkví v tom, že nevím zda ho mám použít jen kvůli pár třídám a hlavně jaký mám použít.
Četl jsem toto: http://krasimirtsonev.com/…on-container

A pak toto: http://php-di.org/…ding-di.html

Nevím ale zda mám použít hotovou verzi, nebo použít tu jednodužší a pořádně jí pochopit. Chápu, že DI a vlastně každá třída funguje jako BlackBox takže nepotřebuju vědět co to přesně dělá ale přecejenom bych to pak rád použil i v Semestrální práci a tam už bych o tom musel vědět nejlíp všechno.

Editováno 13.10.2017 14:20
Odpovědět
13.10.2017 14:19
Hardware je to, do čeho můžež kopnout, když nefunguje software.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na David Bubenik
David Hartinger:14.10.2017 20:58

DIčko se dá napsat na pár desítek řádků. Záleží jaký máš cíl. Jestli se chceš učit, napiš si to sám. Jestli chceš dělat aplikaci s hodně fíčurama, stáhni hotové.

Nahoru Odpovědět
14.10.2017 20:58
New kid back on the block with a R.I.P
Avatar
David Bubenik:15.10.2017 23:52

No, tak nakonec jsem se vydal cestou hotoveho.
Konkretne: http://container.thephpleague.com

Pokusil jsem se nechat si poradit na stackoverflow ale bohuzel jsem dostal jen hromadu linku o tom jak delat MVC a ne nejake jednoduzsi vysvetleni co delam spatne.

Poradi mi nekdo tady prosim :D

Bootstrap vytvori DI container a nacpe ho modely pro databazi, json, apod.
Zbytek vypada takhle:

Controller:

abstract class Controller
{
    protected $di;
    protected $db;
    protected $latte;
    protected $json;
    //etc...

    public function __construct(League\Container\Container $container)
    {
        $this->di = $container;
        $this->db = $container->get('database');
        $this->json = $container->get('json');
        //etc...

        $this->setup();
    }
}

class ApiController extends Controller
{
    function setup()
    {
        $this->model = new ApiModel($this->di);
    }

    public function showGames()
    {
        $this->latte->render("random-view.latte", $this->model-getGames());
    }
}
**Model:**

class Model
{
protected $db;
protected $json;

public function __construct(Le­ague\Container\Con­tainer $container)
{
$this->json = $container->get('json');
$this->db = $container->get('database');
}
}
class ApiModel extends Model
{
/**
* Get games
* @return mixed
*/
public function getGames()
{
//db queries etc...
}
}

\---

Editováno 15.10.2017 23:55
Nahoru Odpovědět
15.10.2017 23:52
Hardware je to, do čeho můžež kopnout, když nefunguje software.
Avatar
Odpovídá na David Bubenik
David Bubenik:16.10.2017 0:01

Omylem jsem to spatne ulozil a ted mi to nejde editovat :D Jde to jeste nejak opravit?

Nahoru Odpovědět
16.10.2017 0:01
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 4 zpráv z 4.