Skip to content

Conversation

jsmitka
Copy link
Contributor

@jsmitka jsmitka commented Apr 5, 2014

Draft of a new chapter of documentation that discusses possibilities of getting dependencies into application classes and provides a list of examples on various types of injections for presenters, components and services.

The page will be further extended to contain some specific cases, like presenters or component factories registered in the DI Container.

This draft is currently only in Czech language, it will by translated after corrections and expansion.

Any feedback is welcome.

@Majkl578
Copy link
Contributor

Majkl578 commented Apr 5, 2014

Tohle je spíš do wiki než přímo do dokumentace, ne?

@rokerkony
Copy link

It seems to me to be almost similar as fprochazka described in his DI tutorial. Maybe it could be a good idea to point it out...
https://www.youtube.com/watch?v=0K7-2A1lOag


Preferovaný způsob předávání závislostí je pomocí anotace `@inject`, neboť nekomplikuje kód a Nette se o předání správné závislosti stará automaticky.

Pokud potřebujete přesně definovat kontrakt presenteru (může být vhodné například pro testování), použijte metody `@inject`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo - použijte metody @inject => použijte metody inject*

@dg
Copy link
Member

dg commented Apr 6, 2014

Please switch encoding from CP1250 -> UTF8.

\--

Nette opět může takto anotovanou vlastnost najít a automaticky vlastnost injektovat. Jako typ třídy však musí být uveden její plně kvalifikovaný název, tj. včetně celé cesty v namespace. Nelze využít názvů tříd importovaných pomocí direktiv `use`.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

„Nelze využít názvů tříd importovaných pomocí direktiv use.“ Od verze 2.2 je tomu právě naopak. Asi bych se vyhnul slovu importovaných (jde o aliasy) a kvalifikovaných a napsal: „Jako typ třídy musí být uveden její plný název včetně celého namespace. Od verze Nette 2.2 lze využít aliasů definovaných pomocí use.“

@jsmitka
Copy link
Contributor Author

jsmitka commented Apr 7, 2014

I have updated page and added two new sections on presenters in the DI Container and generated component factories.

Thanks for comments, @dg and @matej21! I would be most grateful if somebody could review new sections of the page.


Od Nette 2.1 je možné používat továrny generované proti rozhraní. U rozhraní stačí u příslušných metod uvést anotaci `@return`, která říká, instanci jaké třídy má továrna vytvářet. Nette pak pro rozhraní vygeneruje správnou implementaci.

Rozhraní musí mít právě jednu metodu pojmenovanou `create`, nebo `get`. Naše rozhraní pro komponentu může vypadat například takto:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

get neni na tovarny, ale accessory. mozna bych to vubec nezminoval :) je to takovej easter egg, kterej svadi ke zneuziti...

@dg
Copy link
Member

dg commented Apr 23, 2014

ping @jsmitka

@jsmitka
Copy link
Contributor Author

jsmitka commented Apr 25, 2014

@dg I was ill recently, so I have some work to catch up with. I'll try to fix the page and translate it during this weekend, probably before or after #posobota.

\--

Objektu je možné závislost předat až po jeho vytvoření. Tento způsob je vhodný pouze pro nepovinné závislosti, které nejsou pro funkci třídy nezbytné, neboť není garantováno, že objekt závislost skutečně dostane.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nehodilo by se tady ukázat, že settery je možné volat z config.neon v definici služby?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jak už zmínil David, je to uvedeno později. Nechci do sebe míchat obecné případy a konkrétní aplikaci na objekty v Nette.

@xpavp03
Copy link
Contributor

xpavp03 commented Apr 29, 2014

Jen chci dodat, že tenhle článek je naprostá bomba a že určitě patří do dokumentace. Díky!!

}
\--

Tento způsob je však nevhodný, neboť členská proměnná musí být deklarována jako `public` a nemáme kontrolu nad tím, že předaná závislost bude skutečně daného typu. Přicházíme také o možnost reagovat na nově přiřazenou závislost vlastním kódem a porušujeme také princip zapouzdření.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

deklarována jako public, a tudíž nemáme...

@dg
Copy link
Member

dg commented May 15, 2014

Nevyplatilo by se to dát do dokumentace alespoň česky a hned?

@jsmitka
Copy link
Contributor Author

jsmitka commented May 15, 2014

Asi ne, v posledních dnech jsem pomalu překládal a už to mám skoro hotové. Do večera aktualizuji.

@dg
Copy link
Member

dg commented May 15, 2014

Super!

@jsmitka
Copy link
Contributor Author

jsmitka commented May 15, 2014

Tak konečně po měsíci a něco sepsáno - připomínky vítány, anglická verze určitě potřebuje proofreading ještě od někoho jiného.

@dg
Copy link
Member

dg commented May 19, 2014

Můžeš to prosím spojit do jednoho komitu a mergnout? Případné opravy se udělají později.

jsmitka added a commit that referenced this pull request May 21, 2014
doc-2.1: Getting dependencies.
@jsmitka jsmitka merged commit 0fce891 into nette:doc-2.1 May 21, 2014
@dg
Copy link
Member

dg commented May 21, 2014

👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants