Vytvoření továrničky ve službě

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

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
+
0
-

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
+
0
-

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 Cronu jako závislost. To mi přijde jako nejlepší řešení.