:tada: Release 2.0 is released! Very fast HTTP router for PHP 7.1+ (incl. PHP8 with attributes) based on PSR-7 and PSR-15 with support for annotations and OpenApi (Swagger)

Overview

HTTP router for PHP 7.1+ (incl. PHP 8 with attributes) based on PSR-7 and PSR-15 with support for annotations and OpenApi (Swagger)

Build Status Code Coverage Scrutinizer Code Quality Total Downloads Latest Stable Version License


Installation

composer require 'sunrise/http-router:^2.6'

QuickStart

The example uses other sunrise packages, but you can use, for example, zend/diactoros or any other.

composer require sunrise/http-message sunrise/http-server-request
use Sunrise\Http\Message\ResponseFactory;
use Sunrise\Http\Router\RequestHandler\CallableRequestHandler;
use Sunrise\Http\Router\RouteCollector;
use Sunrise\Http\Router\Router;
use Sunrise\Http\ServerRequest\ServerRequestFactory;

use function Sunrise\Http\Router\emit;

$collector = new RouteCollector();

$collector->get('home', '/', new CallableRequestHandler(function ($request) {
    return (new ResponseFactory)->createJsonResponse(200, [
        'status' => 'ok',
    ]);
}));

$router = new Router();
$router->addRoute(...$collector->getCollection()->all());

$request = ServerRequestFactory::fromGlobals();
$response = $router->handle($request);

emit($response);

Examples of using

Study sunrise/awesome-skeleton to understand how this can be used.

Strategy loading routes from configs

use Sunrise\Http\Router\Loader\CollectableFileLoader;
use Sunrise\Http\Router\Router;

$loader = new CollectableFileLoader();
$loader->attach('routes/api.php');
$loader->attach('routes/admin.php');
$loader->attach('routes/public.php');

// or attach a directory...
// [!] available from version 2.2
$loader->attach('routes');

// or attach an array...
// [!] available from version 2.4
$loader->attachArray([
    'routes/api.php',
    'routes/admin.php',
    'routes/public.php',
]);

$router = new Router();
$router->load($loader);

// if the router is used as a request handler
$response = $router->handle($request);

// if the router is used as middleware
$response = $router->process($request, $handler);

Strategy loading routes from descriptors (annotations or attributes)

use Doctrine\Common\Annotations\AnnotationRegistry;
use Sunrise\Http\Router\Loader\DescriptorDirectoryLoader;
use Sunrise\Http\Router\Router;

// necessary if you will use annotations (annotations isn't attributes)...
AnnotationRegistry::registerLoader('class_exists');

$loader = new DescriptorDirectoryLoader();
$loader->attach('src/Controller');

// or attach an array
// [!] available from version 2.4
$loader->attachArray([
    'src/Controller',
    'src/Bundle/BundleName/Controller',
]);

$router = new Router();
$router->load($loader);

// if the router is used as a request handler
$response = $router->handle($request);

// if the router is used as middleware
$response = $router->process($request, $handler);

Without loading strategy

use App\Controller\HomeController;
use Sunrise\Http\Router\RouteCollector;
use Sunrise\Http\Router\Router;

$collector = new RouteCollector();
$collector->get('home', '/', new HomeController());

$router = new Router();
$router->addRoute(...$collector->getCollection()->all());

// if the router is used as a request handler
$response = $router->handle($request);

// if the router is used as middleware
$response = $router->process($request, $handler);

Route Annotation Example

Minimal annotation view
/**
 * @Route(
 *   name="api_v1_entry_update",
 *   path="/api/v1/entry/{id<@uuid>}(/{optionalAttribute})",
 *   methods={"PATCH"},
 * )
 */
final class EntryUpdateRequestHandler implements RequestHandlerInterface
Full annotation
/**
 * @Route(
 *   name="api_v1_entry_update",
 *   host="api.host",
 *   path="/api/v1/entry/{id<@uuid>}(/{optionalAttribute})",
 *   methods={"PATCH"},
 *   middlewares={
 *     "App\Middleware\CorsMiddleware",
 *     "App\Middleware\ApiAuthMiddleware",
 *   },
 *   attributes={
 *     "optionalAttribute": "defaultValue",
 *   },
 *   summary="Updates an entry by UUID",
 *   description="Here you can describe the method in more detail...",
 *   tags={"api", "entry"},
 *   priority=0,
 * )
 */
final class EntryUpdateRequestHandler implements RequestHandlerInterface

Route Attribute Example

Minimal attribute view
use Sunrise\Http\Router\Attribute\Route;

#[Route(
    name: 'api_v1_entry_update',
    path: '/api/v1/entry/{id<@uuid>}(/{optionalAttribute})',
    methods: ['PATCH'],
)]
final class EntryUpdateRequestHandler implements RequestHandlerInterface
Full attribute
use Sunrise\Http\Router\Attribute\Route;

#[Route(
    name: 'api_v1_entry_update',
    host: 'api.host',
    path: '/api/v1/entry/{id<@uuid>}(/{optionalAttribute})',
    methods: ['PATCH'],
    middlewares: [
        \App\Middleware\CorsMiddleware::class,
        \App\Middleware\ApiAuthMiddleware::class,
    ],
    attributes: [
        'optionalAttribute' => 'defaultValue',
    ],
    summary: 'Updates an entry by UUID',
    description: 'Here you can describe the method in more detail...',
    tags: ['api', 'entry'],
    priority: 0,
)]
final class EntryUpdateRequestHandler implements RequestHandlerInterface

Useful to know

OpenApi (Swagger)

composer require 'sunrise/http-router-openapi:^1.1'

Generation documentation for Swagger (OAS)

use Sunrise\Http\Router\OpenApi\Object\Info;
use Sunrise\Http\Router\OpenApi\OpenApi;

$openApi = new OpenApi(new Info('0.0.1', 'API'));

$openApi->addRoute(...$router->getRoutes());

$openApi->toArray();

Validation a request body via Swagger documentation

use Sunrise\Http\Router\OpenApi\Middleware\RequestBodyValidationMiddleware;

$route->addMiddleware(new RequestBodyValidationMiddleware());

