Nefunkcny extension method
- xrep
- Člen | 51
Ahoj,
snažím sa vytvoriť extension method a to nasledovne.
Som v handleri (niečo ako tu → https://github.com/…/en/index.md sekcia Configuring services), ktorý spravuje Doctrine entitu s názvom Page.A tam sa snažím pridať metódu do Page, ktorá mi sprístupní nejaké atribúty navyše.
Čiže to vyzerá nejako takto, všetken kód je v konštruktore
<?php
$this->contentAttributes = new ContentAttributes( $this->eMan );
$this->pages = $entityManager->getRepository( Page::getClassName() );
//extension methods
Page::extensionMethod( 'attr', function ( Page $that ) {
return $this->contentAttributes->getContentAttributesAssoc( $that->getId(), $that->lang->getId(), 'page' );
});
?>
ale po zavolaní
<?php
$p = $this->contents->findPage( [ 'id' => 6 ] );
dump($p->attr());
?>
to hádže
Fatal Error
Call to undefined method Closure::invokeArgs()
skúšal som hľadať riešenie, no bezúspešne.
Poradil by mi niekto prosím?
Editoval xrep (13. 10. 2015 15:54)
- David Matějka
- Moderator | 6445
Jakou verzi nette pouzivas? A z jakeho radku ta chyba vyskoci?
mimochodem, extensionMethod doporucuju nepouzivat
- xrep
- Člen | 51
Verzia nette by mala byt aktualna, tak ako Kdyby/Doctrine
V composer mam:
"nette/application": "~2.3",
"kdyby/doctrine": "~2.2",
Subor: src/Kdyby/Doctrine/Entities/BaseEntity.php
Riadok: 194
vypis z Tracy:
if ($cb = static::extensionMethod($name)) {
/** @var \Nette\Callback $cb */
array_unshift($args, $this);
return $cb->invokeArgs($args); // tu to haze
}
- David Grudl
- Nette Core | 8239
Důvodem je, že Nette\Calback je deprecated a od Nette 2.2 je
v Kdyby\Doctrine potřeba $cb->invokeArgs($args)
nahradit za
call_user_func_array($cb, $args)
.
- David Matějka
- Moderator | 6445
@ryder treba
- zneprehledni to kod – mas metody na ruznych mistech
- nefunguje staticka analyza (a tedy ani treba napovidani v IDE)
- casto to svedci o spatnem navrhu
- Filip Procházka
- Moderator | 4668
Díky za report, opraveno. (Nejraději bych je úplně smazal, ale nechci tam vytvářet BC Break :-/ )