Konfigurácia
Každý kľúč má predvolenú hodnotu a tie bežné sa čítajú z env, takže balík funguje aj bez publikovanej konfigurácie. Publikovaný config/posts.php v plnom znení:
return [
'model' => RoundlyConsulting\Posts\Models\Post::class,
'key_type' => env('POSTS_KEY_TYPE', 'bigint'), // your author model's key
'primary_key_type' => env('POSTS_PRIMARY_KEY_TYPE', 'bigint'), // the posts tables' own ids
'tables' => [
'posts' => 'posts',
'categories' => 'post_categories',
'category_post' => 'category_post',
'tags' => 'post_tags',
'tag_post' => 'post_tag',
],
'author' => [
'morph-name' => 'author',
'nullable' => true,
],
'locales' => [
'fallback' => env('POSTS_FALLBACK_LOCALE', config('app.fallback_locale', 'en')),
],
'slugs' => [
'source' => 'title',
'separator' => '-',
'unique' => true,
'route-binding' => true,
'history' => env('POSTS_SLUG_HISTORY', false),
'lock-when-published' => false,
],
'seo' => [
'site-name' => env('POSTS_SITE_NAME'),
'twitter-site' => env('POSTS_TWITTER_SITE'),
'default-card' => 'summary_large_image', // 'summary' | 'summary_large_image' | 'app' | 'player'
'default-robots' => 'index,follow',
],
'json-ld' => [
'type' => 'BlogPosting', // 'BlogPosting' | 'Article' (anything else throws)
'author-attribute' => 'name',
'publisher' => [
'name' => env('POSTS_PUBLISHER_NAME'),
'logo' => env('POSTS_PUBLISHER_LOGO'),
],
],
'media' => [
'featured_bucket' => 'featured',
'gallery_bucket' => 'gallery',
'content_bucket' => 'content',
'disk' => env('POSTS_MEDIA_DISK'),
'featured_fallback_url' => env('POSTS_MEDIA_FEATURED_FALLBACK'),
'responsive_widths' => null,
'seo_og_image' => true,
'og_variant' => '',
'warm_on_publish' => true,
'inline' => [
'enabled' => true,
'default_variant' => '',
'on_missing' => 'strip', // 'strip' | 'keep' (anything else throws)
],
],
'moderation' => [
'on_resolved' => 'archive', // 'archive' | 'draft' | null — anything else throws
'auto_unpublish' => true,
],
];Všetky kľúče
| Kľúč | Predvolené | Env | Účel |
|---|---|---|---|
model | Post::class | — | Model príspevku — nasmerujte ho na vlastnú podtriedu. |
key_type | bigint | POSTS_KEY_TYPE | Odchádzajúci: typ kľúča vášho modelu autora (bigint, uuid alebo ulid); určuje author_id. Čokoľvek iné vyhodí InvalidConfigurationException. |
primary_key_type | bigint | POSTS_PRIMARY_KEY_TYPE | Prichádzajúci: typ kľúča tabuliek príspevkov, kategórií, tagov a ich pivotov (bigint, uuid alebo ulid). Čokoľvek iné vyhodí InvalidConfigurationException. |
tables.posts | posts | — | Tabuľka príspevkov. |
tables.categories | post_categories | — | Tabuľka kategórií. |
tables.category_post | category_post | — | Pivot kategória ⇄ príspevok. |
tables.tags | post_tags | — | Tabuľka tagov. |
tables.tag_post | post_tag | — | Pivot tag ⇄ príspevok. |
author.morph-name | author | — | Názov morph relácie a prefix stĺpcov (author_type / author_id). |
author.nullable | true | — | Či môže príspevok existovať bez autora. |
locales.fallback | app.fallback_locale | POSTS_FALLBACK_LOCALE | Záložný jazyk pre čítanie prekladov a reťazec slugov. |
slugs.source | title | — | Atribút, z ktorého vznikajú slugy príspevkov (kategórie a tagy vždy z name). |
slugs.separator | - | — | Oddeľovač slov v slugu. |
slugs.unique | true | — | Unikátnosť v rámci jazyka (-2, -3, …, vrátane zmazaných záznamov); pri migrácii vytvorí aj unikátne indexy pre každý jazyk. |
slugs.route-binding | true | — | Slug je route kľúčom príspevku; {post} sa viaže naprieč reťazcom jazykov. |
slugs.history | false | POSTS_SLUG_HISTORY | Pamätá si vyradené slugy a staré URL presmeruje cez 301 (vyžaduje sluggable-migrations). |
slugs.lock-when-published | false | — | Zmrazí slugy publikovaného príspevku; ručná zmena vyhodí SlugLockedException. |
seo.site-name | null | POSTS_SITE_NAME | Predvolený og:site_name. |
seo.twitter-site | null | POSTS_TWITTER_SITE | Predvolený účet twitter:site. |
seo.default-card | summary_large_image | — | Predvolený typ twitter:card: summary, summary_large_image, app alebo player; čokoľvek iné vyhodí výnimku. |
seo.default-robots | index,follow | — | Predvolená direktíva robots. |
json-ld.type | BlogPosting | — | schema.org @type: BlogPosting alebo Article; čokoľvek iné vyhodí výnimku. |
json-ld.author-attribute | name | — | Atribút modelu autora použitý ako meno autora. |
json-ld.publisher.name | null | POSTS_PUBLISHER_NAME | Názov vydavateľa (ak nie je nastavený, publisher sa vynechá). |
json-ld.publisher.logo | null | POSTS_PUBLISHER_LOGO | URL loga vydavateľa. |
media.featured_bucket | featured | — | Skupina titulného obrázka (jeden súbor). |
media.gallery_bucket | gallery | — | Skupina galérie (viac súborov). |
media.content_bucket | content | — | Skupina médií vložených do textu cez [media:UUID]. |
media.disk | null | POSTS_MEDIA_DISK | Disk pre médiá príspevkov (null = predvolený disk media-library). |
media.featured_fallback_url | null | POSTS_MEDIA_FEATURED_FALLBACK | URL, ktoré vráti featuredImageUrl(), keď titulný obrázok chýba (null = ''). |
media.responsive_widths | null | — | Rebrík responzívnych šírok z kladných celých čísel (null = predvolený z media-library, [] = žiadne varianty); iná položka vyhodí výnimku. |
media.seo_og_image | true | — | Ak og:image chýba, použije sa titulný obrázok (aj v JSON-LD). |
media.og_variant | '' | — | Variant pre tento fallback ('' = originál) — taký, ktorý media-library generuje pre skupinu featured, napr. responsive-640; kým neexistuje alebo pri neznámom názve sa použije URL originálu. |
media.warm_on_publish | true | — | Pri publikovaní zaradí generovanie variantov médií do fronty. |
media.inline.enabled | true | — | Rozbalí tokeny [media:UUID] v renderContent(). |
media.inline.default_variant | '' | — | Variant pre tokeny bez |variant; rovnako ako pri vlastnom variante tokenu sa pri neznámom či ešte nevygenerovanom vykreslí originál. |
media.inline.on_missing | strip | — | Token s médiom, ktoré príspevok nevlastní, odstráni (strip) alebo ponechá (keep); čokoľvek iné vyhodí výnimku. |
moderation.on_resolved | archive | — | Akcia pri potvrdenom nahlásení publikovaného alebo naplánovaného príspevku: archive, draft, alebo null či prázdna hodnota (vypnuté). Preklep vyhodí výnimku namiesto toho, aby sa automatické zrušenie publikovania preskočilo. |
moderation.auto_unpublish | true | — | Archivuje publikovaný alebo naplánovaný príspevok, ktorý prekročí globálny reports.threshold. |
Prostredie (env)
Hodnoty špecifické pre web sa nastavujú cez env, takže väčšina aplikácií konfiguráciu vôbec nepublikuje:
POSTS_KEY_TYPE=bigint
POSTS_PRIMARY_KEY_TYPE=bigint
POSTS_FALLBACK_LOCALE=en
POSTS_SLUG_HISTORY=false
POSTS_SITE_NAME="Example Blog"
POSTS_TWITTER_SITE=@example
POSTS_PUBLISHER_NAME="Example Ltd"
POSTS_PUBLISHER_LOGO=https://example.com/logo.png
POSTS_MEDIA_DISK=public
POSTS_MEDIA_FEATURED_FALLBACK=https://example.com/images/placeholder.pngStriktné hodnoty
Každý prepínač typu bool sa číta striktne: true/1/on/yes ho zapnú, false/0/off/no vypnú, prázdna hodnota (POSTS_SLUG_HISTORY=) sa považuje za nenastavenú, takže platí predvolená, a čokoľvek iné (napríklad POSTS_SLUG_HISTORY=disabled) vyhodí RoundlyConsulting\PackageToolkit\Exceptions\InvalidConfigurationException namiesto toho, aby sa potichu prečítalo ako predvolená hodnota.
Rovnako striktne sa čítajú aj všetky ostatné nastavenia. Nastavenie bez hodnoty — kľúč chýba, je null alebo je prázdny ako riadok POSTS_SITE_NAME= v hostiteľskej aplikácii — použije svoju predvolenú hodnotu a voliteľné nastavenie (údaje vydavateľa pre SEO a JSON-LD, disk médií či záložná URL) zostane nenastavené. Reťazcové nastavenie — názov tabuľky či bucketu, názov morph relácie, zdroj alebo oddeľovač slugu, jazyk, hodnota SEO či JSON-LD, disk médií alebo záložná URL — musí byť pri nastavení reťazec: hodnota, ktorá nie je reťazcom, vyhodí výnimku, namiesto pretypovania na '' či nahradenia predvolenou hodnotou. Hodnota seo.default-card, json-ld.type, media.inline.on_missing či moderation.on_resolved mimo povoleného zoznamu vyhodí výnimku, rovnako ako responzívna šírka, ktorá nie je kladným celým číslom. Názvy variantov — media.og_variant a media.inline.default_variant — prijmú akýkoľvek reťazec, pričom '' znamená originál.
Kontrola nastavenia
php artisan aboutphp artisan about zobrazí sekciu Posts: základný názov modelu, oba typy kľúčov, či je autor voliteľný, počet tabuliek (DEFAULT alebo CUSTOMISED — prázdny názov tabuľky sa počíta ako predvolený, ktorý modely používajú, nezmyselný sa zobrazí ako INVALID), väzbu rôut, unikátne slugy, históriu a zámok slugov, disk médií (SET alebo MEDIA DEFAULT), médiá v texte, predgenerovanie pri publikovaní, prítomnosť SEO a JSON-LD údajov a prepínače moderácie. Nikdy nevypíše nakonfigurovanú hodnotu, ako je názov tabuľky, disk, vydavateľ či názov webu. Chybné nastavenie disku médií, médií v texte, SEO, JSON-LD či moderácie sa zobrazí ako INVALID.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.