Signály – konstruktor dostane null
- wasek2611
- Člen | 17
Mám problém se signálem, hodí mi to chybovou hlášku:
Argument 2 passed to Dera\NepotvrzeneZapasyControl::__construct() must be an
instance of Dera\ZapasRepository, null given, called in
D:\BP\nette\Dera\app\presenters\HomepagePresenter.php on line 87 and
defined s
Zkoušel jsem v konstruktoru třídy NepotvrzeneZapasyControl dát pryč, že proměnná musí být typu ZapasRepository, ale pak mi to zase hodí, že volám funkci na „neobjektu“. Takže k samotnému kódu:
model
class ZapasRepository extends Repository {
.
.
.
public function potvrzeniZapasu($idZapasu)
{
// Vloží změnu stavu do dabáze
$this->findBy(array('idZapasu' => $idZapasu))->update(array('stav' => 2));
}
presenter
class HomepagePresenter extends BasePresenter{
private $zapasRepository;
.
.
.
protected function createComponentNepotvrzeneZapasy()
{
return new Dera\NepotvrzeneZapasyControl($this->zjistiNepotrvzeneZapasy(),$this->zapasRepository);
}
komponenta
class NepotvrzeneZapasyControl extends Nette\Application\UI\Control {
private $selected;
private $zapasRepository;
public function __construct(array $selected,ZapasRepository $zapasRepository)
{
parent::__construct();
$this->selected = $selected;
$this->zapasRepository = $zapasRepository;
}
.
.
public function handlePotvrzeniZapasu($idZapasu)
{
$this->zapasRepository->potvrzeniZapasu($idZapasu);
$this->presenter->redirect('this');
}
šablona
{foreach $nepotvrzeno as $zapas}
<td><a n:href="potvrzeniZapasu! $zapas->idZapasu" class="tlacitko">potvrdit výsledek</a></td>
{/foreach}
Vycházel jsem z quickstartu.
- wasek2611
- Člen | 17
jestli myslíš, jestli mám zaregistrovanou službu v configu, tak mám
services:
authenticator: Authenticator
routerFactory: RouterFactory
router: @routerFactory::createRouter
# Sluzby pro Dera
zapasRepository: Dera\ZapasRepository
hracVKlubuRepository: Dera\HracVKlubuRepository
klubRepository: Dera\KlubRepository
hracRepository: Dera\HracRepository
v HP mám metodu:
public function zjistiNepotrvzeneZapasy()
{
// Najdeme si idKlubu pomoci spravneho modelu
$idKlubu = $this->context->hracVKlubuRepository->najdiIdKlubu($this->hrac);
// Vybereme zapasy a vratime pro zpracovani prislusneho view
return $this->context->zapasRepository->nepotvrzeneZapasyKlubu($idKlubu);
}
doufám, že je to to, cos myslel. Ale spíš jsi narážel asi na to, že mi tam něco chybí, pořád si porovnávám svůj kód s quickstartem a nemůžu nějakou odlišnost najít (jediná, že já předávám parametr konstrukotru componenty jako pole)
- wasek2611
- Člen | 17
moc díky, už mi to funguje :)
a ještě bych se chtěl zeptat, jak potom to id zápasu z komponenty přenesu do homepage presenteru (ještě se s tou hodnotou dělá víc věcí, než jen potvrzuje zápas, metodu mám HPP a k tý metodě další pomocné metody a nechce se mi je všechny zbytečně kopírovat do komponenty)
naprosto by stačilo, kdybych mohl metodu z HPP použít v té komponentě.
Editoval wasek2611 (23. 4. 2013 17:32)
- stehlikpetr@msn.com
- Člen | 7
Jsem začátečník, ať mě někdo opraví, pokud se to tak nemá dělat,
ale z komponenty můžeš používat metody presenteru přes $this->presenter->metodaPresenteru();