Diskuze: laravel "předchozí díl"
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 8 zpráv z 8.
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 |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, tahle pasáž je nějaká divná.
$article::find(...)
Proměnná $article je výstupem dřívějšího dotazu a skoro určitě nejde o třídu se statickou metodou find. Podle mého jsi chtěl zavolat Laravel model, čili bych čekal něco jako.
$articl = Article::find($article->previous_part_id)->first();
Výpis bys měl ošetřit podmínkou. Ovšem ne podle toho, že tvůj článek obsahuje previous_part_id (tím řeš pouze to, zda se budeš dotazovat do DB), ale až podle toho, že jsi předchozí článek v DB našel.
$articl = Article::find($article->previous_part_id)->first();
@if ($articl !== null)
<div class="previous_part">
...
<a href="{{ url("article/" . $articl->url) }}">{{ $articl->title }}</a>
...
</div>
@endif
Jestli Ti můžu poradit, zaměř se při tom učení taky na to, jak si podobné dotazy vyřešit v Controlleru a nedávej je do šablony. Jinak Laravel má velmi dobrou dokumentaci, tak ji využij a podívej se na modely a blade šablony včetně if statements, protože tam máš další chybu v použití závorek, které do blade nepatří a ještě je máš i špatně ukončené, že by Ti zůstal jeden konec DIVu navíc.
Určit na to mrknu, ale každopádně když jsem zkusil to co jsi mi poslal tak mám nový problém
Call to a member function first() on null
Ahoj, rozhodně bych doporučoval získávat data v kontroleru a ne v
pohledu. Pohled má jen zobrazovat data, které dostane od kontroleru 
Každopádně k tvému problému: find() nic nenašel (=
null), proto ani first() nelze použít. Na
find() by se ani first() nemělo používat, jelikož
výsledkem je rovnou model, ne kolekce.
Navíc by bylo vhodné tohle převést do vztahu, abys to nemusel nijak
složitě získávat. Nevím, u jaké lekce aktuálně jsi, probírá se to
dále v seriálu.
Ahoj, máš pravdu, k find() už first() nepatří. Moje chyba.
Mám ho za sebou, ale procházím si to znovu. Kvůli některým věcem. Každopádně mě nenapadlo že by to šlo vyřešit i pomocí vztahu.
Tak asi budu potřebovat lehce nakopnout a to s výpisem. Takže co mám, resp. co jsem udělal.
Rozhodl jsem se pro vztah takže to řeším eloquent vztahem hasOne. Vztah řeším v rámci jedné tabulky.
Vztahy jsem doplnil takto:
public function serial()
{
return $this->hasOne('article', 'previous_part_id');
}
public function article() {
return $this->belongsTo('article', 'previous_part_id');
}
První pokus o výpis skončil chybou: Class 'article' not found
return view('article.show', ['article' => $article, 'previous' => Article::find(1)->serial]);
Druhý pokus mi vyhodil stejnou chybu. Zde jsem se o výpis pokusil již v show.blade.php bez deklarace proměnné
{{ $article->serial->previous_part_id }}
//Zkoušel jsem i variantu
{{ $article->article->previous_part_id }}
Ve vztahu se definuje odkaz na třídu. Ty jsi pouze předal textový
řetězec "article". Proto ti to správně vyhazuje chybu, že
třída article nebyla nalezena. Správné možnosti tedy jsou:
public function previous()
{
return $this->hasOne('App\Article', 'previous_part_id');
}
Nebo druhá možnost, kterou preferuji více:
public function previous()
{
return $this->hasOne(static::class, 'previous_part_id'); // normálně by to bylo Article::class, ale jelikož se jedná o stejnou třídu, lze použít static::class
}
Zobrazeno 8 zpráv z 8.
