NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Posts for Laravel

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
modelPost::class—Model príspevku — nasmerujte ho na vlastnú podtriedu.
key_typebigintPOSTS_KEY_TYPEOdchádzajúci: typ kľúča vášho modelu autora (bigint, uuid alebo ulid); určuje author_id. Čokoľvek iné vyhodí InvalidConfigurationException.
primary_key_typebigintPOSTS_PRIMARY_KEY_TYPEPrichádzajúci: typ kľúča tabuliek príspevkov, kategórií, tagov a ich pivotov (bigint, uuid alebo ulid). Čokoľvek iné vyhodí InvalidConfigurationException.
tables.postsposts—Tabuľka príspevkov.
tables.categoriespost_categories—Tabuľka kategórií.
tables.category_postcategory_post—Pivot kategória ⇄ príspevok.
tables.tagspost_tags—Tabuľka tagov.
tables.tag_postpost_tag—Pivot tag ⇄ príspevok.
author.morph-nameauthor—Názov morph relácie a prefix stĺpcov (author_type / author_id).
author.nullabletrue—Či môže príspevok existovať bez autora.
locales.fallbackapp.fallback_localePOSTS_FALLBACK_LOCALEZáložný jazyk pre čítanie prekladov a reťazec slugov.
slugs.sourcetitle—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.uniquetrue—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-bindingtrue—Slug je route kľúčom príspevku; {post} sa viaže naprieč reťazcom jazykov.
slugs.historyfalsePOSTS_SLUG_HISTORYPamätá si vyradené slugy a staré URL presmeruje cez 301 (vyžaduje sluggable-migrations).
slugs.lock-when-publishedfalse—Zmrazí slugy publikovaného príspevku; ručná zmena vyhodí SlugLockedException.
seo.site-namenullPOSTS_SITE_NAMEPredvolený og:site_name.
seo.twitter-sitenullPOSTS_TWITTER_SITEPredvolený účet twitter:site.
seo.default-cardsummary_large_image—Predvolený typ twitter:card: summary, summary_large_image, app alebo player; čokoľvek iné vyhodí výnimku.
seo.default-robotsindex,follow—Predvolená direktíva robots.
json-ld.typeBlogPosting—schema.org @type: BlogPosting alebo Article; čokoľvek iné vyhodí výnimku.
json-ld.author-attributename—Atribút modelu autora použitý ako meno autora.
json-ld.publisher.namenullPOSTS_PUBLISHER_NAMENázov vydavateľa (ak nie je nastavený, publisher sa vynechá).
json-ld.publisher.logonullPOSTS_PUBLISHER_LOGOURL loga vydavateľa.
media.featured_bucketfeatured—Skupina titulného obrázka (jeden súbor).
media.gallery_bucketgallery—Skupina galérie (viac súborov).
media.content_bucketcontent—Skupina médií vložených do textu cez [media:UUID].
media.disknullPOSTS_MEDIA_DISKDisk pre médiá príspevkov (null = predvolený disk media-library).
media.featured_fallback_urlnullPOSTS_MEDIA_FEATURED_FALLBACKURL, ktoré vráti featuredImageUrl(), keď titulný obrázok chýba (null = '').
media.responsive_widthsnull—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_imagetrue—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_publishtrue—Pri publikovaní zaradí generovanie variantov médií do fronty.
media.inline.enabledtrue—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_missingstrip—Token s médiom, ktoré príspevok nevlastní, odstráni (strip) alebo ponechá (keep); čokoľvek iné vyhodí výnimku.
moderation.on_resolvedarchive—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_unpublishtrue—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.png

Striktné 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 about

php 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 kryptomien

Odoslaní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.