PageData

Stancy uses spatie/data-transfer-object to validate the passed in data and allow static analysis.

Properties

Your page data class should extend \Astrotomic\Stancy\Models\PageData and define all possible attributes via public properties including a doc-tag with all possible types (FQCN for objects).

app/Pages/Blog.php
<?php

namespace App\Pages;

class Blog extends PageData
{
    /** @var string */
    public $title;
    
    /** @var \Carbon\Carbon */
    public $date;

    /** @var \App\Pages\Post[] */
    public $posts;
}

Traits

The package comes with some ready to use traits with the most common attributes.

  • \Astrotomic\Stancy\Traits\PageHasContent adds the contents attribute (used by markdown content parsers)

  • \Astrotomic\Stancy\Traits\PageHasDate adds the date attribute (used by \Spatie\Sheets\PathParsers\SlugWithDateParser)

  • \Astrotomic\Stancy\Traits\PageHasOrder adds the order attribute (used by \Spatie\Sheets\PathParsers\SlugWithOrderParser)

  • \Astrotomic\Stancy\Traits\PageHasSlug adds the slug attribute (used by path parsers)

app/Pages/Blog.php
<?php

namespace App\Pages;

use Astrotomic\Stancy\Models\PageData;
use Astrotomic\Stancy\Traits\PageHasContent;
use Astrotomic\Stancy\Traits\PageHasSlug;

class Blog extends PageData
{
    use PageHasSlug, PageHasContent;
}

Routable & PageHasUrl

The package comes with a \Astrotomic\Stancy\Contracts\Routable interface which defines a getUrl() method. You can combine it with the \Astrotomic\Stancy\Traits\PageHasUrl trait which defines the toSitemapItem() method by using the getUrl() return value. It's also great to get the page url in a view or for the feed item transformation.

app/Pages/Blog.php
<?php

namespace App\Pages;

use Astrotomic\Stancy\Contracts\Routable;
use Astrotomic\Stancy\Models\PageData;
use Astrotomic\Stancy\Traits\PageHasUrl;

class Blog extends PageData implements Routable
{
    use PageHasUrl;

    public function getUrl(): string
    {
        return url('/blog');
    }
}

Last updated