or using annotations:

/**
 * @Route(
 *   name="foo",
 *   path="/foo",
 *   methods={"post"},
 *   middlewares={
 *     "Sunrise\Http\Router\OpenApi\Middleware\RequestBodyValidationMiddleware",
 *   },
 * )
 */

Generation a route URI

$uri = $router->generateUri('route.name', [
    'attribute' => 'value',
], true);

Run a route

$response = $router->getRoute('route.name')->handle($request);

Route grouping

$collector->group(function ($collector) {
    $collector->group(function ($collector) {
        $collector->group(function ($collector) {
            $collector->get('api.entry.read', '/{id<\d+>}', ...)
                ->addMiddleware(...); // add the middleware(s) to the route...
        })
        ->addPrefix('/entry') // add the prefix to the group...
        ->unshiftMiddleware(...); // add the middleware(s) to the group...
    })
    ->addPrefix('/v1') // add the prefix to the group...
    ->unshiftMiddleware(...); // add the middleware(s) to the group...
})
->addPrefix('/api') // add the prefix to the group...
->unshiftMiddleware(...); // add the middleware(s) to the group...

Route patterns

$collector->get('api.entry.read', '/api/v1/entry/{id<\d+>}(/{optional<\w+>})');

Hosts (available from version 2.6.0)

Note: if you don't assign a host for a route, it will be available on any hosts!

// move the hosts table into the settings...
$router->addHost('public.host', 'www.example.com');
$router->addHost('admin.host', 'secret.example.com');
$router->addHost('api.host', 'api.example.com');

// the route will available only on the `secret.example.com` host...
$route->setHost('admin.host');

// routes in the group will available on the `secret.example.com` host...
$collector->group(function ($collector) {
    // some code...
})
->setHost('admin.host');

Test run

composer test

Useful links

