danilovl/parameter-bundle

Symfony bundle provides comfortable getting parameters from config.


Keywords
symfony, php, bundle, twig extension
License
MIT

Documentation

phpunit downloads latest Stable Version license

ParameterBundle

About

Symfony bundle provides comfortable getting parameters from config.

Requirements

  • PHP 8.3 or higher
  • Symfony 7.0 or higher
  • TwigBundle 7.0 or higher

1. Installation

Install danilovl/parameter-bundle package by Composer:

composer require danilovl/parameter-bundle

Add the ParameterBundle to your application's bundles if does not add automatically:

<?php
// config/bundles.php

return [
    // ...
    Danilovl\ParameterBundle\ParameterBundle::class => ['all' => true]
];

You can change delimiter by you own delimiter.

danilovl_parameter:
  delimiter: '.'

2. Available methods

<?php declare(strict_types=1);

namespace Danilovl\ParameterBundle\Interfaces;

interface ParameterServiceInterface
{
    public function get(
        string $key,
        string $delimiter = null,
        bool $ignoreNotFound = false
    ): array|bool|string|int|float|UnitEnum|null;

    public function getString(string $key, string $delimiter = null): string;
    public function getInt(string $key, string $delimiter = null): int;
    public function getFloat(string $key, string $delimiter = null): float;
    public function getBoolean(string $key, string $delimiter = null): bool;
    public function getArray(string $key, string $delimiter = null): array;
    public function getUnitEnum(string $key, string $delimiter = null): UnitEnum;
    public function has(string $key, string $delimiter = null): bool;
}

3. Usage

Project parameters.

# config/services.yaml

parameters:
  locale: 'en'
  debug: false
  price: 200.00
  volume: 0.00
  project_namespace: 'App'
  pagination:
    default:
      page: 1
      limit: 25
  google:
    api_key: 'AzT6Ga0A46K3pUAdQKLwr-zT6Ga0A46K3pUAdQKLwr'
    analytics_code: 'UA-X000000'

3.1 Service

Get parameters in controller.

<?php declare(strict_types=1);

namespace App\Controller;

use Danilovl\ParameterBundle\Interfaces\ParameterServiceInterface;
use Knp\Component\Pager\Pagination\PaginationInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;

class BaseController extends AbstractController
{
    protected function createPagination(
        Request $request,
        $query,
        int $page = null,
        int $limit = null,
        array $options = null
    ): PaginationInterface {
        $page = $page ?? $this->get(ParameterServiceInterface::class)
                ->getInt('pagination::default::page', '::');

        $limit = $limit ?? $this->get(ParameterServiceInterface::class)
                ->getInt('pagination.default.limit');

        $pagination = $this->get('knp_paginator');
        if ($options !== null) {
            $pagination->setDefaultPaginatorOptions($options);
        }

        return $pagination->paginate(
            $query,
            $request->query->getInt('page', $page),
            $request->query->getInt('limit', $limit)
        );
    }
}

Get parameters by DI.

<?php declare(strict_types=1);

namespace App\Service;

use Knp\Component\Pager\Pagination\PaginationInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Danilovl\ParameterBundle\Interfaces\ParameterServiceInterface;

class UserService
{
    public function __construct(private ParameterServiceInterface $parameterService)
    {
    }
    
    public function getUserRoles(): array
    {
        return $this->parameterService->getArray('user.roles');
    }
}

Ignore ParameterNotFoundException if parameter not exist. Method get return null.

<?php declare(strict_types=1);

namespace App\Service;

use Knp\Component\Pager\Pagination\PaginationInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Danilovl\ParameterBundle\Interfaces\ParameterServiceInterface;

class WidgetService
{
    public function __construct(private ParameterServiceInterface $parameterService)
    {
    }
    
    public function getWidgetName(): string
    {
        return $this->parameterService->get(key: 'widget.name', ignoreNotFound: true) ?? 'default widget name';
    }
}

3.2 Twig extension

Check debug parameter in templates.

{# templates/first.html.twig #}

{% if parameter_has('debug') == true %}
    {#some code#}
{% endif %}

{% if parameter_get_string('locale') == 'en' %}
    {#some code#}
{% endif %}

Get google api parameters.

{# templates/first.html.twig #}

{{ parameter_get('google.api_key') }}

{{ parameter_get_string('google.api_key') }}
{{ parameter_get_string('google.analytics_code') }}

{{ parameter_get_int('pagination.default.page') }}
{{ parameter_get_int('pagination.default.limit') }}

License

The ParameterBundle is open-sourced software licensed under the MIT license.