Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Render Service Twig Extension Bundle Laravel Package

danilovl/render-service-twig-extension-bundle

View on GitHub
Deep Wiki
Context7

phpunit downloads latest Stable Version license

RenderServiceTwigExtensionBundle

About

The Symfony Twig Extension Bundle provides an easy way to create functions or filters from service methods or objects.

The main purpose of this extension is to replace the existing Twig render(controller()) method.

The main disadvantage of the existing method is that it performs a sub-request, which increases the total execution time of the query.

Comparison performance metrics

In this example, the same page is used, with the only difference being the number of times the standard render(controller()) method is called compared to the new runtime Twig function.

On the left side, the standard Twig function is used, while on the right side, the runtime Twig function is applied.

Render three times.

Alt text

Render ten times.

Alt text

Requirements

  • PHP 8.5 or higher
  • Symfony 8.0 or higher

1. Installation

Install danilovl/render-service-twig-extension-bundle package by Composer:

composer require danilovl/render-service-twig-extension-bundle

Add the RenderServiceTwigExtensionBundle to your application's bundles if it is not added automatically:

<?php
// config/bundles.php

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

2. Configuration

You can define global parameters for all extensions.

danilovl_render_service:
  prefix: null
  to_snake_case: true

  filter_options:
    needs_environment: false
    needs_context: false
    is_variadic: false
    is_safe: []
    is_safe_callback: []
    pre_escape: null
    preserves_safety: []
    node_class: FunctionExpression::class
    deprecated: false
    alternative: null

  function_options:
    needs_environment: false
    needs_context: false
    is_variadic: false
    is_safe: []
    is_safe_callback: []
    node_class: FunctionExpression::class
    deprecated: false
    alternative: null

3. Usage

There exist two attributes AsTwigFilter and AsTwigFunction, which can be used with classes or methods.

When you use attributes with a class, it means that all public class methods are automatically transformed into filters or functions.

For example, it creates two function: math_sum, math_min.

If a global prefix like app_ is set, then it will create: app_math_sum,app_math_min.

The global parameter to_snake_case is set to true, which means method names are converted to snake_case. You can disable this feature.

<?php declare(strict_types=1);

namespace App\Application\Controller;

use Danilovl\RenderServiceTwigExtensionBundle\Attribute\AsTwigFunction;

#[AsTwigFunction('math_')]
class CountService
{
    public function sum(int $one, int $two): int
    {
        return $one + $two;
    }

    public function min(int $one, int $two): int
    {
        return $one - $two;
    }

    public function multiplicationOperation(int $one, int $two): int
    {
        return $one * $two;
    }
}
{{ app_math_sum(2,3) }}
{{ app_math_min(2,3) }}
{{ app_math_multiplication_operation(2,3) }}

You can use the attribute individually on a specific method.

<?php declare(strict_types=1);

namespace App\Application\Controller;

use Danilovl\RenderServiceTwigExtensionBundle\Attribute\{
    AsTwigFilter,
    AsTwigFunction
};

class RenderServiceController
{
    #[AsTwigFunction('function_sum')]
    public function twigFunctionSum(int $one, int $two): int
    {
        return $one + $two;
    }

    #[AsTwigFilter('filter_upper')]
    public function twigFilterUpper(string $text): string
    {
        return strtoupper($text);
    }
}
{{ 'text' | app_filter_upper }}
{{ app_function_sum(2,3) }}

4. Command

Show a list of Twig extensions generated from attributes.

php bin/console danilovl:render-service:list

Alt text

License

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

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky
spatie/mailcoach-vapor