Pomoc s rozběhnutím contributte/oauth2-client

koren
Člen | 59
+
0
-

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
+
0
-

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
+
0
-

@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
+
0
-

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
+
0
-

@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
+
0
-

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 | 1189
+
-2
-

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.