Náhrada @method v Nette 3
- pista5
- Člen | 72
Zdravim,
mel bych velkou prosbu… jsem zacatecnik a potrebuji upravit FreezyBee/MojeId
pod Nette 3. Vim, ze musim vyhodit Nette\Object, ale nevim, jak si poradit s
@method onRequest a onResponse
https://github.com/…zyBee/MojeId
Ac jsem prostudoval toto tema https://forum.nette.org/…ckych-method, nejsem z toho moc chytry.
Potrebuji poradit, jak to zde https://github.com/…c/MojeId.php nahradit:
<?php
namespace FreezyBee\MojeId;
use FreezyBee\MojeId\Exceptions\MojeIdException;
use Nette\Http\Request;
use Nette\Http\Response;
use Nette\Object;
use Nette\Utils\ArrayHash;
/**
* Class MojeId
* @package App\Model
* @method onRequest(\Auth_OpenID_AuthRequest $authRequest)
* @method onResponse(ArrayHash $person, \Auth_OpenID_ConsumerResponse $response)
*/
class MojeId extends Object
{
/** @var callable[] function (\Auth_OpenID_AuthRequest $authRequest); */
public $onRequest = [];
/** @var callable[] function (ArrayHash $person, Auth_OpenID_ConsumerResponse $response); */
public $onResponse = [];
.....
private function begin()
{
....
$this->onRequest($authRequest);
}
?>
Diky moc!
- Marek Bartoš
- Nette Blogger | 1280
@method
je jen nápověda pro IDE a statickou analýzu,
důežitá čast je to $on*
. Stačí použít
traitu SmartObject
Ten thread co jsi našel je o něčem jiném
Editoval Mabar (19. 11. 2019 13:27)
- pista5
- Člen | 72
Diky, dal jsem to a OK.
Narazil jsem ted ale zde https://github.com/…cs/Panel.php na toto:
<?php
/**
* @param $request
*/
public function begin($request)
{
$this->request = ArrayHash::from($request);
}
/**
* @param ArrayHash $person
* @param \Auth_OpenID_SuccessResponse $response
*/
public function complete(ArrayHash $person, \Auth_OpenID_SuccessResponse $response)
{
$this->person = $person;
$this->response = ArrayHash::from($response);
}
/**
* @param MojeId $mojeId
*/
public function register(MojeId $mojeId)
{
$mojeId->onRequest[] = $this->begin;
$mojeId->onResponse[] = $this->complete;
Debugger::getBar()->addPanel($this);
}
?>
kde mi to hlasi: Cannot read an undeclared property FreezyBee\MojeId\Diagnostics\Panel::$begin
Jestli dobre chapu, problem je v tom, ze $this->begin ma byt odkaz na metodu vyse… je spravne to nahradit $mojeId->onRequest[] = [$this, ‚begin‘]?
- Marek Bartoš
- Nette Blogger | 1280
Ano, je. Případně
$mojeId->onRequest[] = function($request) {$this->begin($request);};
- pista5
- Člen | 72
Diky, udelal jsem prvni verzi, ktera mi prijde prehlednejsi, ale narazil jsem hned dal a tam uz si rady nevim.
Na
<?php
$this->request = ArrayHash::from($request);
?>
mi to vyhodi „Argument 1 passed to Nette\Utils\ArrayHash::from() must be of the type array, object given“
Zde vubec nechapu, kde se v metode „begin($request)“ bere parametr $request – a tudiz proc to tam haze tu chybu… vzdyt jsem pouze $this->begin nahradil za [$this, ‚begin‘]
- Marek Bartoš
- Nette Blogger | 1280
Předtím se nejspíš v ArrayHash přetypovával request na pole, teď pole striktně vyžaduje. Takže musíš request přetypovat na pole. Odkud se bere zjistíš pomocí IDE, například v phpstormu se volání metody dá zobrazit přes ctrl+b. Též si můžeš proměnnou dumpnout, abys zjistil o jaký objekt vlastně jde
- Marek Bartoš
- Nette Blogger | 1280
Ctrl+b znam, ale zde mi nefunguje, kdyz je metoda Begin volana takto $mojeId->onRequest[] = [$this, ‚begin‘]
Sorry, v tomhle případě hledáš onRequest() volání
Editoval Mabar (19. 11. 2019 22:30)