Vytvoření továrničky ve službě
- Wysky
- Člen | 5
Ahoj,
mám tento problém… v config.neon mám definovánu service s názvem Cron a
továrničku User. V service se snažím pro každého nalezeného uživatele
vytvořit továrničku, provést její zpracování a výsledek uložit do
databáze. Jak se ale dá ve službě vytvářet továrničky? V prezenteru
používaný $this->context není v mém případě k dispozici a proto mi
Laděnka hlásí „Cannot read an undeclared property CronService::$context“.
Jak tedy vytvořit továrničku v service (nebo jiné továrničce)? Nebo to
celé dělám špatně? :) Lze to nějak řešit v souladu s DI?
<?php
class Cron extends Nette\Object
{
/** @var Nette\Database\Connection */
private $database = NULL;
public function __construct(Nette\Database\Connection $database)
{
$this->database = $database;
}
public function doWork()
{
// nacteni vsech aktivnich uzivatelu
$users = $this->getActiveUsers();
// prochazeni
foreach($users as $user)
{
$seller = $this->context->createUser();
// context neexistuje :(
...
}
}
?>
- ViPEr*CZ*
- Člen | 817
Nikde jsem to neviděl ještě… možná to nějak jde, ale osobně o tom nevím. Samozřejmě ve třídě Cron není context k dispozici, ostatně nemá se tam jak dostat. Musel by jste ho předávat v konstruktoru a to není pěkné řešení. Možná někdo ukáže jak to jde. Jinak si samozřejmě jde udělat nějakou metodu co vytvoří instanci na požadovaný objekt uvnitř třídy Cron, ale bohužel ručo.
- arron
- Člen | 464
Udělat „do contextu“ továrničku není problém, ale
tady bych asi doporučil udělat normálně nějakou tovární třídu, která
bude ty objekty vytvářet a předat si jí do Cron
u jako
závislost. To mi přijde jako nejlepší řešení.