2017 © Pedro Peláez
 

project base-symfony

API forked of api-platform/api-platform

image

api-code/base-symfony

API forked of api-platform/api-platform

  • Sunday, June 18, 2017
  • by jairog12
  • Repository
  • 1 Watchers
  • 2 Stars
  • 11 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 4 Versions
  • 0 % Grown

The README.md

API BASE SYMFONY

  composer create-project api-code/base-symfony YOUR_FOLDER -s dev

This is a fork of https://api-platform.com/. Is for personal use, and including - Configuration basic of api platform - Integrate a JWT - Doctrine migrations, fixtures and extensions. - JMose scheduler for cron jobs - Email with spool command!, (*1)

Remember, is for PHP >= 7.0, (*2)

BEGIN


bin/console doctrine:database:create bin/console doctrine:schema:create # or the best way for databse, use migrations!! bin/console doctrine:migrations :diff Generate a migration by comparing your current database to your mapping information. :execute Execute a single migration version up or down manually. :generate Generate a blank migration class. :migrate Execute a migration to a specified version or the latest available version. :status View the status of a set of migrations. :version Manually add and delete migration versions from the version table. bin/console assets:install bin/console fos:user:create # Important for a Token! bin/console server:start # For Jmose scheduler bin/console scheduler:execute # Email with spool, program a scheduler with this strategy bin/console swiftmailer:spool:clear-failures

http://localhost:8000/docs, (*3)

Cambiar llaves de JWT

$ mkdir -p var/jwt # For Symfony3+, no need of the -p option
$ openssl genrsa -out var/jwt/private.pem -aes256 4096
$ openssl rsa -pubout -in var/jwt/private.pem -out var/jwt/public.pem

Obtain a token

We use https://github.com/lexik/LexikJWTAuthenticationBundle, (*4)

curl -X POST http://localhost:8000/api/login_check -d _username=johndoe -d _password=test

In each request add this header Authorization: Bearer tokenJWT, (*5)

Add more controllers

First option

Routes with yml in app/config/routing.yml, (*6)

# app/config/routing.yml
book_special:
    path: '/productsjairo/{id}/special'
    methods:  ['GET']
    defaults:
        _controller: 'AppBundle:Products:special'
        _api_resource_class: 'AppBundle\Entity\Product'
        _api_item_operation_name: 'special'
Second option

Router with annotations in each action of a controller, (*7)

# In a controller
 /**
     * Example with annotations
     * @Route(
     *     name="demo_special",
     *     path="/demo/{id}/special",
     *     defaults={"_api_resource_class"=Product::class, "_api_item_operation_name"="specialdemo"}
     * )
     * @Method("GET")
     */
    public function demoAction()
    {
        $em = $this->getDoctrine()->getManager();
        $products = $em->getRepository(Product::class)->findAll();
        return $products;
    }

Subscribe events for modify request

In src/AppBundle/EventSubscriber add a file name ProductMailSubscriber.php, (*8)


<?php // other uses use Doctrine\ORM\EntityManager; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; final class ProductMailSubscriber implements EventSubscriberInterface { private $mailer; private $em; protected $authorizationChecker; protected $token; public function __construct(\Swift_Mailer $mailer, EntityManager $em, AuthorizationCheckerInterface $authorizationChecker, \Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage $token_storage) { // Initilize vars!!! } public static function getSubscribedEvents() { return [ //KernelEvents::VIEW => [['sendMail', EventPriorities::POST_WRITE]], KernelEvents::VIEW => [['accionDemo', EventPriorities::POST_WRITE]] ]; }

For more events https://api-platform.com/docs/core/events, (*9)

Add custom filter

<?php

... other use

/**
 * Product
 * @ApiResource(attributes={"filters"={"regexp"}})  /--->>>Add filter regexp
 * @ORM\Table(name="product")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ProductRepository")
 */
class Product
{

Now in the url you can:, (*10)


../api/products?id=[1,2]&number=20&description=otr

The Versions