Wallogit.com
2017 © Pedro PelĂĄez
A bundle providing a RESTful API to handle business
Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:, (*1)
$ composer require aescarcha/business "~1"
This command requires you to have Composer installed globally, as explained in the installation chapter of the Composer documentation., (*2)
composer require friendsofsymfony/rest-bundle composer require jms/serializer-bundle composer require nelmio/api-doc-bundle composer require friendsofsymfony/user-bundle composer require aescarcha/user-bundle dev-master composer require league/fractal composer require stof/doctrine-extensions-bundle composer require stof/doctrine-extensions-bundle composer require beberlei/DoctrineExtensions
Then, enable the bundle by adding it to the list of registered bundles
in the app/AppKernel.php file of your project:, (*3)
<?php
// app/AppKernel.php
// ...
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ...
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
new FOS\RestBundle\FOSRestBundle(),
new FOS\UserBundle\FOSUserBundle(),
new JMS\SerializerBundle\JMSSerializerBundle(),
new Nelmio\ApiDocBundle\NelmioApiDocBundle(),
new Aescarcha\UserBundle\AescarchaUserBundle(),
new Aescarcha\BusinessBundle\AescarchaBusinessBundle(),
);
// ...
}
// ...
}
Register doctrine extensions in app/autoload.php, this is required for distance querying businesses, (*4)
$classLoader = new \Doctrine\Common\ClassLoader('DoctrineExtensions', __DIR__.'/../vendor/beberlei-doctrine-extensions');
$classLoader->register();
Enable the routes in app/config/routing.yml, (*5)
aescarcha_business:
type: rest
resource: "@AescarchaBusinessBundle/Resources/config/routing.yml"
prefix: /
Configure the bundles in app/config/config.yml, (*6)
# app/config/config.yml
nelmio_api_doc: ~
fos_rest:
routing_loader:
default_format: json # All responses should be JSON formated
include_format: false # We do not include format in request, so that all responses
# will eventually be JSON formated
body_listener: # Decode full json bodies
decoders:
son: fos_rest.decoder.json
fos_user:
db_driver: orm
firewall_name: api # Seems to be used when registering user/reseting password,
# but since there is no "login", as so it seems to be useless in
# our particular context, but still required by "FOSUserBundle"
user_class: Aescarcha\UserBundle\Entity\User
orm:
filters:
softdeleteable:
class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
enabled: true
Add this to app/config/security.yml, (*7)
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
providers:
fos_userbundle:
id: fos_user.user_provider.username # fos_user.user_provider.username_email does not seem to work (OAuth-spec related ("username + password") ?)
firewalls:
oauth_token: # Everyone can access the access token URL.
pattern: ^/oauth/v2/token
security: false
api:
pattern: ^/ # All URLs are protected
fos_oauth: true # OAuth2 protected resource
stateless: true # Do no set session cookies
anonymous: false # Anonymous access is not allowed
Add the following to app/config/routing.yml to be able to use the docs :, (*8)
# app/config/routing.yml
NelmioApiDocBundle:
resource: "@NelmioApiDocBundle/Resources/config/routing.yml"
prefix: /api/doc
Add to app/config/services.yml, (*9)
services: gedmo.listener.timestampable: class: Gedmo\Timestampable\TimestampableListener tags: - { name: doctrine.event_subscriber, connection: default } calls: - [ setAnnotationReader, [ "@annotation_reader" ] ], (*10)
gedmo.listener.softdeleteable:
class: Gedmo\SoftDeleteable\SoftDeleteableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ "@annotation_reader" ] ]
To test this bundle, you need to download and enable the following bundles, (*11)
"doctrine/doctrine-fixtures-bundle": "^2.3", "liip/functional-test-bundle": "^1.6" $bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(); $bundles[] = new Liip\FunctionalTestBundle\LiipFunctionalTestBundle();
And I recommend using this config in config_test.yml to use sqlite, (*12)
doctrine:
dbal:
default_connection: default
connections:
default:
driver: pdo_sqlite
path: %kernel.cache_dir%/test.db
liip_functional_test:
cache_sqlite_db: true