Comments
  • Router: fixes and questions

    Router: fixes and questions

    1. https://github.com/sunrise-php/http-router/blob/85837a0ce1fb82fa937ca90560b511a4b2192665/src/RouteCollection.php#L148 $methods = (new \ReflectionClass(RequestMethodInterface::class))->getConstants();
    2. Why route_regex excluded from Route?
    3. Route::buildRegex() not chached compiled pattern - it's freeze executing
    4. Route::group() cant defines attributes in prefix + cant set methods by default for group routes.
    5. https://github.com/sunrise-php/http-router/blob/85837a0ce1fb82fa937ca90560b511a4b2192665/src/Route.php#L213 Why route cloned? This attributes not contains in RouteCollection. Class doesnt have other methods to set attributes + cant define attributes by default
    6. https://github.com/sunrise-php/http-router/blob/85837a0ce1fb82fa937ca90560b511a4b2192665/functions/route_regex.php#L28 '/{(\w+)}/' - \w contains locale symbols, pure - '/{([a-z0-9_]+)}/'
    7. '$#ui' URI attributes may be case sensitive, i vote to '$#uD'
    8. Path prefix/suffix not contains separately - setPath() rewrite all path
    9. https://github.com/sunrise-php/http-router/blob/85837a0ce1fb82fa937ca90560b511a4b2192665/functions/route_regex.php#L24 add slashes in setters (addSuffix, addPrefix, setPath)
    10. https://github.com/sunrise-php/http-router/blob/85837a0ce1fb82fa937ca90560b511a4b2192665/src/RouteCollection.php#L37 id property dont used as key part - cant overwrite route dublicates, may be set $routes as SplObjectStorage? route - key, id - value;
    11. https://github.com/sunrise-php/http-router/blob/85837a0ce1fb82fa937ca90560b511a4b2192665/src/Router.php#L103 in_array($request->getMethod(), $route->getMethods()) faster then preg_match($regex, $request->getUri()->getPath(), $matches). move up in_array
    12. Why RequestHandler::handle() call only one middleware? why $middlewareQueue is SplQueue? It`s prevents using them again for inner(server side) requests
    13. Cant find Route::getUri(array $attributes = []) : string or something like this - generate URI by route with attributes
    opened by WinterSilence 83
  • Route name support

    Route name support

    I am interested to add your router to my framework: https://github.com/chubbyphp/chubbyphp-framework

    This would need route name support and https://github.com/sunrise-php/http-router/issues/27 and the following would be cool to: https://github.com/sunrise-php/http-router/issues/23

    question feature 
    opened by dominikzogg 36
  • Hard dependence on ResponseFactory

    Hard dependence on ResponseFactory

    RequestHandler uses Sunrise\Http\Message\ResponseFactory. How about adding Psr\Http\Message\RequestFactoryInterface dependencies to the constructor of RequestHandler and Router classes?

    question 
    opened by PhantomArt 11
  • Flexible request handler definition for route

    Flexible request handler definition for route

    I tried to use this router without annotations/attributes. All route definition methods require request handler to implement RequestHandlerInterface:

    public function get(
        string $name,
        string $path,
        RequestHandlerInterface $requestHandler, // question about this parameter
        array $middlewares = [],
        array $attributes = []
    ) : RouteInterface {
      ...
    }
    

    But this is hard to use with invokable actions or controllers. Documentation shows simple example:

    $collector = new RouteCollector();
    $collector->get('home', '/', new HomeController());
    

    Actions and controller constructors can hold dependencies and usage with initiating new action object is not comfortable. It can be solved with DI like so:

    $collector->get('test', '/test', $container->get(\App\Action\TestAction::class));
    

    but it is not cool too.

    I suggest to extend route request handler type to accept callables, path to classes:

    $collector->get('test', '/test', \App\Action\Article\UpdateAction::class);
    $collector->get('test', '/test', [\App\Controller\ArticleController::class, 'update]);
    
    opened by webman 5
  • Per-route

    Per-route "after" middleware not working

    When I define an "after" middleware to a single route (i.e. it works with the chain's response object), and I have a router-wide middleware in place that returns a response, the per-route middleware is never invoked from the looks of it (or then I'm doing something stupid).

    If I switch around the middleware stack injection order to RequestHandler in Router::handle() (so the per-route middleware is injected first, then Router-based middleware) things work as I would expect (https://github.com/sunrise-php/http-router/blob/master/src/Router.php#L137-L145).

    Small example that fails on my end. Packages required are this router package, and zend/diactoros, along with the PSR interfaces.

    <?php
    
    use Psr\Http\Message\ResponseInterface as RI;
    use Psr\Http\Message\ServerRequestInterface as SRI;
    use Psr\Http\Server\MiddlewareInterface;
    use Psr\Http\Server\RequestHandlerInterface as RHI;
    use Sunrise\Http\Router\RouteCollection;
    use Sunrise\Http\Router\Router;
    use Zend\Diactoros\Response\HtmlResponse;
    use Zend\Diactoros\ServerRequestFactory;
    
    include dirname(__DIR__) . '/vendor/autoload.php';
    
    function callback_action(SRI $req) : RI
    {
        return new HtmlResponse('foo bar');
    }
    
    class MyRouteMiddleware implements MiddlewareInterface
    {
        // this method is never called
        // you can even call `die` inside it and nothing happens
        public function process(SRI $req, RHI $handler) : RI
        {
            $response = $handler->handle($req);
    
            return $response->withHeader('X-Foo', 'bar');
        }
    }
    
    class MyAppMiddleware implements MiddlewareInterface
    {
        public function process(SRI $req, RHI $handler) : RI
        {
            // this just takes the route "handler" and calls it to return
            // a response see callback_action($req)
            $action_callable = $req->getAttribute('@route');
    
            return $action_callable($req);
        }
    }
    
    // first create a router, and add an "app-wide" middleware to it
    $router = new Router();
    $router->addMiddleware(new MyAppMiddleware());
    
    // then create individual route, and add a per-route middleware to it
    $routes = new RouteCollection();
    $routes->get('\\callback_action', '/')
        ->addMiddleware(new MyRouteMiddleware());
    
    $router->addRoutes($routes);
    
    $request = ServerRequestFactory::fromGlobals();
    
    // dispatch via the router
    $response = $router->handle($request);
    
    assert(trim($response->getBody()) === 'foo bar'); // this does not fail
    assert($response->hasHeader('X-Foo')); // this fails
    

    Please do say if I'm doing something wrong here, maybe I'm just blind form debugging this and am missing a stupid mistake somewhere.

    question 
    opened by rask 4
  • Too few arguments to function Cosmic\App\Controllers\Home\Index::index(), 1 passed

    Too few arguments to function Cosmic\App\Controllers\Home\Index::index(), 1 passed

    Trying to make a controller but I dont get it work with the responseInterfaces Receiving Too few arguments to function Cosmic\App\Controllers\Home\Index::index(), 1 passed

    ` namespace Cosmic\App\Controllers\Home;

    use Sunrise\Http\Router\Annotation as Mapping; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Message\ResponseInterface as Response;

    class Index {

    #[Mapping\Route('/', path: '/')]
    public function index(Request $request, Response $response) {
        echo 1;
    }
    

    } `

    opened by raizdev 2
  • PHP 8 support

    PHP 8 support

    I am prepare a PHP 8 compatible release for https://github.com/chubbyphp/chubbyphp-framework-router-sunrise would be cool if you would allow to use your package with php 8.

    feature 
    opened by dominikzogg 2
  • MethodNotAllowed is thrown when not needed and vice versa

    MethodNotAllowed is thrown when not needed and vice versa

    According to the following code in Router::match

    $routes = [];
    foreach ($this->routes as $route) {
        foreach ($route->getMethods() as $method) {
            $routes[$method][] = $route;
        }
    }
    
    $method = $request->getMethod();
    if (!isset($routes[$method])) {
        $errmsg = sprintf('The method "%s" is not allowed.', $method);
    
        throw new MethodNotAllowedException($errmsg, [
            'allowed' => array_keys($routes),
        ]);
    }
    

    MethodNotAllowedException is thrown depending on the list of HTTP Methods from all the routes bound to the Router instead of being based on URL.

    This leads to the following cases when it seems like the router doesn't work as intended:

    1. On requesting a nonexistent route (path) one can get MethodNotAllowedException being throwpn (instead of RouteNotFoundException) if the requesting method is not found at any of registered routes.
    2. On requesting a registered route (path) using the method that is not supported by that route one can get no exception being thrown if that method is present anywhere else.

    You can also check RFC to make sure that the current behavior is improper.

    feature 
    opened by rept1d 2
  • Generating JSON schemas for the request parameters/body validation

    Generating JSON schemas for the request parameters/body validation

    Data source may be Swagger documentation. Can also develop middleware for validation with integration with the following library:

    https://github.com/justinrainbow/json-schema

    opened by fenric 2
  • Suggestion: lazy-load middleware using PSR-11

    Suggestion: lazy-load middleware using PSR-11

    It would be good to lazy-load middleware.

    $routes->addMiddleware(new Middleware1());  // Creates the middleware now.
    $routes->addMiddleware(Middleware2::class); // Creates the middleware if/when it is needed.
    

    The dispatcher can then use a PSR-11 container to create the middleware.

    e.g.

    if (is_string($middleware)) {
       $middleware = $this->psr11_container->get($middleware);
    }
    
    opened by fisharebest 2
  • Add support for a bare group path

    Add support for a bare group path

    When I use the following:

    $routes->group('/', function ($group) {
        $group->get('index', '/');
    });
    

    The resulting route will match //, not /.

    I tried, and removing the / from either the group call, or the get call makes it work again, but for the sake of usability I would like to see the generated route collapse multiple / into a single /.

    enhancement 
    opened by rask 2
  • Update cimg/php Docker tag to v8.1

    Update cimg/php Docker tag to v8.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | cimg/php | docker | minor | 8.0 -> 8.1 | | cimg/php | docker | major | 7.4 -> 8.1 | | cimg/php | docker | major | 7.3 -> 8.1 | | cimg/php | docker | major | 7.2 -> 8.1 | | cimg/php | docker | major | 7.1 -> 8.1 |


    Configuration

    πŸ“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update cimg/php Docker tag to v7.4

    Update cimg/php Docker tag to v7.4

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | cimg/php | docker | minor | 7.3 -> 7.4 | | cimg/php | docker | minor | 7.2 -> 7.4 | | cimg/php | docker | minor | 7.1 -> 7.4 |


    Configuration

    πŸ“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update dependency psr/simple-cache to v3

    Update dependency psr/simple-cache to v3

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | psr/simple-cache | require | major | ^1.0 -> ^3.0 |


    Release Notes

    php-fig/simple-cache

    v3.0.0

    Compare Source

    • Adds return types

    See the meta doc, section Errata for more details: https://www.php-fig.org/psr/psr-16/meta/

    v2.0.0

    Compare Source

    • Adds parameter types
    • Makes CacheException extend \Throwable
    • Requires PHP 8

    See the meta doc, section Errata for more details: https://www.php-fig.org/psr/psr-16/meta/


    Configuration

    πŸ“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update dependency sunrise/http-factory to v2.0.2

    Update dependency sunrise/http-factory to v2.0.2

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | sunrise/http-factory | require-dev | patch | 2.0.0 -> 2.0.2 |


    Release Notes

    sunrise-php/http-factory

    v2.0.2

    Compare Source

    • Insignificant changes.

    v2.0.1

    Compare Source

    • Minor changes.

    Configuration

    ?? Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update symfony packages to v6 (major)

    Update symfony packages to v6 (major)

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | symfony/console (source) | require-dev | major | ^4.4 -> ^6.0 | | symfony/event-dispatcher (source) | require-dev | major | ^4.4 -> ^6.0 |


    Release Notes

    symfony/console

    v6.1.7

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.1.6...v6.1.7)

    • bug #​47907 Update Application.php (aleksandr-shevchenko)
    • bug #​47883 Fix error output on windows cli (Maximilian.Beckers)

    v6.1.6

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.1.5...v6.1.6)

    • bug #​47779 Fix Helper::removeDecoration hyperlink bug (greew)

    v6.1.5

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.1.4...v6.1.5)

    • bug #​47463 Make fish completion run in non interactive mode (Seldaek)
    • bug #​47394 Make bash completion run in non interactive mode (Seldaek)

    v6.1.4

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.1.3...v6.1.4)

    • bug #​47372 Fix OutputFormatterStyleStack::getCurrent return type (alamirault)
    • bug #​47218 fix dispatch signal event check for compatibility with the contract interface (xabbuh)
    • bug #​45333 Fix ConsoleEvents::SIGNAL subscriber dispatch (GwendolenLynch)

    v6.1.3

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.1.2...v6.1.3)

    • bug #​47022 get full command path for command in search path (remicollet)

    v6.1.2

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.1.1...v6.1.2)

    • bug #​46747 Fix global state pollution between tests run with ApplicationTester (Seldaek)

    v6.1.1

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.1.0...v6.1.1)

    • bug #​46608 Fix deprecation when description is null (HypeMC)
    • bug #​46574 Escape % in command name & description from PHP (getDefault* methods) (ogizanagi)

    v6.1.0

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.1.0-RC1...v6.1.0)

    • bug #​46387 Complete negatable options (Fish) (GromNaN)

    v6.0.15

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.14...v6.0.15)

    • bug #​47907 Update Application.php (aleksandr-shevchenko)
    • bug #​47883 Fix error output on windows cli (Maximilian.Beckers)

    v6.0.14

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.13...v6.0.14)

    • bug #​47779 Fix Helper::removeDecoration hyperlink bug (greew)

    v6.0.13

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.12...v6.0.13)

    • bug #​47394 Make bash completion run in non interactive mode (Seldaek)

    v6.0.12

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.11...v6.0.12)

    • bug #​47372 Fix OutputFormatterStyleStack::getCurrent return type (alamirault)
    • bug #​47218 fix dispatch signal event check for compatibility with the contract interface (xabbuh)
    • bug #​45333 Fix ConsoleEvents::SIGNAL subscriber dispatch (GwendolenLynch)

    v6.0.11

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.10...v6.0.11)

    • bug #​47022 get full command path for command in search path (remicollet)

    v6.0.10

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.9...v6.0.10)

    • bug #​46747 Fix global state pollution between tests run with ApplicationTester (Seldaek)
    • bug #​46608 Fix deprecation when description is null (HypeMC)
    • bug #​46595 Escape % in command name & description from getDefaultName() (ogizanagi)
    • bug #​46574 Escape % in command name & description from PHP (getDefault* methods) (ogizanagi)

    v6.0.9

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.8...v6.0.9)

    • bug #​46386 Β Fix missing negative variation of negatable options in shell completion (GromNaN)
    • bug #​46114 Fixes "Incorrectly nested style tag found" error when using multi-line header content (Perturbatio)
    • bug #​46341 Fix aliases handling in command name completion (Seldaek)
    • bug #​46291 Suppress unhandled error in some specific use-cases. (rw4lll)
    • bug #​46264 Better required argument check in InputArgument (jnoordsij)

    v6.0.8

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.7...v6.0.8)

    • bug #​45565 Fix table header seperator wrapping (alamirault)

    v6.0.7

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.6...v6.0.7)

    • bug #​45851 Fix exit status on uncaught exception with negative code (acoulton)
    • bug #​44915 Fix compact table style to avoid outputting a leading space (Seldaek)

    v6.0.5

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.4...v6.0.5)

    v6.0.3

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.2...v6.0.3)

    • bug #​43149 Silence warnings during tty detection (neclimdul)
    • bug #​45181 Fix PHP 8.1 deprecation in ChoiceQuestion (BrokenSourceCode)
    • bug #​45109 fix restoring stty mode on CTRL+C (nicolas-grekas)
    • bug #​45088 fix parsing escaped chars in StringInput (nicolas-grekas)
    • bug #​45053 use STDOUT/ERR in ConsoleOutput to save opening too many file descriptors (nicolas-grekas)
    • bug #​44912 Allow OutputFormatter::escape() to be used for escaping URLs used in (Seldaek)

    v6.0.2

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.1...v6.0.2)

    • bug #​44730 Β Fix autocompletion of argument with default value (GromNaN)

    v6.0.1

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.0...v6.0.1)

    • bug #​44523 Fix polyfill-php73 requirement (Seldaek)
    • bug #​44494 Remove FQCN type hints on properties (fabpot)
    • bug #​44475 Handle alias in completion script (GromNaN)
    • bug #​44467 Fix parameter types for ProcessHelper::mustRun() (derrabus)

    v6.0.0

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v6.0.0-RC1...v6.0.0)

    • no significant changes

    v5.4.15

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.14...v5.4.15)

    • bug #​47907 Update Application.php (aleksandr-shevchenko)
    • bug #​47883 Fix error output on windows cli (Maximilian.Beckers)

    v5.4.14

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.13...v5.4.14)

    • bug #​47779 Fix Helper::removeDecoration hyperlink bug (greew)

    v5.4.13

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.12...v5.4.13)

    • bug #​47394 Make bash completion run in non interactive mode (Seldaek)

    v5.4.12

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.11...v5.4.12)

    • bug #​47218 fix dispatch signal event check for compatibility with the contract interface (xabbuh)
    • bug #​45333 Fix ConsoleEvents::SIGNAL subscriber dispatch (GwendolenLynch)

    v5.4.11

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.10...v5.4.11)

    • bug #​47022 get full command path for command in search path (remicollet)

    v5.4.10

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.9...v5.4.10)

    • bug #​46747 Fix global state pollution between tests run with ApplicationTester (Seldaek)
    • bug #​46608 Fix deprecation when description is null (HypeMC)
    • bug #​46595 Escape % in command name & description from getDefaultName() (ogizanagi)
    • bug #​46574 Escape % in command name & description from PHP (getDefault* methods) (ogizanagi)

    v5.4.9

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.8...v5.4.9)

    • bug #​46386 Β Fix missing negative variation of negatable options in shell completion (GromNaN)
    • bug #​46114 Fixes "Incorrectly nested style tag found" error when using multi-line header content (Perturbatio)
    • bug #​46341 Fix aliases handling in command name completion (Seldaek)
    • bug #​46291 Suppress unhandled error in some specific use-cases. (rw4lll)
    • bug #​46264 Better required argument check in InputArgument (jnoordsij)

    v5.4.8

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.7...v5.4.8)

    • bug #​45565 Fix table header seperator wrapping (alamirault)

    v5.4.7

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.6...v5.4.7)

    • bug #​45851 Fix exit status on uncaught exception with negative code (acoulton)
    • bug #​44915 Fix compact table style to avoid outputting a leading space (Seldaek)

    v5.4.5

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.4...v5.4.5)

    v5.4.3

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.2...v5.4.3)

    • bug #​43149 Silence warnings during tty detection (neclimdul)
    • bug #​45181 Fix PHP 8.1 deprecation in ChoiceQuestion (BrokenSourceCode)
    • bug #​45109 fix restoring stty mode on CTRL+C (nicolas-grekas)
    • bug #​45088 fix parsing escaped chars in StringInput (nicolas-grekas)
    • bug #​45053 use STDOUT/ERR in ConsoleOutput to save opening too many file descriptors (nicolas-grekas)
    • bug #​44912 Allow OutputFormatter::escape() to be used for escaping URLs used in (Seldaek)

    v5.4.2

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.1...v5.4.2)

    • bug #​44730 Β Fix autocompletion of argument with default value (GromNaN)

    v5.4.1

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.0...v5.4.1)

    • bug #​44523 Fix polyfill-php73 requirement (Seldaek)
    • bug #​44475 Handle alias in completion script (GromNaN)
    • bug #​44467 Fix parameter types for ProcessHelper::mustRun() (derrabus)

    v5.4.0

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.4.0-RC1...v5.4.0)

    • no significant changes

    v5.3.16

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.3.15...v5.3.16)

    v5.3.14

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.3.13...v5.3.14)

    • bug #​43149 Silence warnings during tty detection (neclimdul)
    • bug #​45181 Fix PHP 8.1 deprecation in ChoiceQuestion (BrokenSourceCode)
    • bug #​45109 fix restoring stty mode on CTRL+C (nicolas-grekas)
    • bug #​45088 fix parsing escaped chars in StringInput (nicolas-grekas)
    • bug #​45053 use STDOUT/ERR in ConsoleOutput to save opening too many file descriptors (nicolas-grekas)
    • bug #​44912 Allow OutputFormatter::escape() to be used for escaping URLs used in (Seldaek)

    v5.3.13

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.3.12...v5.3.13)

    • bug #​44467 Fix parameter types for ProcessHelper::mustRun() (derrabus)

    v5.3.11

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.3.10...v5.3.11)

    • bug #​44176 Default ansi option to null (jderusse)
    • bug #​43884 Runtime conflict for psr/log >= 3.0 instead of composer conflict (fancyweb)

    v5.3.10

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.3.9...v5.3.10)

    • no significant changes

    v5.3.7

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.3.6...v5.3.7)

    • bug #​42685 Fix ProgressBar to correctly clear multi-line formats (rtek)
    • bug #​42381 Don't pass null to preg_replace() (derrabus)
    • bug #​42260 Fix return types for PHP 8.1 (derrabus)

    v5.3.6

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.3.5...v5.3.6)

    • no significant changes

    v5.3.4

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.3.3...v5.3.4)

    • bug #​42207 fix table setHeaderTitle without headers (a1812)
    • bug #​42091 Run commands when implements SignalableCommandInterface without pcntl and they have'nt signals (PaolaRuby)
    • bug #​42174 Indicate compatibility with psr/log 2 and 3 (derrabus)
    • bug #​42009 Fix save correct name in setDefaultCommand() for PHP8 (a1812)
    • bug #​41966 Revert "bug #​41952 fix handling positional arguments" (chalasr, nicolas-grekas)
    • bug #​41952 fix handling positional arguments (nicolas-grekas)

    v5.3.2

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.3.1...v5.3.2)

    • bug #​41686 Fix using #[AsCommand] without DI (nicolas-grekas)
    • bug #​41680 fix managing signals when commands are lazy loaded (nicolas-grekas)
    • bug #​41535 Fix negated options not accessible (jderusse)
    • bug #​41386 Escape synopsis output (jschaedl)

    v5.3.0

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.3.0-RC1...v5.3.0)

    • no significant changes

    v5.2.14

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.2.13...v5.2.14)

    • no significant changes

    v5.2.12

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.2.11...v5.2.12)

    • bug #​42207 fix table setHeaderTitle without headers (a1812)
    • bug #​42091 Run commands when implements SignalableCommandInterface without pcntl and they have'nt signals (PaolaRuby)
    • bug #​42174 Indicate compatibility with psr/log 2 and 3 (derrabus)
    • bug #​41966 Revert "bug #​41952 fix handling positional arguments" (chalasr, nicolas-grekas)
    • bug #​41952 fix handling positional arguments (nicolas-grekas)

    v5.2.11

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.2.10...v5.2.11)

    v5.2.10

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.2.9...v5.2.10)

    • no significant changes

    v5.2.8

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.2.7...v5.2.8)

    v5.2.7

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.2.6...v5.2.7)

    • bug #​40698 Add Helper::width() and Helper::length() (Nyholm, grasmash)

    v5.2.6

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.2.5...v5.2.6)

    • bug #​40593 Uses the correct assignment action for console options depending if they are short or long (topikito)
    • bug #​40524 fix emojis messing up the line width (MarionLeHerisson)
    • bug #​40348 Fix line wrapping for decorated text in block output (grasmash)
    • bug #​40460 Correctly clear lines for multi-line progress bar messages (grasmash)
    • bug #​40450 ProgressBar clears too many lines on update (danepowell)

    v5.2.5

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.2.4...v5.2.5)

    • no significant changes

    v5.2.4

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.2.3...v5.2.4)

    • bug #​40192 fix QuestionHelper::getHiddenResponse() not working with space in project directory name (Yendric)
    • bug #​40187 Fix PHP 8.1 null error for preg_match flag (kylekatarnls)

    v5.2.3

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.2.2...v5.2.3)

    • no changes

    v5.2.2

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.2.1...v5.2.2)

    • bug #​39932 Fix Closure code binding when it is a static anonymous function (fancyweb)

    v5.2.1

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.2.0...v5.2.1)

    • bug #​39361 acces public-deprecated services via the private container to remove false-positive deprecations (nicolas-grekas)
    • bug #​39223 Re-enable hyperlinks in Konsole/Yakuake (OndraM)

    v5.2.0

    Compare Source

    • Added SingleCommandApplication::setAutoExit() to allow testing via CommandTester
    • added support for multiline responses to questions through Question::setMultiline() and Question::isMultiline()
    • Added SignalRegistry class to stack signals handlers
    • Added support for signals:
      • Added Application::getSignalRegistry() and Application::setSignalsToDispatchEvent() methods
      • Added SignalableCommandInterface interface
    • Added TableCellStyle class to customize table cell
    • Removed php prefix invocation from help messages.

    v5.1.11

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.1.10...v5.1.11)

    • bug #​39932 Fix Closure code binding when it is a static anonymous function (fancyweb)

    v5.1.10

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.1.9...v5.1.10)

    • bug #​39361 acces public-deprecated services via the private container to remove false-positive deprecations (nicolas-grekas)
    • bug #​39223 Re-enable hyperlinks in Konsole/Yakuake (OndraM)

    v5.1.9

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.1.8...v5.1.9)

    • bug #​39160 Use a partial buffer in SymfonyStyle (jderusse)
    • bug #​39168 Fix console closing tag (jderusse)
    • bug #​38991 Fix ANSI when stdErr is not a tty (jderusse)

    v5.1.8

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.1.7...v5.1.8)

    • no changes

    v5.1.7

    Compare Source

    v5.1.6

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.1.5...v5.1.6)

    • bug #​38166 work around disabled putenv() (SenTisso)
    • bug #​38116 Silence warnings on sapi_windows_cp_set() call (chalasr)
    • bug #​38114 guard $argv + $token against null, preventing unnecessary exceptions (bilogic)
    • bug #​38080 Make sure $maxAttempts is an int or null (derrabus)

    v5.1.5

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.1.4...v5.1.5)

    • bug #​38024 Fix undefined index for inconsistent command name definition (chalasr)

    v5.1.4

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.1.3...v5.1.4)

    • bug #​37731 Table: support cells with newlines after a cell with colspan >= 2 (GMTA)
    • bug #​37774 Make sure we pass a numeric array of arguments to call_user_func_array() (derrabus)

    v5.1.3

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.1.2...v5.1.3)

    • bug #​37469 always use stty when possible to ask hidden questions (nicolas-grekas)
    • bug #​37385 Fixes question input encoding on Windows (YaFou)

    v5.1.2

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.1.1...v5.1.2)

    • bug #​37286 Reset question validator attempts only for actual stdin (bis) (nicolas-grekas)
    • bug #​37160 Reset question validator attempts only for actual stdin (ostrolucky)

    v5.1.1

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.1.0...v5.1.1)

    • bug #​37130 allow cursor to be used even when STDIN is not defined (xabbuh)

    v5.1.0

    Compare Source

    • Command::setHidden() is final since Symfony 5.1
    • Add SingleCommandApplication
    • Add Cursor class

    v5.0.11

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.0.10...v5.0.11)

    • bug #​37469 always use stty when possible to ask hidden questions (nicolas-grekas)
    • bug #​37385 Fixes question input encoding on Windows (YaFou)
    • bug #​37286 Reset question validator attempts only for actual stdin (bis) (nicolas-grekas)
    • bug #​37160 Reset question validator attempts only for actual stdin (ostrolucky)

    v5.0.10

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.0.9...v5.0.10)

    • no changes

    v5.0.9

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.0.8...v5.0.9)

    • bug #​37007 Fix QuestionHelper::disableStty() (chalasr)
    • bug #​37000 Add meaningful message when using ProcessHelper and Process is not installed (l-vo)
    • bug #​36696 don't check tty on stdin, it breaks with "data lost during stream conversion" (nicolas-grekas)
    • bug #​36590 Default hidden question to 1 attempt for non-tty session (ostrolucky)

    v5.0.8

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.0.7...v5.0.8)

    • no changes

    v5.0.7

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.0.6...v5.0.7)

    v5.0.6

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.0.5...v5.0.6)

    • bug #​36031 Fallback to default answers when unable to read input (ostrolucky)

    v5.0.5

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.0.4...v5.0.5)

    • bug #​35676 Handle zero row count in appendRow() for Table (Adam Prickett)
    • bug #​35696 Don't load same-namespace alternatives on exact match (chalasr)
    • bug #​33897 Consider STDIN interactive (ostrolucky)
    • bug #​34114 SymonfyStyle - Check value isset to avoid PHP notice (leevigraham)

    v5.0.4

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.0.3...v5.0.4)

    • no changes

    v5.0.3

    Compare Source

    Changelog (https://github.com/symfony/console/compare/v5.0.2...v5.0.3)

    • bug #​35094 Fix filtering out identical alternatives when there is a command loader (fancyweb)

    v5.0.2

    Compare Source

    v5.0.1

    Compare Source

    v5.0.0

    Compare Source

    • removed support for finding hidden commands using an abbreviation, use the full name instead
    • removed TableStyle::setCrossingChar() method in favor of TableStyle::setDefaultCrossingChar()
    • removed TableStyle::setHorizontalBorderChar() method in favor of TableStyle::setDefaultCrossingChars()
    • removed TableStyle::getHorizontalBorderChar() method in favor of TableStyle::getBorderChars()
    • removed TableStyle::setVerticalBorderChar() method in favor of TableStyle::setVerticalBorderChars()
    • removed TableStyle::getVerticalBorderChar() method in favor of TableStyle::getBorderChars()
    • removed support for returning null from Command::execute(), return 0 instead
    • ProcessHelper::run() accepts only array|Symfony\Component\Process\Process for its command argument
    • Application::setDispatcher accepts only Symfony\Contracts\EventDispatcher\EventDispatcherInterface for its dispatcher argument
    • renamed Application::renderException() and Application::doRenderException() to renderThrowable() and doRenderThrowable() respectively.
    symfony/event-dispatcher

    v6.1.0

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v6.1.0-RC1...v6.1.0)

    • no significant changes

    v6.0.9

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v6.0.8...v6.0.9)

    • bug #​46262 Fix removing listeners when using first-class callable syntax (javer)

    v6.0.3

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v6.0.2...v6.0.3)

    • no significant changes

    v6.0.2

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v6.0.1...v6.0.2)

    • bug #​44745 Restore return type to covariant IteratorAggregate implementations (derrabus)

    v6.0.1

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v6.0.0...v6.0.1)

    • bug #​44494 Remove FQCN type hints on properties (fabpot)

    v6.0.0

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v6.0.0-RC1...v6.0.0)

    • no significant changes

    v5.4.9

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.4.8...v5.4.9)

    • bug #​46262 Fix removing listeners when using first-class callable syntax (javer)

    v5.4.3

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.4.2...v5.4.3)

    • no significant changes

    v5.4.0

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.4.0-RC1...v5.4.0)

    • no significant changes

    v5.3.14

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.3.13...v5.3.14)

    • no significant changes

    v5.3.11

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.3.10...v5.3.11)

    • no significant changes

    v5.3.7

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.3.6...v5.3.7)

    v5.3.4

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.3.3...v5.3.4)

    • bug #​42174 Indicate compatibility with psr/log 2 and 3 (derrabus)
    • bug #​41905 Correct the called event listener method case (JJsty1e)

    v5.3.0

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.3.0-RC1...v5.3.0)

    • no significant changes

    v5.2.12

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.2.11...v5.2.12)

    • bug #​42174 Indicate compatibility with psr/log 2 and 3 (derrabus)
    • bug #​41905 Correct the called event listener method case (JJsty1e)

    v5.2.10

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.2.9...v5.2.10)

    • no significant changes

    v5.2.4

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.2.3...v5.2.4)

    • bug #​40246 fix registering subscribers twice on edge-case (nicolas-grekas)

    v5.2.3

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.2.2...v5.2.3)

    • no changes

    v5.2.2

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.2.1...v5.2.2)

    • no changes

    v5.2.1

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.2.0...v5.2.1)

    • no changes

    v5.2.0

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.2.0-RC2...v5.2.0)

    • no changes

    v5.1.11

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.1.10...v5.1.11)

    • no changes

    v5.1.10

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.1.9...v5.1.10)

    • no changes

    v5.1.9

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.1.8...v5.1.9)

    • no changes

    v5.1.8

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.1.7...v5.1.8)

    • no changes

    v5.1.7

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.1.6...v5.1.7)

    • no changes

    v5.1.6

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.1.5...v5.1.6)

    • no changes

    v5.1.5

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.1.4...v5.1.5)

    • no changes

    v5.1.4

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.1.3...v5.1.4)

    • no changes

    v5.1.3

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.1.2...v5.1.3)

    • bug #​37341 Fix support for PHP8 union types (nicolas-grekas)

    v5.1.2

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.1.1...v5.1.2)

    • no changes

    v5.1.1

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.1.0...v5.1.1)

    • no changes

    v5.1.0

    Compare Source

    • The LegacyEventDispatcherProxy class has been deprecated.
    • Added an optional dispatcher attribute to the listener and subscriber tags in RegisterListenerPass.

    v5.0.11

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.0.10...v5.0.11)

    • bug #​37341 Fix support for PHP8 union types (nicolas-grekas)

    v5.0.10

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.0.9...v5.0.10)

    • no changes

    v5.0.9

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.0.8...v5.0.9)

    • bug #​36811 Fix register event listeners compiler pass (X-Coder264)

    v5.0.8

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.0.7...v5.0.8)

    • no changes

    v5.0.7

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.0.6...v5.0.7)

    • no changes

    v5.0.6

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.0.5...v5.0.6)

    • no changes

    v5.0.5

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.0.4...v5.0.5)

    • no changes

    v5.0.4

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.0.3...v5.0.4)

    • no changes

    v5.0.3

    Compare Source

    Changelog (https://github.com/symfony/event-dispatcher/compare/v5.0.2...v5.0.3)

    v5.0.2

    Compare Source

    v5.0.1

    Compare Source

    v5.0.0

    Compare Source

    • The signature of the EventDispatcherInterface::dispatch() method has been changed to dispatch($event, string $eventName = null): object.
    • The Event class has been removed in favor of Symfony\Contracts\EventDispatcher\Event.
    • The TraceableEventDispatcherInterface has been removed.
    • The WrappedListener class is now final.

    Configuration

    πŸ“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    Open

    These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

    Detected dependencies

    circleci
    .circleci/config.yml
    • cimg/php 7.1
    • cimg/php 7.2
    • cimg/php 7.3
    • cimg/php 7.4
    • cimg/php 8.0
    • cimg/php 8.1
    composer
    composer.json
    • fig/http-message-util ^1.1
    • psr/container ^1.0
    • psr/http-message ^1.0
    • psr/http-server-handler ^1.0
    • psr/http-server-middleware ^1.0
    • psr/simple-cache ^1.0
    • sunrise/coding-standard 1.0.0
    • sunrise/http-factory 2.0.0
    • doctrine/annotations ^1.6
    • symfony/console ^4.4
    • symfony/event-dispatcher ^4.4

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
Releases(v2.16.2)
Owner
Sunrise // PHP
Sunrise // PHP
PhpRouter is a powerful, lightweight, and very fast HTTP URL router for PHP projects.

PhpRouter PhpRouter is a powerful, lightweight, and very fast HTTP URL router for PHP projects. Some of the provided features: Route parameters Predef

Milad Rahimi 152 Dec 28, 2022
PHP Router class - A simple Rails inspired PHP router class.

PHP Router class A simple Rails inspired PHP router class. Usage of different HTTP Methods REST / Resourceful routing Reversed routing using named rou

Danny van Kooten 565 Jan 8, 2023
A lightweight and very basic PHP router.

Katya A lightweight PHP router Configuration Para servidor Apache, en el directorio del proyecto crea y edita un archivo .htaccess con lo siguiente: <

Luis RodrΓ­guez 0 Apr 4, 2022
Fast PSR-7 based routing and dispatch component including PSR-15 middleware, built on top of FastRoute.

Route This package is compliant with PSR-1, PSR-2, PSR-4, PSR-7, PSR-11 and PSR-15. If you notice compliance oversights, please send a patch via pull

The League of Extraordinary Packages 608 Dec 30, 2022
klein.php is a fast & flexible router for PHP 5.3+

Klein.php klein.php is a fast & flexible router for PHP 5.3+ Flexible regular expression routing (inspired by Sinatra) A set of boilerplate methods fo

null 2.6k Jan 7, 2023
Simple, fast and yet powerful PHP router that is easy to get integrated and in any project.

Simple, fast and yet powerful PHP router that is easy to get integrated and in any project. Heavily inspired by the way Laravel handles routing, with both simplicity and expand-ability in mind.

Simon SessingΓΈ 472 Jan 4, 2023
Pux is a fast PHP Router and includes out-of-box controller tools

Pux Pux is a faster PHP router, it also includes out-of-box controller helpers. 2.0.x Branch Build Status (This branch is under development) Benchmark

Yo-An Lin 1.3k Dec 21, 2022
A lightweight and fast router for PHP

Piko Router A lightweight and blazing fast router (see benchmarks) using a radix trie to store dynamic routes. This router maps routes to user defined

Piko framework 62 Dec 27, 2022
PHPRouter is an easy-to-use, fast, and flexible PHP router package with express-style routing.

PHP-Router is a modern, fast, and adaptable composer package that provides express-style routing in PHP without a framework.

Ayodeji O. 4 Oct 20, 2022
Fast request router for PHP

FastRoute - Fast request router for PHP This library provides a fast implementation of a regular expression based router. Blog post explaining how the

Nikita Popov 4.7k Dec 23, 2022
Flight routing is a simple, fast PHP router that is easy to get integrated with other routers.

The PHP HTTP Flight Router divineniiquaye/flight-routing is a HTTP router for PHP 7.1+ based on PSR-7 and PSR-15 with support for annotations, created

Divine Niiquaye Ibok 16 Nov 1, 2022
A router for Amp's HTTP Server.

http-server-router This package provides a routing RequestHandler for Amp's HTTP server based on the request URI and method based on FastRoute. Instal

AMPHP 34 Dec 19, 2022
A fast & flexible router

Klein.php klein.php is a fast & flexible router for PHP 5.3+ Flexible regular expression routing (inspired by Sinatra) A set of boilerplate methods fo

null 2.6k Dec 28, 2022
Toro is a PHP router for developing RESTful web applications and APIs.

Toro Toro is a PHP router for developing RESTful web applications and APIs. It is designed for minimalists who want to get work done. Quick Links Offi

Kunal Anand 1.2k Dec 27, 2022
A lightweight and simple object oriented PHP Router

bramus/router A lightweight and simple object oriented PHP Router. Built by Bram(us) Van Damme (https://www.bram.us) and Contributors Features Support

Bramus! 935 Jan 1, 2023
Thruway - an open source client and router implementation of WAMP (Web Application Messaging Protocol), for PHP.

PHP Client and Router Library for Autobahn and WAMP (Web Application Messaging Protocol) for Real-Time Application Messaging

Voryx 661 Nov 14, 2022
A web router implementation for PHP.

Aura.Router Powerful, flexible web routing for PSR-7 requests. Installation and Autoloading This package is installable and PSR-4 autoloadable via Com

Aura for PHP 469 Jan 1, 2023
:bird: Simple PHP router

Macaw Macaw is a simple, open source PHP router. It's super small (~150 LOC), fast, and has some great annotated source code. This class allows you to

Noah Buscher 895 Dec 21, 2022
A simple PHP Router

Panda Router Description the panda-router is a small alternative PHP router that can be used for small projects. With this router you can use differen

Jan Behrens 1 Dec 27, 2021