Neon a služba implementujúca rozhranie

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Čamo
Člen | 798
+
0
-

Prosím vás, narazli som na takýto neon zápis:

- {create: App\Components\Auth\SignIn, implement: App\Components\Auth\ISignInFactory, inject: yes}

pričom definícia triedy SignIn je bez rozhrania:

class SignIn extends BaseControl

Naozaj je možné to takto zapísať? Teda, že v triede nieje potrebné uvesť

class SignIn extends BaseControl implements ISignInFactory

či ako to funguje?

EDIT:
či vlastne táto trieda SignIn ani rozhranie ISignIn implementovať nemá a tá factory sa vytvára automaticky?

Editoval Čamo (2. 11. 2015 22:07)

Oli
Člen | 1215
+
0
-

Jestli nejsem uplně vedle, tak to implement není interface, kterej má mít třída uvedený u sebe, ale factory, která vytvoří tu třídu. V podstatě to jde přečíst jako: Vytvoř třídu SignIn pomocí továrny ISignInFactory. Snad nejsem úplně vedle :-)

Čamo
Člen | 798
+
0
-

No a tá factory sa vygeneruje automaticky? Lebo nikde neviem nájsť kód ku tej továrni. Nejak nechápem ako to že z toho neonu vypadne factory.

Oli
Člen | 1215
+
+3
-

Tu faktory si musíš napsat. Měla by vypadat nějak takhle

interface IMyServiceFactory {

	/**
	 * @return MyService
	 */
	function create();
}

A ani to takhle složitě nemusíš psát do configu, pokud nepotřebuješ něco speciálního. @mrtnzlml (sakra, nikdy nevím jak to přesně je, ta doména je mnohem lepší na zapamatování, aspoň, že nick máš tam) napsal pěknej článek ohledně toho: http://zlml.cz/…nitive-guide

Čamo
Člen | 798
+
0
-

Oli:
Díky za ten link, už začínam chápať.

Editoval Čamo (2. 11. 2015 22:06)

iNviNho
Člen | 352
+
+3
-

Ešte len poradím, alebo teda pripomeniem.

To, čo napíšeš v config.neone sa kompiluje a výsledkom je Container, ktorý si môžeš pozrieť v temp/cache/Nette.configurator …

Takže ak do config.neone do services napíšeš:

<?php
- App\Services\IUserFactory
?>

Tak sa z toho vygeneruje =>

<?php
final class Container_8d5996a97f_App_Services_IUserFactoryImpl_64_App_Services_IUserFactory implements App\Services\IUserFactory
{

	private $container;


	public function __construct(Container_8d5996a97f $container)
	{
		$this->container = $container;
	}


	public function create($name, $surname, $id = NULL)
	{
		$service = new App\Services\User($name, $surname, $id, $this->container->getService('63_App_Repository_UserRepository'));
		return $service;
	}

}
?>

A v presenteri len požiadaš továrničku o vytvorenie usera

<?php
$user = $this->userFactory->create("Vlado", "Vráb");
?>

Editoval iNviNho (3. 11. 2015 14:12)

mrtnzlml
Člen | 140
+
0
-

Oli napsal(a):

@mrtnzlml (sakra, nikdy nevím jak to přesně je, ta doména je mnohem lepší na zapamatování, aspoň, že nick máš tam)

Protip: je to moje jméno bez samohlásek. S touto pomůckou to lidi většinou začnou psát správně… (-:

Pavel Kravčík
Člen | 1196
+
0
-

mrtnzlml napsal(a):

Oli napsal(a):

@mrtnzlml (sakra, nikdy nevím jak to přesně je, ta doména je mnohem lepší na zapamatování, aspoň, že nick máš tam)

Protip: je to moje jméno bez samohlásek. S touto pomůckou to lidi většinou začnou psát správně… (-:

Nezačnou. :D