Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

Diskusia – 9. diel - Jednoduchý redakčný systém v Laravel - Správa článkov

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
Avatar
pavlicekr
Člen
Avatar
pavlicekr:7.6.2019 14:11

Ahoj,
není mi úplně jasný, proč se volá metoda ::create na modelu Article, když ji neobsahuje a ani model ze kterého dědí. To samé Article::orderBy
Možná jsem to někde přehlídl..

Editované 7.6.2019 14:12
 
Odpovedať
7.6.2019 14:11
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovedá na pavlicekr
Jan Lupčík:9.6.2019 20:17

Ahoj,

při běhu skriptu se automaticky na pozadí volá metoda query(), která vrací mocnou třídu Builder. Ta poskytuje právě práci s Eloquent ORM a také bychom v ní našli metodu create().

Pokud se však zajímáš o více informací, musíme se dostat ke třídě Model, kterou dědí Article. Ta právě definuje magickou metodu __call(), jejíž obsah je následující:

/**
 * Handle dynamic method calls into the model.
 *
 * @param  string  $method
 * @param  array  $parameters
 * @return mixed
 */
public function __call($method, $parameters)
{
    if (in_array($method, ['increment', 'decrement'])) {
        return $this->$method(...$parameters);
    }

    return $this->forwardCallTo($this->newQuery(), $method, $parameters);
}

Pokud bychom se chtěli podívat ještě hlouběji, museli bychom si otevřít i metodu forwardCallTo() ve třídě Model, a tak bychom pokračovali dále. Nám však stačí tento kontext. Jak můžeš vidět, všechny metody, které neexistují a nejsou to metody increment a decrement (takže statické volání těchto metod, proto jsou i definované zde), jsou automaticky předané builder objektu, jenž je získán z metody newQuery(). A to už je ten zmíněný Builder.

Takže i když ti IDE hlásí, že metoda neexistuje, ona je automaticky zavolaná při jejím použití. Každopádně při serióznějších projektech se určitě vyplatí sáhnout po nějakém pluginu do IDE nebo po nějaké knihovně. To už však nepatří do tohoto seriálu, jelikož děláme jednoduchou aplikaci - nechci zatěžovat čtenáře stahováním skriptů třetích stran.

Doufám, že jsem zodpověděl tvojí otázku. A děkuji za tvojí připomínku. Popřemýšlím o tom a případně to doplním někam do seriálu. :)

Odpovedať
9.6.2019 20:17
TruckersMP vývojář
Avatar
pavlicekr
Člen
Avatar
Odpovedá na Jan Lupčík
pavlicekr:10.6.2019 20:08

Moc díky za odpověď, takhle mi to stačí. A díky za seriál, je super :)

 
Odpovedať
10.6.2019 20:08
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovedá na pavlicekr
Jan Lupčík:11.6.2019 9:38

Není za co, já jsem ten, co by ti měl děkovat za připomínku. Pokud se budeš chtít opět na něco zeptat, neboj se využít komentářů pod článkem. :)

Odpovedať
11.6.2019 9:38
TruckersMP vývojář
Avatar
Neci Neco
Člen
Avatar
Neci Neco:19.9.2019 17:15

Ahoj, přidávámm se, opravdu skvělý seriál. Pouze poznámku k druhé žárovce, zřejmě platí: Jelikož HTTP akce "update()" je typu PUT, musíme ve formuláři opět použít Blade direktivu @method.

 
Odpovedať
19.9.2019 17:15
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovedá na Neci Neco
Jan Lupčík:19.9.2019 17:31

Ahoj, děkuji za zpětnou vazbu a taky za připomínku. Máš pravdu, během víkendu to opravím spolu s dalšími úpravami :)

Odpovedať
19.9.2019 17:31
TruckersMP vývojář
Avatar
Martin Š.
Člen
Avatar
Martin Š.:21.9.2019 14:41

Ahoj, seriál je super. Myslím si ale, že v této kapitole chybí při úpravě metody store() poznámka, že je třeba doplnit klauzuli use:

use App\Http\Requ­ests\Article\Sto­reRequest;

V Laravelu jsem začátečník - pro zběhlého uživatele je to asi samozřejmé, ale já jsem si to musel dohledat ve výsledných zdrojácích. Možná by se ta zmínka hodila i dalším začátečníkům. ;)

Díky za pěkný seriál!

Editované 21.9.2019 14:42
 
Odpovedať
21.9.2019 14:41
Avatar
Jan Lupčík
Tvůrce
Avatar
Jan Lupčík:14.10.2019 16:33

Martin Š. a pavlicekr: seriál byl aktualizovaný a obsahuje obě žádané změny (vysvětlení neexistující metody v předchozím díle a přidání importů). Děkuji vám ještě jednou za feedback k seriálu :)

Odpovedať
14.10.2019 16:33
TruckersMP vývojář
Avatar
Attila Jančik:7.1.2021 9:50

protože se změnili licenční podmínky TinyMCE a oznámení o tom zavazí, doporučuji použít v kódu:

<script type="text/javascript" src="{{ asset('https://cdnjs.cloudflare.com/ajax/libs/tinymce/4.9.2/tinymce.min.js') }}"></script>
Odpovedať
7.1.2021 9:50
čo zješ, to ti už nevezmú...
Avatar
Karel Čada
Člen
Avatar
Karel Čada:7.3.2021 14:21

Ahoj. Nějak mi nezabírá kontrola na duplicitu url.
Mohl bys mě prosím navést, kde by mohla být chyba.

public function rules(): array {
    return [
        'title' => ['required', 'min:3', 'max:80'],
        'url' => ['required', 'min:3', 'max:80',** 'unique:articles,url'],**
        'description' => ['required', 'min:25', 'max:255'],
        'content' => ['required', 'min:50'],
    ];
 
Odpovedať
7.3.2021 14:21
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.

Zatiaľ nikto nevložil komentár - buď prvý!