Tool Set (part 2)

Spread the love

This is a continuation of the part one post found here

My IDE

Since I build all my new projects in SPA style with Symfony/api-platform backend, I find it helpful to separate my IDEs. I guess this is not ideal, because each IDE has its own style shortcuts… but I have my PHP workflow in PHPStorm, and my Javascript/HTML workflow in VS Code

In the previous part we launched our app with the symfony binary

symfony serve

Now our API will be listening on http://127.0.0.1:8000

Installing maker is a nice easy way to build your entities, and also immediately expose the API.

composer require maker --dev

I wish there was a nice JWT login scaffold available for API platform, but there isn’t. So, my next step is to create the user in Symfony

symfony console make:user

Then make a controller for managing login and registraion. This would be a normal Controller responding in JSON.

Start by making the controller

symfony console make:controller UserController

I use something like the following in mine

<?php

namespace App\Controller;

use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;

class SecurityController extends AbstractController
{
    /**
     * @Route("/login", name="app_login", methods={"POST"})
     */
    public function login()
    {
        return $this->json([
                'user' => $this->getUser() ? $this->getUser()->getId() : null]
        );
    }

    /**
     * @Route("/register", name="app_register", methods={"POST"})
     */
    public function register(Request $request,UserPasswordEncoderInterface $encoder, EntityManagerInterface $entityManager,ValidatorInterface $validator)
    {
        $user = new User();
        $user->setEmail($data['email']);
        $user->setPassword($encoder->encodePassword($user, $data['plainPassword']));

        $entityManager->persist($user);
        $entityManager->flush();
        return new JsonResponse($user);
    }


}

The you’ll need to install the bundle for managing JWT. The instructions are a bit detailed, so get it from the source

Your API is almost ready to go, just make a entity to automatically expose the API.

symfony console make:entity

Now you are well on your way, register, login, and an exposed entity.

You can view your API at https://127.0.0.1:8000/api/docs and if you password protext it, use a tool like postman to login and get a token, so you can authorize and test your API via the docs.

Then you need a front end…