NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 7 - Jednoduchý redakční systém v Nette - Administrace

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Vakos
Jindřich Máca:8.2.2017 23:29

Jestliže to hází pouze čistou chybu 500, tak konkrétní chybová zpráva bude uvedená v logu (složka log/). ;)

P.S.: Pokud si ani s ní nebudeš vědět rady, tak ji sem pošli. :)

 
Odpovědět
8.2.2017 23:29
Avatar
Vakos
Tvůrce
Avatar
Odpovídá na Jindřich Máca
Vakos:8.2.2017 23:38

V log mi to hází toto:

Nette\InvalidStateException: Resource 'Core:Date' does not exist. in C:\xampp\htdocs\vendor\nette\security\src\Security\Permission.php:300  @  http://localhost/dates/  @@  exception-2017-02-08-22-01-55-ab963012bf52ae2b84dd39a63a6b0823.html

Nevím ale kde to upravit. V konfig.neon mám přidáno date: Core:Date

Odpovědět
8.2.2017 23:38
"Jediný způsob, jak dělat skvělou práci, je milovat to, co děláte. Pokud jste to ještě nenašli, hledejte dál. Ne...
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Vakos
Jindřich Máca:8.2.2017 23:49

To vypadá na to, že používáš finální verzi projektu a zapomněl jsi přidat zdroj pro oprávnění. Podívej se do 11. dílu, kde se řeší právě konfigurace oprávnění u statického ACL - http://www.itnetwork.cz/…ka-opravneni

Co potřebuješ přidat je toto:

# Nastavení vlastních služeb dále přístupných pomocí DI v rámci CoreModule.
services:
        security.authorizator: # Nastavení zdrojů a pravidel přístupu k nim v rámci CoreModule pomocí statického ACL.
                setup:
                        ...
                        - addResource(%date%)
                        ...

A dále samozřejmě nastavení konkrétních přístupových práv k danému presenteru. ;)

 
Odpovědět
8.2.2017 23:49
Avatar
Vakos
Tvůrce
Avatar
Odpovídá na Jindřich Máca
Vakos:9.2.2017 9:55

Jj, to je ono, děkuji.

Odpovědět
9.2.2017 9:55
"Jediný způsob, jak dělat skvělou práci, je milovat to, co děláte. Pokud jste to ještě nenašli, hledejte dál. Ne...
Avatar
Miroslav Mucha:11.4.2018 15:46

Ahoj, už několik dní si lámu hlavu s jedním problémem. Při vkládání nového řádku do DB se data uloží a následně se přesměruje se na šablonu show, kde se nově uložený záznam zobrazí. Vše je v pořádku jak ve vykreslené šabloně, tak v databázi.
Pokud ale edituji již dříve uložený záznam, změny se správně uloží do databáze, ale přesměrování se nepodaří. Laděnka vypisuje chybu: Trying to get property of non-object.
Pro nový záznam i editaci je stejný formulář, načítání a zobrazování záznamů je v pořádku.

Presenter (část):

public function projektFormSucceeded($form, $values)
        {
                $projektId = $this->getParameter('projektId');
                $values['datum_odevzdani'] = DateTime::from($values['datum_odevzdani']);
                $projekt = $this->projektManager->saveProjekt($values, $projektId);
                $this->flashMessage("Projekt byl úspěšně uložen.", 'success');
                $this->redirect('show', $projekt->projekt_id);
        }

        public function actionEdit($projektId)
        {
                $projekt = $this->projektManager->getProjekt($projektId);
                if (!$projekt) {
                        $this->error('Projekt nebyl nalezen');
                }else{
                        $this['projektForm']->setDefaults($projekt);
                }
        }

Model:

public function saveProjekt($values, $projektId)
        {
                if(!$projektId) {
                        $projekt = $this->data->insert($values);
                }else{
                        $projekt = $this->data->where('projekt_id', $projektId)->update($values);
                }
                return $projekt;
        }
 
Odpovědět
11.4.2018 15:46
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Miroslav Mucha
Jindřich Máca:11.4.2018 18:28

Ahoj, pokud se nepletu, tak problém vzniká tady:

public function saveProjekt($values, $projektId) {
        if (!$projektId) {
                // Metoda insert vrací nový vložený řádek.
                $projekt = $this->data->insert($values);
        } else {
                // Metoda update nevrací upravený řádek, ale číslo, reprezentující počet upravených řádek.
                $projekt = $this->data->where('projekt_id', $projektId)->update($values);
        }
        return $projekt;
}

A následně to vede k chybě, neboť při editaci dostaneš z metody saveProjekt() pouze číslo a ne objekt jako u vkládání. Následně na tomto číslu voláš přístup k atributu $projekt->projekt_id v rámci toho přesměrovaní, což samozřejmě vede k oné chybě, kterou Ti to píše... :)

Pokud bych do toho mohl mluvit, celkově bych předělal tu práci s ID. Už to, že ho při odeslání formuláře bereš z parametru, zavání potenciálním průšvihem. :-`

 
Odpovědět
11.4.2018 18:28
Avatar
Jindřich Máca
Tvůrce
Avatar
Jindřich Máca:11.4.2018 18:31

Jinak informace o tom, jak se chovají ty metody insert(), update() apod. lze najít v oficiální programátorské dokumentaci Nette (API) - https://api.nette.org/…lection.html ;)

 
Odpovědět
11.4.2018 18:31
Avatar
Odpovídá na Jindřich Máca
Miroslav Mucha:11.4.2018 19:11

Vřelé díky za odpověď, bude to ono, protože když jsem si v Laděnce ukázal na proměnnou $projekt, ukázalo mi to jedničku a nedošlo mi proč. Dokumentaci jsem procházel, ale asi jsem se nechal zmást příklady, kde je rovněž použita metoda update, ale přeci jen trochu jinak.
Ještě jednou díky :-)

 
Odpovědět
11.4.2018 19:11
Avatar
Marty
Člen
Avatar
Marty:30.10.2018 16:01

Pochopil jsem správně, že

public function renderDefault($url = null)

znamená, že do $url se nepřiřazuje null, ale pouze se tím říká, že parametr může být null?

 
Odpovědět
30.10.2018 16:01
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Marty
Jindřich Máca:30.10.2018 16:18

Ne tak docela. Znamená to, že pokud nebude tento argument metody zadán, nastaví se místo toho na null. Z toho pak logicky plyne, že může být null, ale teoreticky i cokoliv jiného, neboť PHP je dynamicky typovaný jazyk. Ale tohle by jsi už měl vědět, protože to patří do základů PHP viz. http://php.net/…rguments.php#… :-`

 
Odpovědět
30.10.2018 16:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 34.