dreadlabs / kunstmaan-content-api-bundle
Integrates a media type listener and a Content API layer into a Kunstmaan CMS instance.
Installs: 58
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- kunstmaan/bundles-cms: ~3.6.0
- willdurand/negotiation: ~2.0.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ~1.12.1
- pdepend/pdepend: ~2.2.4
- phploc/phploc: ~3.0.1
- phpmd/phpmd: ~2.4.3
- phpunit/phpunit: ~4.4
- sebastian/phpcpd: ~2.0.4
- squizlabs/php_codesniffer: ~2.7.0
This package is not auto-updated.
Last update: 2020-01-24 16:19:11 UTC
README
What does it do?
This bundle configures a Kunstmaan CMS instance in order to easily provide your content through a custom API format.
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.
Installation
composer install dreadlabs/kunstmaan-content-api-bundle
How to use?
-
Load the bundle in your
AppKernel
// snip new DreadLabs\KunstmaanContentApiBundle\DreadLabsKunstmaanContentApiBundle() // snap
-
Implement the
Kunstmaan\NodeBundle\Controller\SlugActionInterface
in yourPage
entities, implement thegetControllerAction
and point to the Bundle'sApiController
:// 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.
-
Implement the Bundle's
DreadLabs\KunstmaanContentApiBundle\Api\SerializableInterface
in order to point the KunstmaanNode
entity to the API representation:// 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 }
-
Implement an API type for serialization:
// 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.
TODO
- add configuration possibility for the
priorities
argument ofDreadLabs\KunstmaanContentApiBundle\EventListener\MediaTypeListener
- add configuration of expected
mediaType
inDreadLabs\KunstmaanContentApiBundle\Api\Factory
- add possibility to branch between
prod
anddev
environments inDreadLabs/KunstmaanContentApiBundle/DependencyInjection/DreadLabsKunstmaanContentApiExtension
- add possibility to override / configure
framework.serializer.cache
setting inDreadLabs/KunstmaanContentApiBundle/DependencyInjection/DreadLabsKunstmaanContentApiExtension
- Q: isn't that already possible by just set / unset the configuration keys in
app/config/config.yml
?
- Q: isn't that already possible by just set / unset the configuration keys in