Skip to content

nowo-tech/ControllerKitBundle

Repository files navigation

Controller Kit Bundle

CI Packagist Version Packagist Downloads License PHP Symfony GitHub stars Coverage

Found this useful? Install from Packagist · Give it a star on GitHub so more developers can find it.

Controller Kit Bundle — Utilities for Symfony controllers: redirectToReferer (configurable default route) and SafeForwardTrait for safe request forwarding. For Symfony 6.4, 7 and 8 · PHP 8.2+.

Features

  • RedirectToRefererTrait — Redirect to the HTTP Referer when valid (same app, route exists), or to a configurable default route. 100% configurable via nowo_controller_kit.default_route.
  • SafeForwardTrait — Forward to another controller method with a check that the method exists (avoids runtime errors).

Installation

composer require nowo-tech/controller-kit-bundle

With Symfony Flex, the recipe registers the bundle and adds config. Without Flex, see docs/INSTALLATION.md.

Manual registration in config/bundles.php:

return [
  // ...
  Nowo\ControllerKitBundle\NowoControllerKitBundle::class => ['all' => true],
];

Configuration

In config/packages/nowo_controller_kit.yaml:

nowo_controller_kit:
  default_route: homepage  # Route used when redirectToReferer has no valid Referer

Use your own route name (e.g. app_home, dashboard).

Usage

redirectToReferer

Use the trait in a controller that extends AbstractController:

use Nowo\ControllerKitBundle\Controller\RedirectToRefererTrait;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;

class MyController extends AbstractController
{
  use RedirectToRefererTrait;

  public function submit(Request $request): Response
  {
    // ... handle form ...
    return $this->redirectToReferer($request);
    // Optional: merge params and set status
    // return $this->redirectToReferer($request, ['success' => 1], 303);
  }
}

When the request has a valid Referer header whose path matches a route in your app, the user is redirected there (with path and query params preserved). Otherwise they are redirected to the configured default_route.

safeForward

Use the trait in any controller that has forward() (e.g. AbstractController):

use Nowo\ControllerKitBundle\Controller\SafeForwardTrait;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class ApiController extends AbstractController
{
  use SafeForwardTrait;

  public function delegate(): Response
  {
    return $this->safeForward(
      OtherController::class,
      'actionName',
      ['id' => 123],
      ['page' => 1]
    );
  }
}

If OtherController::actionName does not exist, a BadMethodCallException is thrown instead of a generic error.

Documentation

Additional documentation

Requirements

  • PHP 8.2+
  • Symfony 6.4 / 7.0 / 8.0
  • For traits: symfony/framework-bundle in your application (AbstractController)

Development

make up
make install
make test
make cs-check
make phpstan
make release-check

Demo

  • demo/symfony7 — host port 8010 by default (PORT in .env)
  • demo/symfony8 — host port 8011 by default

Each demo runs FrankenPHP + Caddy in Docker. docker-compose sets APP_ENV=dev and mounts Caddyfile.dev, so PHP runs without long-lived workers (changes visible on refresh). Worker mode is the production Caddyfile path — see docs/DEMO-FRANKENPHP.md.

Global demo commands: make -C demo help (e.g. make -C demo up-symfony8).

Tests and coverage

  • Tests: PHPUnit (PHP)
  • PHP: 100%

License and author

MIT · Nowo.tech · Héctor Franco Aceituno

About

Utilities for Symfony controllers: redirectToReferer (configurable default route) and SafeForwardTrait for safe request forwarding. For Symfony 6, 7 and 8 · PHP 8.1+.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors