Pomoc s rozběhnutím contributte/oauth2-client
- koren
- Člen | 59
Potřeboval bych radu ohledně rozběhnutí Google přihlašování pomocí tohohle jednoduchého tutoriálu https://contributte.org/…-client.html
Konkrétně mi tam jde o tu TODO část na řádku 18 v SignPresenter, kde se má vytvořit GoogleButton komponenta.
Zkusil jsem tam doplnit jednoduché volání níže, ale vrací mi to „Too few arguments to function GoogleButton::__construct(), 0 passed“.
<?php
$btn = new \GoogleButton;
return $btn;
?>
Z kódu samotné komponenty to vypadá, že je nutné ji volat i s nějakou instancí GoogleAuthCodeFlow, která se použije v konstruktoru, ale nějak mi nedochází celá ta logika přihlašování, takže budu moc vděčný za nasměrování na to, jak by měla v tomhle případě tvorba komponenty vypadat.
- Ondřej Kubíček
- Člen | 494
to jak vypadá GoogleButton třída vidíš na tom examplu a je to klasická komponenta, kterou si doporučuji vytvořit přes create:
interface GoogleButtonFactory
{
public function create(): GoogleButton;
}
services:
- GoogleButtonFactory
// presenter
/** @var GoogleButtonFactory @inject */
public $googleButtonFactory;
...
public function createComponentGoogleButton(): GoogleButton
{
return $this->googleButtonFactory->create();
}
- koren
- Člen | 59
@OndřejKubíček Díky za rychlou reakci! Použití interface mi to ale spíš komplikuje (chybí mi v tomhle nějaké elementární OOP znalosti).
Moc jsem tedy nevěděl, kam ten kód s interface dát, tak jsem to dal přímo do té komponenty (viz kód níže). Je to tak správně, nebo je to úplná blbost? :) (umístění ostatních kódů je mi jasné)
class GoogleButton extends Control
{
...
}
interface GoogleButtonFactory
{
public function create(): GoogleButton;
}
Teď mi to hlásí „Class or interface ‚App\Presenters\GoogleButtonFactory‘ used in @var annotation at App\Presenters\SignPresenter::$googleButtonFactory not found. Check annotation and ‚use‘ statements.“
Buď bych tedy poprosil o to, jak se vypořádat s tím rozhraním, nebo jinou cestu, jak vytvořit tu komponentu (s ohledem na tu původní chybovou hlášku s chybějícím argumentem pro konstruktor).
- Ondřej Kubíček
- Člen | 494
musíš tu factory přidat do services
to je v mém původním
příspěvku a mít interface přímo u té komponenty je ok.
Jinak všechno je v dokumentaci https://doc.nette.org/…n/components
- koren
- Člen | 59
@OndřejKubíček Díky moc, ale bohužel se stále nedaří. Factory v services mám celou dobu a nápovědu k tvorbě komponent mám načtenou též, ale ani jedno mi zatím k řešení problému nepomohlo.
Pokud na to jdu cestou bez továrničky, hlásí mi to chybějící argument při volání konstruktoru komponenty.
Pokud na to jdu cestou s továrničkou, hlásí mi to neschopnost najít App\Presenters\GoogleButtonFactory
Nenapadá tě prosím, v čem by to ještě mohlo být? (Nette 3, PHP 7.2, cache mažu)
- Ondřej Kubíček
- Člen | 494
tak protože určitě GoolgeButtonFactory
nemáš v namespace
App\Presenters
. Namespacy jsem fakt neřešil, to si snad už
doplníš/opravíš jak sám potřebuješ. Ta error hláška je dost
výstižná.
- Felix
- Nette Core | 1196
Ahoj @koren.
Díky za rychlou reakci! Použití interface mi to ale spíš komplikuje (chybí mi v tomhle nějaké elementární OOP znalosti).
Obecne dokumentace rozsireni do Nette predpokladaji, ze clovek Nette a koncepty zna a vi jak je pouzit. Zkus mrknout na nejaky serial o PHP nebo o konceptech obecne. Urcite ti to pomuze a snadneji se pak bude se vsim pracovat.
Muzes mrknout na web pehapkari.cz a nebo na Slack. Urcite se tam najdou i ochotni pomocnici nebo lektori za nejaky drobny peniz, kteri ti vse objasni a intenzivne to s tebou projdou.