Skip to content
This repository was archived by the owner on Aug 6, 2025. It is now read-only.

jungi-php/framework-extra-bundle

 
 

Repository files navigation

JungiFrameworkExtraBundle

Build Status PHP

This bundle adds additional features whose main purpose is to facilitate request/response operations.

Attributes (aka annotations):

Installation

composer require jungi/framework-extra-bundle

Documentation

GitBook

Quick insight

#[Attribute]

namespace App\Controller;

use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Routing\Attribute\Route;
use Jungi\FrameworkExtraBundle\Attribute\QueryParams;
use Jungi\FrameworkExtraBundle\Attribute\RequestBody;
use Jungi\FrameworkExtraBundle\Attribute\ResponseBody;
use Jungi\FrameworkExtraBundle\Attribute\QueryParam;
use Jungi\FrameworkExtraBundle\Attribute\RequestParam;

#[Route('/users')]
class UserController
{
    #[Route('/{userId}/residential-address', methods: ['PATCH'])]
    public function changeResidentialAddress(string $userId, #[RequestBody] UserResidentialAddressData $data)
    {
        // ..
    }

    #[Route('/{userId}/files/{fileName}', methods: ['PUT'])]
    public function uploadFile(string $userId, string $fileName, #[RequestBody] UploadedFile $file)
    {
        // ..
    }

    #[Route('/{userId}/avatar', methods: ['PATCH'])]
    public function replaceAvatar(string $userId, #[RequestParam] UploadedFile $file,  #[RequestParam] string $title)
    {
        // ..
    }

    #[Route(methods: ['GET'])]
    public function getUsers(#[QueryParam] ?int $limit = null, #[QueryParam] ?int $offset = null)
    {
        // ..
    }

    #[Route(methods: ['GET'])]
    #[ResponseBody]
    public function filterUsers(#[QueryParams] FilterUsersDto $filterData)
    {
        // ..
        /** @var UserData[] $filteredUsers */
        return $filteredUsers;
    }
}

@Annotation

namespace App\Controller;

use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Routing\Annotation\Route;
use Jungi\FrameworkExtraBundle\Annotation\QueryParams;
use Jungi\FrameworkExtraBundle\Annotation\RequestBody;
use Jungi\FrameworkExtraBundle\Annotation\ResponseBody;
use Jungi\FrameworkExtraBundle\Annotation\QueryParam;
use Jungi\FrameworkExtraBundle\Annotation\RequestParam;

/**
 * @Route("/users")
 */
class UserController
{
    /**
     * @Route("/{userId}/residential-address", methods={"PATCH"})
     * @RequestBody("data")
     */
    public function changeResidentialAddress(string $userId, UserResidentialAddressData $data)
    {
        // ..
    }

    /**
     * @Route("/{userId}/files/{fileName}", methods={"PUT"})
     * @RequestBody("file")
     */
    public function uploadFile(string $userId, string $fileName, UploadedFile $file)
    {
        // ..
    }

    /**
     * @Route("/{userId}/avatar", methods={"PATCH"})
     *
     * @RequestParam("file")
     * @RequestParam("title")
     */
    public function replaceAvatar(string $userId, UploadedFile $file, string $title)
    {
        // ..
    }

    /**
     * @Route(methods={"GET"})
     *
     * @QueryParam("limit")
     * @QueryParam("offset")
     */
    public function getUsers(?int $limit = null, ?int $offset = null)
    {
        // ..
    }

    /**
     * @Route(methods={"GET"})
     *
     * @QueryParams("filterData")
     * @ResponseBody
     */
    public function filterUsers(FilterUsersDto $filterData)
    {
        // ..
        /** @var UserData[] $filteredUsers */
        return $filteredUsers;
    }
}

About

Attributes for request/response operations, content negotiation, and more for Symfony projects.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages