DateTime service registrace
- had12
- Člen | 28
Ahoj,
dostal jsem hlášení: Service ‚analyzeday‘: Service of type DateTime needed by AnalyzeDay::__construct() not found. Did you register it in configuration file?
ale nevím, jak se ho zbavit. Mám třídu v modelu, které musím nutně do konstruktoru předávat jako parametr objekt typu DateTime z PHP, ale nette za každou cenu chce, abych typ DateTime nějak registroval. Je možné to nějak obejít, prosím? Pro úplnost dávám kus zdrojáku:
class AnalyzeDay extends Nette\Object {
private $analyzeLiturgicYear;
private $date;
public function __construct(DateTime $date, AnalyzeLiturgicYear $analyzeLiturgicYear){
a config.neon:
services:
authenticator: Authenticator
authorizator: Authorizator
routerFactory: RouterFactory
router: @routerFactory::createRouter
analyzeliturgicyear: AnalyzeLiturgicYear
analyzeday: AnalyzeDay
calendar: Calendar
Nevíte někdo, prosím, jak na to?
- had12
- Člen | 28
Snažím se integrovat několik tříd původně psaných bez nette do struktury nette a moc se mi to nedaří. Myšlenka byla taková:
include_once "analyzeLiturgicYear.php";
include_once "analyzeDay.php";
$aly = new analyzeLiturgicYear("2014"); // vrátí objekt analyzeLiturgicYear, který obsahuje info o konkrétním roce
$day = new DateTime("2014-01-01");
$ad = new analyzeDay($day, $aly); // vrátí info o konkrétním dni v daném roce, které je závislé na předchozí analýze roku 2014.
echo $ad->debug();
ale nevím, jak to zapsat do nette… myslel jsem, že stačí analyzeLiturgicYear a analyzeDay zaregistrovat jako služby a problém je vyřešený… :-(
Editoval had12 (11. 11. 2014 20:36)
- Šaman
- Člen | 2666
Tohle ale nejsou služby! Tady je operátor new na místě. Taky přece
nemáš službu na DateTime, ale pokud potřebuješ objekt s datumem,
vytvoříš nový DateTime.
Takže includy nejsou potřeba (pokud na ty třídy vidí RobotLoader), ale
nekomplikuj to s žádnýma službama a DI kontejnerem, to tu nemá co dělat.
Budeš s nimi pracovat stejně, jako bez Nette.
P.S. Jen, pokud máš možnost upravit kód těch tříd, tak v Nette je zvykem psát třídy velkým písmenem. Tedy
<?php
use DateTime; # nebo Nette\DateTime
$aly = new AnalyzeLiturgicYear("2014");
$day = new DateTime("2014-01-01");
$ad = new AnalyzeDay($day, $aly); # a doporučuji popisnější název proměnných
?>
Editoval Šaman (11. 11. 2014 20:58)