tentakelfabrik/super-gear-directus

0.3.0 2020-06-10 07:43 UTC

This package is auto-updated.

Last update: 2020-08-10 08:08:15 UTC


README

Small Libary to request Directus API. Works with http://flightphp.com/.

Install

composer require tentakelfabrik/super-gear-directus

Requirements

For handle token and url for the Directus Server you have to use https://github.com/vlucas/phpdotenv,

env('DIRECTUS_API_URL'),
env('DIRECTUS_API_TOKEN')

Controller

Example how to use SuperGear\Directus\Controllers\DirectusControllerAbstract,

class PageController extends DirectusControllerAbstract
{
    /** slug for home */
    const HOME_SLUG = 'home';

    /** set default view */
    protected $defaultView = 'page/default';

    /**
     * get home page from slug
     *
     *
     */
    public function indexAction()
    {
        $repository = Manager::get('Page');
        $page = $repository->findOneBySlug(self::HOME_SLUG);

        if ($this->notFound($page)) {
            $this->app->redirect('404');
        }

        $this->render($page);
    }

    /**
     *  get single page from slug
     *
     *
     *  @param string $slug
     */
    public function getAction($slug)
    {
        $repository = Manager::get('Page');
        $page = $repository->findOneBySlug($slug);

        if ($this->notFound($page)) {
            $this->app->redirect('404');
        }

        $this->render($page);
    }

    /**
     * if page not found
     *
     */
    public function notFoundAction()
    {
        $page = [
            'data' => [
                'view' => 'page/404'
            ]
        ];

        $this->render($page);
    }
}

Repositories

Example to use the SuperGear\Directus\Respositories\RepositoryAbstract,

class PageRepository extends RepositoryAbstract
{
    /** name of the collection */
    protected $name = 'page';

    /**
     *  find single page with a slug,
     *  page must be published
     *
     *  @param  string $slug
     *  @return array
     */
    public function findOneBySlug($slug)
    {
        return $this->itemCollection->findOne($this->name, [
            'filter[slug][eq]' => $slug,
            'filter[status][eq]' => 'published'
        ]);
    }

    /**
     *  find single page with a slug,
     *  page must be published
     *
     *  @param  string $slug
     *  @return array
     */
    public function findByView($view)
    {
        return $this->itemCollection->find($this->name, [
            'filter[view][eq]' => $view,
            'filter[status][eq]' => 'published'
        ]);
    }
}