Diskuze: Nette PHP
Zobrazeno 6 zpráv z 6.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
$connection nikde globálně není (pokud si ji sám někde globálně nedefinuješ). Použij DI kontejner. V config.neon si zaregistruj službu "registrace":
registrace: Registrace
Pokud má argument v konstruktoru třídy Registrace explicitně uvedený typ (v tvém případě má), DI injector pozná, jakou službu tam má předat (btw. můžeš tam ale klidně napsat Registrace(@connection), kde @connection je odkaz na službu připojení k databázi)
V presenteru si předáš službu registrace takhle:
private $registrace;
public function injectRegistrace(Registrace $registrace) {
$this->registrace = $registrace;
}
Pak můžeš použít v presenteru $this->registrace
vubec nechapu proc mam pridavat dalsi metodu.. jediny co potrebuju je pri vytvoreni nejak deklarovat promenou $connection
nepotrebuju udelat nic jineho..
class Registrace
{
private $databaze;
function __construct(Nette\Database\Connection $connection)
{
$this->database = $connection;
}
function pridatZaznam($jmeno,$heslo,$email) {
$this->databaze->exec("INSERT INTO uzivatel (jmeno,heslo,email) VALUES (?,?,?)",$jmeno,$heslo,$email);
}
}
a controler:
public function registraceUzivatele() {
$registrace = new Registrace($db);
$registrace->pridatZaznam("jmeno", "heslo", "email");
$this->redirect("Sign:sing");
}
jediny kde mi to rve. je v controleru $registrace = new Registrace($db);
protoze tu promenou kterou predavam.. radoby (databazi) nemam ji nikde
deklarovanou... jediny co chci vedet je kde ji deklarovat. a jak.. aby proste
pri vytvoreni instance tridy REGISTRACE.. se predala v parametru databaze.. nad
kterou pak muzu delat exes a tak... aneb.. jediny co chci.. je AZ VYTVORIM NOVOU
INSTANCI REGISTRACE.. tak aby pri zavolani jedne z metod v ni.. byla nejaka
promenna reprezentujici databazi..
jinak fakt dekuju za snahu mi to vysvetlit.. nikoho ve svem okoli nemam kdo
by tomu rozumel a byl ochotny pomoct..
a tak se treba zaseknu.. a sedim
pul dne a googlim kde je problem..
tak jsem obcas fakt na prasky z toho 
Proč přidat novou metodu, která dostane instanci Registrace do
presenteru?
Protože používáme Dependency Injection (http://www.itnetwork.cz/…avrhovy-vzor). Otázka by tak
spíš měla být, proč používat nějaké Dependency Injection (DI) a ne
radši instancovat přímo třídu Registrace a k čemu vlastně DI je?
Máš tedy presenter, který se stará o registrování uživatel. Presenter zná veřejné rozhraní Registrace a tak je schopný ho použít a vytvořit nový účet. Problém je, že nemá připojení k databázi. Proč by ho taky měl mít? On nepotřebuje připojení k databázi. Potřebuje model Registrace. Ten model si pak může uživatele ukládat třeba do textového souboru.
Problém tedy je, jak vytvořit službu Registrace a předat ji všechny závislosti (DB Connection)? O to se postará DI kontejner což není nic jiného, než objekt, který se stará jen o vytváření a předávání ostatních modelů. DI kontejner tak vytvoří instanci všech modelů (služeb), které budou potřeba (Nette\Database\Connection a Registrace) a předá jim závislosti. Presenter si pak metodou injectCokoli(Registrace $registrace) {} řekne o službu Registrace, která už existuje (DI kontejner jí sám předá Nette\Database\Connection). Výhody tohoto přístupu jsou podle mě celkem zřejmé:
BTW. dostat model Nette\Database\Connection do presenteru je možné (dokonce velice jednoduše), ale není to potřeba.
Zobrazeno 6 zpráv z 6.