Silly CLI micro-framework based on Symfony Console

Overview
currentMenu
home

Silly CLI micro-framework based on Symfony Console.

Build Status Coverage Status Scrutinizer Code Quality Packagist

Professional support for Silly is available via Tidelift

Installation

$ composer require mnapoli/silly

Usage

Example of a Silly application:

use Symfony\Component\Console\Output\OutputInterface;

$app = new Silly\Application();

$app->command('greet [name] [--yell]', function ($name, $yell, OutputInterface $output) {
    if ($name) {
        $text = 'Hello, '.$name;
    } else {
        $text = 'Hello';
    }

    if ($yell) {
        $text = strtoupper($text);
    }

    $output->writeln($text);
});

$app->run();

Running the application is the same as running any other Symfony Console application:

$ php application.php greet
Hello
$ php application.php greet john --yell
HELLO JOHN
$ php application.php greet --yell john
HELLO JOHN

Silly\Application extends Symfony\Console\Application and can be used wherever Symfony's Application can.

Documentation

Do more

Silly is just an implementation over the Symfony Console. Read the Symfony documentation to learn everything you can do with it.

Example applications

Interested in seeing examples of Silly applications? Have a look at this short selection:

Contributing

See the CONTRIBUTING file.

Comments
  • Update to symfony/console 6.0 and newer version of phpunit

    Update to symfony/console 6.0 and newer version of phpunit

    This PR aims to update symfony/console version in order to make it work for brefphp/bref in ref of #60

    I have updated to a newer version of phpunit in a separated commit too

    opened by cjobeili 18
  • PHP Deprecated:  Non-static method

    PHP Deprecated: Non-static method

    class ScanCommand
    {
        // ...
    
        public function execute($directory)
        {
            $this->scanner->scan($directory);
        }
    }
    
    $app->command('process [directory]', ['MyApp\Command\ScanCommand', 'execute']);
    

    When you try to use this method of injection are notified:

    PHP Deprecated:  Non-static method MyApp\Command\ScanCommand::execute() should not be called statically in /vendor/mnapoli/silly/src/Application.php on line 207
    

    And it is only with version 1.5.0

    Or I do not understand?

    opened by EgorGruzdev 6
  • More consistent option syntax?

    More consistent option syntax?

    How about:

    • Option with an mandatory value greet --iterations=
    • Option with an optional value greet --iterations=?
    • Option that can be used multiple times (the value would be an array) greet --iterations=* or greet --iterations=+ based on optional multi-value (0..n) or mandatory multi-value (1..n).

    It would be more consistent with the arguments I think.

    enhancement 
    opened by Seldaek 6
  • Cannot set a default value when using InputOption::VALUE_NONE mode

    Cannot set a default value when using InputOption::VALUE_NONE mode

    $ php71 test.php
    Fatal error: Uncaught Symfony\Component\Console\Exception\LogicException: Cannot set a default value when using InputOption::VALUE_NONE mode. in vendor/symfony/console/Input/InputOption.php:159
    Stack trace:
    #0 silly/vendor/mnapoli/silly/src/Command/Command.php(63): Symfony\Component\Console\Input\InputOption->setDefault(false)
    #1 silly/vendor/mnapoli/silly/src/Application.php(108): Silly\Command\Command->defaults(Array)
    #2 silly/test.php(20): Silly\Application->command('mail:download [...', Array)
    #3 {main}
      thrown in vendor/symfony/console/Input/InputOption.php on line 159
    

    seems to be issue with symfony 4.2:

    $ composer show
    mnapoli/silly             1.7.1   Silly CLI micro-framework based on Symfony Console
    php-di/invoker            2.0.0   Generic and extensible callable invoker
    psr/container             1.0.0   Common Container Interface (PHP FIG PSR-11)
    symfony/console           v4.2.2  Symfony Console Component
    symfony/contracts         v1.0.2  A set of abstractions extracted out of the Symfony components
    symfony/polyfill-mbstring v1.10.0 Symfony polyfill for the Mbstring extension
    

    Reproducer: https://gist.github.com/glensc/b28386f361db58f3c436e7b79460983b

    tag v1 shows the problem:

    git clone -b v1 https://gist.github.com/glensc/b28386f361db58f3c436e7b79460983b silly-51
    
    opened by glensc 5
  • $output throwing an error and not running command

    $output throwing an error and not running command

    Hi, Silly looks amazing and faster and I want to use it instead of symfony/console but following your first page example I always get and error.

    When I use this:

    $app->command('greet [name] [--yell]', function ($name, $yell, OutputInterface $output) {
    

    PHP Error log returns the following error:

    PHP Catchable fatal error:  Argument 3 passed to {closure}() must be an instance of OutputInterface, instance of Symfony\Component\Console\Output\ConsoleOutput given in /Volumes/Macintosh Work/www/playground/f3-app/app/console/commands/new_package_command.php on line 8
    

    To make this work I had to remove OutputInterface or change it with Symfony\Component\Console\Output\ConsoleOutput, is this de way to go or do you think I'm doing something wrong?

    Cheers

    opened by rafaelcanical 5
  • Descriptions and default values

    Descriptions and default values

    This PR brings support to set descriptions and default values:

    $app->command('greet firstname? lastname?', function () {
        // ...
    });
    
    $app->defaults('greet', [
        'firstname' => 'John',
        'lastname'  => 'Doe',
    ]);
    
    $app->descriptions('greet', 'Greet someone', [
        'name'   => 'Who do you want to greet?',
        '--yell' => 'If set, the task will yell in uppercase letters',
    ]);
    
    enhancement 
    opened by mnapoli 5
  • Default parameters for hyphen variables

    Default parameters for hyphen variables

    Arguments and options containing hyphens are matched to camelCase variables, however this does not work when specifying default parameters for those variables.

    $console->command('app:import [number-of-clicks]', function ($numberOfClicks = 1) {
        var_dump($numberOfClicks); // expected 1 received null
    });
    

    This only works for an exact variable name match. Is there anything you can do about this?

    opened by fire015 4
  • Match inputs containing hyphens against parameter names

    Match inputs containing hyphens against parameter names

    Currently, it is not possible specify a argument or option name with a hyphen in it (e.g. --dry-run) and have that match a parameter name in the callable like $dryRun.

    This is unfortunate because multi-word options are a quite common occurrence in tools. e.x. the version of rsync I have installed has 57 (!) multi-word options and 39 of those are not aliased.

    Also, in some cases (like --dry-run) the wording used is quite common so that's what would be reached for first.

    I took some time to create a resolver that will un-hyphenate and lowercase the names before matching against closure parameters to solve this issue.

    enhancement 
    opened by thecrypticace 4
  • Allow options to have default parameters

    Allow options to have default parameters

    I saw #21 after I ran into a need for this today.

    • Default parameters will now also be determined via reflection.
    • Setting defaults via ->defaults(…) will now set defaults for matching options as well.
    opened by thecrypticace 4
  • Default values for options

    Default values for options

    I cannot seem to supply a default value to an option which accepts a value. Let me know if I'm misunderstanding the command definition API.

    I've tried within the anonymous function's parameter definition:

    $cli->command('foo [--bar=]', function($bar = 'baz') {
        var_dump($bar); // => NULL, but would expect 'baz'
    });
    

    And also with the ->defaults() method:

    $cli->command('foo [--bar=]', function($bar = 'baz') {
        // ... 
    })->defaults([
        // None of these work, resulting in an exception. 
        // Showing all for brevity, but I've tried each individually.
        'bar' => 'baz',
        '--bar' => 'baz',
        'bar=' => 'baz',
        '--bar=' => 'baz',
        '[bar]' => 'baz',
        '[--bar]' => 'baz',
        '[bar=]' => 'baz',
        '[--bar=]' => 'baz',
    ]);
    

    PHP 7.0.7, OS X 10.11.3, silly v1.3.0

    Thanks!

    enhancement 
    opened by kfriend 4
  • Conflicting php-di/php-di and php-di/invoker versions

    Conflicting php-di/php-di and php-di/invoker versions

    mnapoli/silly-php-di 1.1.0 requires php-di/php-di ~4.4 || ^5.0 php-di/php-di 5.0.0 requires php-di/invoker ~1.0 php-di/php-di 6.0.0 requires php-di/invoker ~2.0 mnapoli/silly 1.6.0 requires php-di/invoker ~2.0

    This situation currently makes it impossible to use mnapoli/silly and mnapoli/silly-php-di together with php-di/php-di 5 (because of the php-di/invoker ~1.0 vs ~2.0 conflict) or php-di/php-di 6 (because of the php-di/php-di ~4.4 || ^5.0 vs ^6.0 conflict). I'm attempting to upgrade php-di/php-di because I've encountered PHP-DI/PHP-DI#377 under PHP 7.1, which appears to only be fixed in php-di/php-di 5 and above. I've submitted PHP-DI/PHP-DI#504 to address this in php-di/php-di 4, but I would still like the ability to use 5 or above.

    $ composer require "php-di/php-di:^5"
    ./composer.json has been updated
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Your requirements could not be resolved to an installable set of packages.
    
      Problem 1
        - Installation request for mnapoli/silly ^1.6 -> satisfiable by mnapoli/silly[1.6.0].
        - mnapoli/silly-php-di 1.1.0 requires php-di/php-di ~4.4 || ^5.0 -> satisfiable by php-di/php-di[5.0.0, 5.0.1, 5.0.2, 5.0.3, 5.0.4, 5.1.0, 5.2.0, 5.2.1, 5.2.2, 5.3.0, 5.4.0, 5.4.1, 5.4.2, 5.4.3].
        - php-di/php-di 5.0.0 requires php-di/invoker ~1.0 -> satisfiable by php-di/invoker[1.0.0, 1.0.1, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.0.1 requires php-di/invoker ~1.0 -> satisfiable by php-di/invoker[1.0.0, 1.0.1, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.0.2 requires php-di/invoker ~1.0 -> satisfiable by php-di/invoker[1.0.0, 1.0.1, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.0.3 requires php-di/invoker ~1.0 -> satisfiable by php-di/invoker[1.0.0, 1.0.1, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.0.4 requires php-di/invoker ^1.0.1 -> satisfiable by php-di/invoker[1.0.1, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.1.0 requires php-di/invoker ^1.0.1 -> satisfiable by php-di/invoker[1.0.1, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.2.0 requires php-di/invoker ^1.1.1 -> satisfiable by php-di/invoker[1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.2.1 requires php-di/invoker ^1.1.1 -> satisfiable by php-di/invoker[1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.2.2 requires php-di/invoker ^1.1.1 -> satisfiable by php-di/invoker[1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.3.0 requires php-di/invoker ^1.1.1 -> satisfiable by php-di/invoker[1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.4.0 requires php-di/invoker ^1.3.2 -> satisfiable by php-di/invoker[1.3.2, 1.3.3].
        - php-di/php-di 5.4.1 requires php-di/invoker ^1.3.2 -> satisfiable by php-di/invoker[1.3.2, 1.3.3].
        - php-di/php-di 5.4.2 requires php-di/invoker ^1.3.2 -> satisfiable by php-di/invoker[1.3.2, 1.3.3].
        - php-di/php-di 5.4.3 requires php-di/invoker ^1.3.2 -> satisfiable by php-di/invoker[1.3.2, 1.3.3].
        - Can only install one of: php-di/invoker[2.0.0, 1.0.0].
        - Can only install one of: php-di/invoker[2.0.0, 1.0.1].
        - Can only install one of: php-di/invoker[2.0.0, 1.1.0].
        - Can only install one of: php-di/invoker[2.0.0, 1.1.1].
        - Can only install one of: php-di/invoker[2.0.0, 1.2.0].
        - Can only install one of: php-di/invoker[2.0.0, 1.3.0].
        - Can only install one of: php-di/invoker[2.0.0, 1.3.1].
        - Can only install one of: php-di/invoker[2.0.0, 1.3.2].
        - Can only install one of: php-di/invoker[2.0.0, 1.3.3].
        - mnapoli/silly 1.6.0 requires php-di/invoker ~2.0 -> satisfiable by php-di/invoker[2.0.0].
        - Installation request for mnapoli/silly-php-di ^1.1 -> satisfiable by mnapoli/silly-php-di[1.1.0].
    
    $ composer require "php-di/php-di:^6"
    ./composer.json has been updated
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Your requirements could not be resolved to an installable set of packages.
    
      Problem 1
        - Installation request for mnapoli/silly ^1.6 -> satisfiable by mnapoli/silly[1.6.0].
        - Can only install one of: php-di/php-di[6.0.0-alpha2, 4.x-dev].
        - Can only install one of: php-di/php-di[6.0.0-alpha3, 4.x-dev].
        - mnapoli/silly-php-di 1.1.0 requires php-di/php-di ~4.4 || ^5.0 -> satisfiable by php-di/php-di[4.x-dev, 5.0.x-dev, 5.1.x-dev, 5.3.x-dev, 5.4.x-dev].
        - php-di/php-di 5.0.x-dev requires php-di/invoker ~1.0 -> satisfiable by php-di/invoker[1.0.0, 1.0.1, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.1.x-dev requires php-di/invoker ^1.0.1 -> satisfiable by php-di/invoker[1.0.1, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.3.x-dev requires php-di/invoker ^1.1.1 -> satisfiable by php-di/invoker[1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3].
        - php-di/php-di 5.4.x-dev requires php-di/invoker ^1.3.2 -> satisfiable by php-di/invoker[1.3.2, 1.3.3].
        - php-di/php-di 6.0.0-alpha1 requires php-di/invoker ^1.3.2 -> satisfiable by php-di/invoker[1.3.2, 1.3.3].
        - php-di/php-di 6.0.x-dev requires php-di/invoker ^1.3.2 -> satisfiable by php-di/invoker[1.3.2, 1.3.3].
        - Can only install one of: php-di/invoker[2.0.0, 1.0.0].
        - Can only install one of: php-di/invoker[2.0.0, 1.0.1].
        - Can only install one of: php-di/invoker[2.0.0, 1.1.0].
        - Can only install one of: php-di/invoker[2.0.0, 1.1.1].
        - Can only install one of: php-di/invoker[2.0.0, 1.2.0].
        - Can only install one of: php-di/invoker[2.0.0, 1.3.0].
        - Can only install one of: php-di/invoker[2.0.0, 1.3.1].
        - Can only install one of: php-di/invoker[2.0.0, 1.3.2].
        - Can only install one of: php-di/invoker[2.0.0, 1.3.3].
        - mnapoli/silly 1.6.0 requires php-di/invoker ~2.0 -> satisfiable by php-di/invoker[2.0.0].
        - Installation request for mnapoli/silly-php-di ^1.1 -> satisfiable by mnapoli/silly-php-di[1.1.0].
        - Installation request for php-di/php-di ^6 -> satisfiable by php-di/php-di[6.0.0-alpha1, 6.0.0-alpha2, 6.0.0-alpha3, 6.0.x-dev].
    
    opened by elazar 3
  • Expressions written with HEREDOC/NOWDOC format oddly

    Expressions written with HEREDOC/NOWDOC format oddly

    $app->command(
        expression: <<<'COMMAND'
        evaluations:run
        [--id=]
        [--event=]
        [--type=]
        [--start-time=]
        [--end-time=]
        [--step=]
        [--table=]
        COMMAND,
        callable: RunEvaluations::class
    );
    

    Ends up looking like the following when using app list:

      evaluations:run                                                                                                                                                                                                                                                              
    [--id=]                                                                                                                                                                                                                                                                        
    [--event=]                                                                                                                                                                                                                                                                     
    [--type=]                                                                                                                                                                                                                                                                      
    [--start-time=]                                                                                                                                                                                                                                                                
    [--end-time=]                                                                                                                                                                                                                                                                  
    [--step=]                                                                                                                                                                                                                                                                      
    [--table=]
    

    When I would expect it to be:

      evaluations:run [--id=] [--event=] [--type=] [--start-time=] [--end-time=] [--step=] [--table=]
    
    opened by shadowhand 0
  • Get helper from classes autowired by PHP-DI

    Get helper from classes autowired by PHP-DI

    Currently, I can't use getHelperSet() method because I create a separate class that will be autowired by PHP-DI. So now, if I want to use getHelperSet() I have to use the old way to attach a command, by attaching a function to $app->command() second argument rather than attaching my separated class. Is there any workaround for this situation?

    opened by imam 1
  • single command applications with arguments

    single command applications with arguments

    while single command applications are possible with setDefaultCommand:

    $app->command('run', /* ... */);
    $app->setDefaultCommand('run');
    

    http://mnapoli.fr/silly/docs/command-definition.html

    implemented (suggested) via: #30

    it doesn't play well when you want to use arguments (not options), as that would require that you specify command name before first argument.

    opened by glensc 4
Releases(1.8.1)
  • 1.8.1(Sep 6, 2022)

    Bugfixes

    • Use ArrayInput instead of StringInput by @babeuloula in https://github.com/mnapoli/silly/pull/66

    New Contributors

    • @babeuloula made their first contribution in https://github.com/mnapoli/silly/pull/66

    Full Changelog: https://github.com/mnapoli/silly/compare/1.8.0...1.8.1

    Source code(tar.gz)
    Source code(zip)
  • 1.8.0(Feb 20, 2022)

    What's Changed

    • Add return types preparing for upgrade of parent. by @andersonamuller in https://github.com/mnapoli/silly/pull/62
    • Add Github Workflow by @cjobeili in https://github.com/mnapoli/silly/pull/64
    • Update to symfony/console 6.0 and newer version of phpunit by @cjobeili in https://github.com/mnapoli/silly/pull/61

    New Contributors

    • @andersonamuller made their first contribution in https://github.com/mnapoli/silly/pull/62
    • @cjobeili made their first contribution in https://github.com/mnapoli/silly/pull/64

    Full Changelog: https://github.com/mnapoli/silly/compare/1.7.3...1.8.0

    Source code(tar.gz)
    Source code(zip)
  • 1.7.3(Dec 13, 2021)

  • 1.7.2(Nov 26, 2019)

  • 1.7.1(Dec 26, 2018)

  • 1.7.0(Nov 18, 2017)

  • 1.6.0(May 22, 2017)

    • #33 & #39 Support PSR-11

    • #39 Support PHP 7.0 and up only

    • #36 & #38 Allow to inject the SymfonyStyle object introduced in Symfony 2.8

    use \Symfony\Component\Console\Style\SymfonyStyle;
    
    ...
    
    $app->command('greet', function (SymfonyStyle $io) {
        $io->write('hello');
    });
    
    • #34 & #35 Support default values for arguments/options with - in them:
    $console->command('import [number-of-clicks]', function ($numberOfClicks = 1) {
       var_dump($numberOfClicks); // prints 1
    });
    
    Source code(tar.gz)
    Source code(zip)
  • 1.5.1(Sep 16, 2016)

    #27, #28, #29: Throw an explicit exception when commands are registered as static calls to non static method calls.

    Wrong way:

    $this->application->command('greet', ['MyClass', 'foo']);
    
    class MyClass {
         public function foo() { ... }
    }
    

    That will now correctly throw an exception.

    This should be used instead:

    $this->application->command('greet', [new MyClass(), 'foo']);
    

    Or you can use dependency injection with an autowiring container (http://mnapoli.fr/silly/docs/dependency-injection.html), for example with PHP-DI: http://mnapoli.fr/silly/docs/dependency-injection.html That way you don't have to change your code.

    Source code(tar.gz)
    Source code(zip)
  • 1.5.0(Aug 31, 2016)

    This release contains improvements on command arguments and options, by @thecrypticace:

    • Allow options to have default values (#25, documentation)

      $app->command('greet [--age=]', function ($age) {
          // ...
      })->defaults([
          'age' => 25,
      ]);;
      
    • Default values can now be inferred from the callable's parameters (#25, documentation)

      $app->command('greet [name] [--age=]', function ($name = 'John', $age = 25) {
          // ...
      });
      
    • Fixed: matching arguments and options containing hyphens (#26, documentation)

      $app->command('run [--dry-run]', function ($dryRun) {
          // ...
      });
      
    Source code(tar.gz)
    Source code(zip)
  • 1.4.0(Aug 13, 2016)

  • 1.3.1(Aug 1, 2016)

  • 1.3.0(Feb 27, 2016)

  • 1.2.0(Feb 1, 2016)

    Improvements

    • #17 Run a sub-command easily with runCommand(), for example:

      $app->command('init', function ($input, $output) {
          $this->runCommand('db:drop --force', $output)
          $this->runCommand('db:create', $output)
          $this->runCommand('db:fixtures --verbose', $output)
      });
      

    Bugfixes

    • #19 Exit codes returned by commands were not returned by the application
    Source code(tar.gz)
    Source code(zip)
  • 1.1.1(May 24, 2015)

  • 1.1.0(Apr 5, 2015)

  • 1.0.0(Mar 8, 2015)

  • 0.2.0(Feb 28, 2015)

    0.x versions do not keep backward compatibility.

    • Added support for setting command descriptions
    • Added support for setting arguments & options default values
    • More consistent syntax (BC breaks!):
      • options with array values are now defined like this: --option=* (was previously [--option=]*
      • options with optional values (--option=?) have been removed as they are completely buggy and unusable in Symfony…
    • Added documentation on how using helpers
    Source code(tar.gz)
    Source code(zip)
  • 0.1.0(Feb 12, 2015)

Owner
Matthieu Napoli
👋 Software consultant working on serverless PHP applications.
Matthieu Napoli
A resource-oriented micro PHP framework

Bullet Bullet is a resource-oriented micro PHP framework built around HTTP URIs. Bullet takes a unique functional-style approach to URL routing by par

Vance Lucas 415 Dec 27, 2022
Lemon is php micro framework built for simple applications.

Lemon is simple micro framework that provides routing, etc.

Lemon 20 Dec 16, 2022
Blink is a micro web framework for building long-running and high performance services

Blink is a micro web framework for building long-running and high performance services, the design heavily inspired by Yii2 and Laravel. Blink aims to provide the most expressive and elegant API and try to make the experience of web development as pleasant as possible.

Jin Hu 837 Dec 18, 2022
TidyPHP is a micro php framework to build web applications

TidyPHP is a micro MVC PHP Framework made to understand how PHP Frameworks work behind the scense and build fast and tidy php web applications.

Amin 15 Jul 28, 2022
Frankie - A frankenstein micro-framework for PHP

Frankie - A frankenstein micro-framework for PHP Features Frankie is a micro-framework focused on annotation. The goal is to use annotation in order t

null 19 Dec 10, 2020
ExEngine is an ultra lightweight micro-services framework for PHP 5.6+

ExEngine is an ultra lightweight micro-services framework for PHP 5.6+. Documentation Checkout the Wiki. Examples Click here to browse examples, also

linkfast.io 1 Nov 23, 2020
REST-like PHP micro-framework.

Phprest Description REST-like PHP micro-framework. It's based on the Proton (StackPhp compatible) micro-framework. Phprest gives you only the very bas

Phprest 312 Dec 30, 2022
Larasymf - mini framework for medium sized projects based on laravel and symfony packages

Larasymf, PHP Framework Larasymf, as its says is a mini framework for medium sized projects based on laravel and symfony packages We have not yet writ

Claude Fassinou 6 Jul 3, 2022
The Laravel Lumen Framework.

Lumen PHP Framework Laravel Lumen is a stunningly fast PHP micro-framework for building web applications with expressive, elegant syntax. We believe d

The Laravel Framework 7.6k Jan 7, 2023
Slim Framework 4 Skeleton Application

Slim Framework 4 Skeleton Application Use this skeleton application to quickly setup and start working on a new Slim Framework 4 application. This app

Slim Framework 1.5k Dec 29, 2022
🐺 Lightweight and easy to use framework for building web apps.

Wolff Web development made just right. Wolff is a ridiculously small and lightweight PHP framework, intended for those who want to build web applicati

Alejandro 216 Dec 8, 2022
StackSync is a simple, lightweight and native fullstack PHP mini-framework.

StackSync is a fullstack PHP mini framework, with an MVC structure, custom API system with a Middleware and JWT authentication, components based views, flexible routing, PSR4 autoloading. Essential files generation (migrations, seeders, controllers and models) and other operations can be executed through custom commands.

Khomsi Adam 3 Jul 24, 2022
PHP微服务框架即Micro Service Framework For PHP

Micro Service Framework For PHP PHP微服务框架即“Micro Service Framework For PHP”,是Camera360社区服务器端团队基于Swoole自主研发现代化的PHP协程服务框架,简称msf或者php-msf,是Swoole的工程级企业应用框

Camera360 1.8k Jan 5, 2023
Enter-to-the-Matrix-with-Symfony-Console - Reproduction of the "Matrix characterfall" effect with the Symfony Console component.

Enter to the Matrix (with Symfony Console) Reproduction of the "Matrix characterfall" effect with the Symfony Console component. Run Clone the project

Yoan Bernabeu 23 Aug 28, 2022
[DEPRECATED -- Use Symfony instead] The PHP micro-framework based on the Symfony Components

Silex, a simple Web Framework WARNING: Silex is in maintenance mode only. Ends of life is set to June 2018. Read more on Symfony's blog. Silex is a PH

Silex 3.6k Dec 22, 2022
A PHP project/micro-package generator for PDS compliant projects or micro-packages.

Construct A PHP project/micro-package generator for PDS compliant projects or micro-packages. Installation Construct should be installed globally thro

Jonathan Torres 263 Sep 28, 2022
Console - The Console component eases the creation of beautiful and testable command line interfaces.

Console Component The Console component eases the creation of beautiful and testable command line interfaces. Sponsor The Console component for Symfon

Symfony 9.4k Jan 7, 2023
Laminas\Console is a component to design and implement console applications in PHP.

laminas-console This package is abandoned and will receive no further development! We recommend using laminas/laminas-cli. Laminas\Console is a compon

Laminas Project 10 Nov 27, 2021
Framework X is a simple and fast micro framework based on PHP

Framework X is a simple and fast micro framework based on PHP. I've created a simple CRUD application to understand how it works. I used twig and I created a custom middleware to handle PUT, DELETE methods.

Mahmut Bayri 6 Oct 14, 2022