---
title: "Fasáda Posts — Posts for Laravel | Roundly"
description: "Jedna fasáda pre všetky zápisy aj čítania — builder draft(), prechody cyklu, SEO, tagy, publishDue() a hľadanie podľa slugu v nakonfigurovanom modeli."
url: https://roundly-consulting.com/sk/open-source/navody/posts-for-laravel/fasada
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Posts for Laravel](https://roundly-consulting.com/sk/open-source/navody/posts-for-laravel.md)

# Fasáda Posts

Všetko, čo hostiteľská aplikácia s príspevkami robí, ide cez jednu fasádu RoundlyConsulting\\Posts\\Facades\\Posts, dostupnú aj ako alias Posts:

```php
use RoundlyConsulting\Posts\DataTransferObjects\SeoData;
use RoundlyConsulting\Posts\Facades\Posts;

// Write a post with the builder, then save it as a draft, publish it or schedule it
$post = Posts::draft()
    ->title('en', 'Hello world')->title('sk', 'Ahoj svet')
    ->perex('en', 'A short intro')
    ->content('en', '<p>…</p>')
    ->by($user)                                   // any author model, bigint/uuid/ulid keyed
    ->tags(['laravel', 'php'])                    // Tag models, or names found/created in the current locale
    ->seo(new SeoData(canonical: 'https://example.test/hello-world'))
    ->publish();                                  // or ->save() (draft), ->publish($at), ->schedule($at)

// Or from a DTO
Posts::create($createPostData);

// Lifecycle
Posts::publish($post);                            // now, or Posts::publish($post, $at)
Posts::schedule($post, now()->addDay());
Posts::archive($post);
Posts::unpublish($post);                          // back to draft
Posts::publishDue();                              // publish every scheduled post whose time has come → int

// SEO and tags
Posts::seo($post, new SeoData(metaTitle: 'Custom title', robots: 'index,follow'));
Posts::syncTags($post, ['eloquent', $tag]);

// Reads — always the configured posts.model
Posts::findBySlug('hello-world');                 // current locale → fallback → any locale
Posts::findBySlug('ahoj-svet', 'sk');             // exactly one locale — needs sk in sluggable.locales.supported
Posts::published()->latest('published_at')->paginate();
Posts::query()->inCategory('laravel')->get();
```

| Posts::… | Vracia | Čo robí |
| --- | --- | --- |
| `create(CreatePostData $data)` | `Post` | Vytvorí príspevok z DTO. |
| `draft()` | `PendingPost` | Fluentný builder — nižšie. |
| `publish(Post $post, ?CarbonInterface $at = null)` | `Post` | Publikuje teraz alebo k $at; spustí PostPublished. |
| `schedule(Post $post, CarbonInterface $at)` | `Post` | Naplánuje; spustí PostScheduled. |
| `archive(Post $post)` | `Post` | Archivuje so zachovaným dátumom publikovania; spustí PostArchived. |
| `unpublish(Post $post)` | `Post` | Vráti do konceptu a vymaže dátum publikovania; spustí PostDrafted. |
| `seo(Post $post, SeoData $data)` | `Post` | Uloží SEO polia a príspevok. |
| `syncTags(Post $post, iterable $tags)` | `Post` | Synchronizuje tagy — modely alebo názvy v aktuálnom jazyku. |
| `publishDue()` | `int` | Publikuje každý naplánovaný príspevok, ktorého čas nastal (to spúšťa posts:publish-scheduled). |
| `findBySlug(string $slug, ?string $locale = null)` | `?Post` | Nájde podľa slugu cez nakonfigurovaný posts.model. |
| `published()` | `Builder<Post>` | Publikované príspevky, ktorých dátum už nastal. |
| `query()` | `Builder<Post>` | Dotaz nad nakonfigurovaným posts.model. |
| `fake()` | `PostsFake` | Nasadí zaznamenávajúci fake — pozrite Testovanie. |

Čítania idú vždy cez nakonfigurovaný posts.model, takže findBySlug(), published() aj query() vrátia vašu podtriedu, ak ju nastavíte.

## Builder draft()

Posts::draft() vráti PendingPost. Nastavte polia pre jednotlivé jazyky, autora, tagy a SEO a ukončite ho jednou z koncových metód:

```php
$post = Posts::draft()
    ->title('en', 'Hello world')          // per-locale fields, any number of locales
    ->slug('sk', 'Vlastny Slug')          // manual slug: normalised + made unique
    ->perex('en', 'Intro')
    ->content('en', '<p>…</p>')           // stored and rendered as is — sanitise untrusted input first
    ->metaTitle('en', 'Meta title')
    ->metaDescription('en', 'Meta description')
    ->by($author)                         // any Model; its morph class + key
    ->tags(['php', $tag])                 // synced after create
    ->seo(new SeoData(canonical: '…'))
    ->save();                             // Draft

$data = Posts::draft()->title('en', 'Queued')->data();   // the CreatePostData it would create
```

| Ukončenie | Čo robí |
| --- | --- |
| `save(): Post` | create(data()) ako Draft, potom syncTags(), ak ste zadali tagy. |
| `publish(?CarbonInterface $at = null): Post` | save(), potom publish($post, $at). |
| `schedule(CarbonInterface $at): Post` | save(), potom schedule($post, $at). |
| `data(): CreatePostData` | DTO, ktoré by vytvoril — pre job vo fronte alebo create(). |

Každý krok ide cez manažér, takže fake zaznamená create, syncTags aj publish či schedule samostatne. Neuložený model autora sa ako autor nepriradí.

## Metódy modelu

Model si ponecháva pohodlné metódy a každá ide cez ten istý manažér — správanie, udalosti aj fake sú rovnaké, nech použijete ktorýkoľvek zápis. Podtrieda posts.model ich môže prepísať a doplniť vlastnú logiku:

```php
$post->publish();                  // == Posts::publish($post)
$post->schedule(now()->addDay());  // == Posts::schedule($post, $at)
$post->archive();                  // == Posts::archive($post)
$post->unpublish();                // == Posts::unpublish($post)
$post->syncTags(['php']);          // == Posts::syncTags($post, [...])
```

Fasáda nemá pod-prístupy ani handles s rozsahom: príspevok nepatrí pod žiadneho rodiča.

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/posts-for-laravel.md)
