api-code / base-symfony
API forked of api-platform/api-platform
Installs: 19
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 0
Open Issues: 0
Type:project
Requires
- php: >=7.0
- api-platform/core: ^2.0
- beberlei/doctrineextensions: ^1.0
- doctrine/doctrine-bundle: ^1.6
- doctrine/doctrine-cache-bundle: ^1.2
- doctrine/doctrine-migrations-bundle: ^1.0
- doctrine/orm: ^2.5
- dunglas/action-bundle: ^0.3
- friendsofsymfony/user-bundle: ^2.0
- incenteev/composer-parameter-handler: ^2.0
- jmose/command-scheduler-bundle: ^1.2
- lexik/jwt-authentication-bundle: ^2.4
- nelmio/api-doc-bundle: ^2.13
- nelmio/cors-bundle: ^1.4
- phpdocumentor/reflection-docblock: ^3.0
- sensio/distribution-bundle: ^5.0
- sensio/framework-extra-bundle: ^3.0.2
- symfony/monolog-bundle: ^3.0
- symfony/swiftmailer-bundle: ^2.3
- symfony/symfony: 3.2.*
Requires (Dev)
- api-platform/schema-generator: ^1.2
- behat/behat: ^3.1
- behat/mink: ^1.7
- behat/mink-browserkit-driver: ^1.3.1
- behat/mink-extension: ^2.2
- behat/symfony2-extension: ^2.1
- behatch/contexts: ^2.5
- doctrine/doctrine-fixtures-bundle: ^2.3
- sensio/generator-bundle: ^3.0
- symfony/phpunit-bridge: ^3.0
This package is not auto-updated.
Last update: 2025-03-07 22:39:00 UTC
README
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!
Remember, is for PHP >= 7.0
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
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
curl -X POST http://localhost:8000/api/login_check -d _username=johndoe -d _password=test
Header
In each request add this header Authorization: Bearer tokenJWT
Add more controllers
First option
Routes with yml in app/config/routing.yml
# 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
# 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
<?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
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:
../api/products?id=[1,2]&number=20&description=otr