2017 © Pedro Peláez
 

symfony-bundle kunstmaan-content-api-bundle

Integrates a media type listener and a Content API layer into a Kunstmaan CMS instance.

image

dreadlabs/kunstmaan-content-api-bundle

Integrates a media type listener and a Content API layer into a Kunstmaan CMS instance.

  • Wednesday, October 26, 2016
  • by dreadwarrior
  • Repository
  • 1 Watchers
  • 1 Stars
  • 55 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 4 Versions
  • 0 % Grown

The README.md

Kunstmaan Content API

What does it do?

This bundle configures a Kunstmaan CMS instance in order to easily provide your content through a custom API format., (*1)

It uses willdurand/negotation in order to inject a Request attribute media_type which is used to delegate to a serialization of a Page entity (Node) into a specific response format., (*2)

Installation

composer install dreadlabs/kunstmaan-content-api-bundle

How to use?

  1. Load the bundle in your AppKernel, (*3)

     // snip
     new DreadLabs\KunstmaanContentApiBundle\DreadLabsKunstmaanContentApiBundle()
     // snap
  2. Implement the Kunstmaan\NodeBundle\Controller\SlugActionInterface in your Page entities, implement the getControllerAction and point to the Bundle's ApiController:, (*4)

     // src/Acme/WebsiteBundle/Entity/Pages/HomePage.php
     <?php
     class HomePage implements [...], SlugActionInterface
     {
         // snip
    
         /**
          * @return string
          *
          */
         public function getControllerAction()
         {
             return 'dreadlabs_kunstmaan_content_api.controller:getAction';
         }
    
         // snap
     }

    Important: Make sure, you are using the Controllers as Service notation., (*5)

  3. Implement the Bundle's DreadLabs\KunstmaanContentApiBundle\Api\SerializableInterface in order to point the Kunstmaan Node entity to the API representation:, (*6)

     // src/Acme/WebsiteBundle/Entity/Pages/HomePage.php
     <?php
     use Acme\WebsiteBundle\Api\Page\Home as ApiType;
    
     class HomePage implements [...], SerializableInterface
     {
         // snip
    
         /**
          * Returns the name of the API type (class).
          *
          * @return string
          */
         public function getApiType()
         {
             return ApiType::class;
         }
    
         // snap
     }
  4. Implement an API type for serialization:, (*7)

     // src/Acme/WebsiteBundle/Api/Page/Home.php
     <?php
     class Home
     {
         /**
          * @var string
          */
         public $title;
    
         public function __construct($title)
         {
            $this->title = $title;
         }
     }

    Read the Serializer documentation and the Serializer cookbook to learn more about serialization of your API types., (*8)

TODO

  • add configuration possibility for the priorities argument of DreadLabs\KunstmaanContentApiBundle\EventListener\MediaTypeListener
  • add configuration of expected mediaType in DreadLabs\KunstmaanContentApiBundle\Api\Factory
  • add possibility to branch between prod and dev environments in DreadLabs/KunstmaanContentApiBundle/DependencyInjection/DreadLabsKunstmaanContentApiExtension
  • add possibility to override / configure framework.serializer.cache setting in DreadLabs/KunstmaanContentApiBundle/DependencyInjection/DreadLabsKunstmaanContentApiExtension
    • Q: isn't that already possible by just set / unset the configuration keys in app/config/config.yml?

The Versions