Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 7. diel - Jednoduchý redakčný systém v Nette - Administrácia

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovedá 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. :)

Avatar
Vakos
Tvůrce
Avatar
Odpovedá 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

Odpovedať
"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
Odpovedá 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. ;)

Avatar
Vakos
Tvůrce
Avatar
Odpovedá na Jindřich Máca
Vakos:9.2.2017 9:55

Jj, to je ono, děkuji.

Odpovedať
"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;
        }
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovedá 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. :-`

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 ;)

Avatar
Odpovedá 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 :-)

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?

Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovedá 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#… :-`

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 34.