Last active
May 6, 2024 09:57
-
-
Save GromNaN/37e661f2ff06735d8b93ff93b24f8257 to your computer and use it in GitHub Desktop.
Asynchronous Twig PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Demo ReactPHP application using Twig in yielding mode with an async function. | |
*/ | |
namespace App; | |
use Exception; | |
use Psr\Http\Message\ServerRequestInterface; | |
use React\Http\HttpServer; | |
use React\Http\Message\Response; | |
use React\Socket\SocketServer; | |
use Twig\Environment; | |
use Twig\Loader\ArrayLoader; | |
use Twig\TwigFunction; | |
use function React\Async\async; | |
use function React\Async\delay; | |
require __DIR__ . '/vendor/autoload.php'; | |
$twig = new Environment( | |
new ArrayLoader(['hello' => '{{ delay("Hello") }} {{ delay("World") }} !!']), | |
['use_yield' => true] | |
); | |
$twig->addFunction(new TwigFunction( | |
'delay', | |
function (string $text): string { | |
delay(random_int(1, 10) / 100); | |
return $text; | |
} | |
)); | |
$http = new HttpServer(async(function (ServerRequestInterface $request) use ($twig) { | |
$body = $twig->render('hello'); | |
if ($body !== 'Hello World !!') { | |
return new Response(500, [], 'ERROR: ' . $body); | |
} | |
return Response::plaintext($body); | |
})); | |
$http->on('error', function (Exception $e) { | |
echo $e; | |
}); | |
$socket = new SocketServer('127.0.0.1:8080'); | |
$http->listen($socket); | |
echo "Server running at http://127.0.0.1:8080" . PHP_EOL; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"require": { | |
"php": ">=8.2", | |
"react/async": "^4.2", | |
"react/http": "^1.9", | |
"twig/twig": "3.x-dev" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{"_readme":["This file locks the dependencies of your project to a known state","Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies","This file is @generated automatically"],"content-hash":"c44e27c670e971f377bb98a09003a949","packages":[{"name":"evenement/evenement","version":"v3.0.2","source":{"type":"git","url":"https://github.com/igorw/evenement.git","reference":"0a16b0d71ab13284339abb99d9d2bd813640efbc"},"dist":{"type":"zip","url":"https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc","reference":"0a16b0d71ab13284339abb99d9d2bd813640efbc","shasum":""},"require":{"php":">=7.0"},"require-dev":{"phpunit/phpunit":"^9 || ^6"},"type":"library","autoload":{"psr-4":{"Evenement\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Igor Wiedler","email":"[email protected]"}],"description":"Événement is a very simple event dispatching library for PHP","keywords":["event-dispatcher","event-emitter"],"support":{"issues":"https://github.com/igorw/evenement/issues","source":"https://github.com/igorw/evenement/tree/v3.0.2"},"time":"2023-08-08T05:53:35+00:00"},{"name":"fig/http-message-util","version":"1.1.5","source":{"type":"git","url":"https://github.com/php-fig/http-message-util.git","reference":"9d94dc0154230ac39e5bf89398b324a86f63f765"},"dist":{"type":"zip","url":"https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765","reference":"9d94dc0154230ac39e5bf89398b324a86f63f765","shasum":""},"require":{"php":"^5.3 || ^7.0 || ^8.0"},"suggest":{"psr/http-message":"The package containing the PSR-7 interfaces"},"type":"library","extra":{"branch-alias":{"dev-master":"1.1.x-dev"}},"autoload":{"psr-4":{"Fig\\Http\\Message\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"PHP-FIG","homepage":"https://www.php-fig.org/"}],"description":"Utility classes and constants for use with PSR-7 (psr/http-message)","keywords":["http","http-message","psr","psr-7","request","response"],"support":{"issues":"https://github.com/php-fig/http-message-util/issues","source":"https://github.com/php-fig/http-message-util/tree/1.1.5"},"time":"2020-11-24T22:02:12+00:00"},{"name":"psr/http-message","version":"1.1","source":{"type":"git","url":"https://github.com/php-fig/http-message.git","reference":"cb6ce4845ce34a8ad9e68117c10ee90a29919eba"},"dist":{"type":"zip","url":"https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba","reference":"cb6ce4845ce34a8ad9e68117c10ee90a29919eba","shasum":""},"require":{"php":"^7.2 || ^8.0"},"type":"library","extra":{"branch-alias":{"dev-master":"1.1.x-dev"}},"autoload":{"psr-4":{"Psr\\Http\\Message\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"PHP-FIG","homepage":"http://www.php-fig.org/"}],"description":"Common interface for HTTP messages","homepage":"https://github.com/php-fig/http-message","keywords":["http","http-message","psr","psr-7","request","response"],"support":{"source":"https://github.com/php-fig/http-message/tree/1.1"},"time":"2023-04-04T09:50:52+00:00"},{"name":"react/async","version":"v4.2.0","source":{"type":"git","url":"https://github.com/reactphp/async.git","reference":"7c3738e837b38c9513af44398b8c1b2b1be1fbbc"},"dist":{"type":"zip","url":"https://api.github.com/repos/reactphp/async/zipball/7c3738e837b38c9513af44398b8c1b2b1be1fbbc","reference":"7c3738e837b38c9513af44398b8c1b2b1be1fbbc","shasum":""},"require":{"php":">=8.1","react/event-loop":"^1.2","react/promise":"^3.0 || ^2.8 || ^1.2.1"},"require-dev":{"phpstan/phpstan":"1.10.39","phpunit/phpunit":"^9.6"},"type":"library","autoload":{"files":["src/functions_include.php"],"psr-4":{"React\\Async\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Christian Lück","email":"[email protected]","homepage":"https://clue.engineering/"},{"name":"Cees-Jan Kiewiet","email":"[email protected]","homepage":"https://wyrihaximus.net/"},{"name":"Jan Sorgalla","email":"[email protected]","homepage":"https://sorgalla.com/"},{"name":"Chris Boden","email":"[email protected]","homepage":"https://cboden.dev/"}],"description":"Async utilities and fibers for ReactPHP","keywords":["async","reactphp"],"support":{"issues":"https://github.com/reactphp/async/issues","source":"https://github.com/reactphp/async/tree/v4.2.0"},"funding":[{"url":"https://opencollective.com/reactphp","type":"open_collective"}],"time":"2023-11-22T16:43:46+00:00"},{"name":"react/cache","version":"v1.2.0","source":{"type":"git","url":"https://github.com/reactphp/cache.git","reference":"d47c472b64aa5608225f47965a484b75c7817d5b"},"dist":{"type":"zip","url":"https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b","reference":"d47c472b64aa5608225f47965a484b75c7817d5b","shasum":""},"require":{"php":">=5.3.0","react/promise":"^3.0 || ^2.0 || ^1.1"},"require-dev":{"phpunit/phpunit":"^9.5 || ^5.7 || ^4.8.35"},"type":"library","autoload":{"psr-4":{"React\\Cache\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Christian Lück","email":"[email protected]","homepage":"https://clue.engineering/"},{"name":"Cees-Jan Kiewiet","email":"[email protected]","homepage":"https://wyrihaximus.net/"},{"name":"Jan Sorgalla","email":"[email protected]","homepage":"https://sorgalla.com/"},{"name":"Chris Boden","email":"[email protected]","homepage":"https://cboden.dev/"}],"description":"Async, Promise-based cache interface for ReactPHP","keywords":["cache","caching","promise","reactphp"],"support":{"issues":"https://github.com/reactphp/cache/issues","source":"https://github.com/reactphp/cache/tree/v1.2.0"},"funding":[{"url":"https://opencollective.com/reactphp","type":"open_collective"}],"time":"2022-11-30T15:59:55+00:00"},{"name":"react/dns","version":"v1.12.0","source":{"type":"git","url":"https://github.com/reactphp/dns.git","reference":"c134600642fa615b46b41237ef243daa65bb64ec"},"dist":{"type":"zip","url":"https://api.github.com/repos/reactphp/dns/zipball/c134600642fa615b46b41237ef243daa65bb64ec","reference":"c134600642fa615b46b41237ef243daa65bb64ec","shasum":""},"require":{"php":">=5.3.0","react/cache":"^1.0 || ^0.6 || ^0.5","react/event-loop":"^1.2","react/promise":"^3.0 || ^2.7 || ^1.2.1"},"require-dev":{"phpunit/phpunit":"^9.6 || ^5.7 || ^4.8.36","react/async":"^4 || ^3 || ^2","react/promise-timer":"^1.9"},"type":"library","autoload":{"psr-4":{"React\\Dns\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Christian Lück","email":"[email protected]","homepage":"https://clue.engineering/"},{"name":"Cees-Jan Kiewiet","email":"[email protected]","homepage":"https://wyrihaximus.net/"},{"name":"Jan Sorgalla","email":"[email protected]","homepage":"https://sorgalla.com/"},{"name":"Chris Boden","email":"[email protected]","homepage":"https://cboden.dev/"}],"description":"Async DNS resolver for ReactPHP","keywords":["async","dns","dns-resolver","reactphp"],"support":{"issues":"https://github.com/reactphp/dns/issues","source":"https://github.com/reactphp/dns/tree/v1.12.0"},"funding":[{"url":"https://opencollective.com/reactphp","type":"open_collective"}],"time":"2023-11-29T12:41:06+00:00"},{"name":"react/event-loop","version":"v1.5.0","source":{"type":"git","url":"https://github.com/reactphp/event-loop.git","reference":"bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354"},"dist":{"type":"zip","url":"https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354","reference":"bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354","shasum":""},"require":{"php":">=5.3.0"},"require-dev":{"phpunit/phpunit":"^9.6 || ^5.7 || ^4.8.36"},"suggest":{"ext-pcntl":"For signal handling support when using the StreamSelectLoop"},"type":"library","autoload":{"psr-4":{"React\\EventLoop\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Christian Lück","email":"[email protected]","homepage":"https://clue.engineering/"},{"name":"Cees-Jan Kiewiet","email":"[email protected]","homepage":"https://wyrihaximus.net/"},{"name":"Jan Sorgalla","email":"[email protected]","homepage":"https://sorgalla.com/"},{"name":"Chris Boden","email":"[email protected]","homepage":"https://cboden.dev/"}],"description":"ReactPHP's core reactor event loop that libraries can use for evented I/O.","keywords":["asynchronous","event-loop"],"support":{"issues":"https://github.com/reactphp/event-loop/issues","source":"https://github.com/reactphp/event-loop/tree/v1.5.0"},"funding":[{"url":"https://opencollective.com/reactphp","type":"open_collective"}],"time":"2023-11-13T13:48:05+00:00"},{"name":"react/http","version":"v1.9.0","source":{"type":"git","url":"https://github.com/reactphp/http.git","reference":"bb3154dbaf2dfe3f0467f956a05f614a69d5f1d0"},"dist":{"type":"zip","url":"https://api.github.com/repos/reactphp/http/zipball/bb3154dbaf2dfe3f0467f956a05f614a69d5f1d0","reference":"bb3154dbaf2dfe3f0467f956a05f614a69d5f1d0","shasum":""},"require":{"evenement/evenement":"^3.0 || ^2.0 || ^1.0","fig/http-message-util":"^1.1","php":">=5.3.0","psr/http-message":"^1.0","react/event-loop":"^1.2","react/promise":"^3 || ^2.3 || ^1.2.1","react/socket":"^1.12","react/stream":"^1.2","ringcentral/psr7":"^1.2"},"require-dev":{"clue/http-proxy-react":"^1.8","clue/reactphp-ssh-proxy":"^1.4","clue/socks-react":"^1.4","phpunit/phpunit":"^9.5 || ^5.7 || ^4.8.35","react/async":"^4 || ^3 || ^2","react/promise-stream":"^1.4","react/promise-timer":"^1.9"},"type":"library","autoload":{"psr-4":{"React\\Http\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Christian Lück","email":"[email protected]","homepage":"https://clue.engineering/"},{"name":"Cees-Jan Kiewiet","email":"[email protected]","homepage":"https://wyrihaximus.net/"},{"name":"Jan Sorgalla","email":"[email protected]","homepage":"https://sorgalla.com/"},{"name":"Chris Boden","email":"[email protected]","homepage":"https://cboden.dev/"}],"description":"Event-driven, streaming HTTP client and server implementation for ReactPHP","keywords":["async","client","event-driven","http","http client","http server","https","psr-7","reactphp","server","streaming"],"support":{"issues":"https://github.com/reactphp/http/issues","source":"https://github.com/reactphp/http/tree/v1.9.0"},"funding":[{"url":"https://opencollective.com/reactphp","type":"open_collective"}],"time":"2023-04-26T10:29:24+00:00"},{"name":"react/promise","version":"v3.1.0","source":{"type":"git","url":"https://github.com/reactphp/promise.git","reference":"e563d55d1641de1dea9f5e84f3cccc66d2bfe02c"},"dist":{"type":"zip","url":"https://api.github.com/repos/reactphp/promise/zipball/e563d55d1641de1dea9f5e84f3cccc66d2bfe02c","reference":"e563d55d1641de1dea9f5e84f3cccc66d2bfe02c","shasum":""},"require":{"php":">=7.1.0"},"require-dev":{"phpstan/phpstan":"1.10.39 || 1.4.10","phpunit/phpunit":"^9.6 || ^7.5"},"type":"library","autoload":{"files":["src/functions_include.php"],"psr-4":{"React\\Promise\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Jan Sorgalla","email":"[email protected]","homepage":"https://sorgalla.com/"},{"name":"Christian Lück","email":"[email protected]","homepage":"https://clue.engineering/"},{"name":"Cees-Jan Kiewiet","email":"[email protected]","homepage":"https://wyrihaximus.net/"},{"name":"Chris Boden","email":"[email protected]","homepage":"https://cboden.dev/"}],"description":"A lightweight implementation of CommonJS Promises/A for PHP","keywords":["promise","promises"],"support":{"issues":"https://github.com/reactphp/promise/issues","source":"https://github.com/reactphp/promise/tree/v3.1.0"},"funding":[{"url":"https://opencollective.com/reactphp","type":"open_collective"}],"time":"2023-11-16T16:21:57+00:00"},{"name":"react/socket","version":"v1.15.0","source":{"type":"git","url":"https://github.com/reactphp/socket.git","reference":"216d3aec0b87f04a40ca04f481e6af01bdd1d038"},"dist":{"type":"zip","url":"https://api.github.com/repos/reactphp/socket/zipball/216d3aec0b87f04a40ca04f481e6af01bdd1d038","reference":"216d3aec0b87f04a40ca04f481e6af01bdd1d038","shasum":""},"require":{"evenement/evenement":"^3.0 || ^2.0 || ^1.0","php":">=5.3.0","react/dns":"^1.11","react/event-loop":"^1.2","react/promise":"^3 || ^2.6 || ^1.2.1","react/stream":"^1.2"},"require-dev":{"phpunit/phpunit":"^9.6 || ^5.7 || ^4.8.36","react/async":"^4 || ^3 || ^2","react/promise-stream":"^1.4","react/promise-timer":"^1.10"},"type":"library","autoload":{"psr-4":{"React\\Socket\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Christian Lück","email":"[email protected]","homepage":"https://clue.engineering/"},{"name":"Cees-Jan Kiewiet","email":"[email protected]","homepage":"https://wyrihaximus.net/"},{"name":"Jan Sorgalla","email":"[email protected]","homepage":"https://sorgalla.com/"},{"name":"Chris Boden","email":"[email protected]","homepage":"https://cboden.dev/"}],"description":"Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP","keywords":["Connection","Socket","async","reactphp","stream"],"support":{"issues":"https://github.com/reactphp/socket/issues","source":"https://github.com/reactphp/socket/tree/v1.15.0"},"funding":[{"url":"https://opencollective.com/reactphp","type":"open_collective"}],"time":"2023-12-15T11:02:10+00:00"},{"name":"react/stream","version":"v1.3.0","source":{"type":"git","url":"https://github.com/reactphp/stream.git","reference":"6fbc9672905c7d5a885f2da2fc696f65840f4a66"},"dist":{"type":"zip","url":"https://api.github.com/repos/reactphp/stream/zipball/6fbc9672905c7d5a885f2da2fc696f65840f4a66","reference":"6fbc9672905c7d5a885f2da2fc696f65840f4a66","shasum":""},"require":{"evenement/evenement":"^3.0 || ^2.0 || ^1.0","php":">=5.3.8","react/event-loop":"^1.2"},"require-dev":{"clue/stream-filter":"~1.2","phpunit/phpunit":"^9.5 || ^5.7 || ^4.8.35"},"type":"library","autoload":{"psr-4":{"React\\Stream\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Christian Lück","email":"[email protected]","homepage":"https://clue.engineering/"},{"name":"Cees-Jan Kiewiet","email":"[email protected]","homepage":"https://wyrihaximus.net/"},{"name":"Jan Sorgalla","email":"[email protected]","homepage":"https://sorgalla.com/"},{"name":"Chris Boden","email":"[email protected]","homepage":"https://cboden.dev/"}],"description":"Event-driven readable and writable streams for non-blocking I/O in ReactPHP","keywords":["event-driven","io","non-blocking","pipe","reactphp","readable","stream","writable"],"support":{"issues":"https://github.com/reactphp/stream/issues","source":"https://github.com/reactphp/stream/tree/v1.3.0"},"funding":[{"url":"https://opencollective.com/reactphp","type":"open_collective"}],"time":"2023-06-16T10:52:11+00:00"},{"name":"ringcentral/psr7","version":"1.3.0","source":{"type":"git","url":"https://github.com/ringcentral/psr7.git","reference":"360faaec4b563958b673fb52bbe94e37f14bc686"},"dist":{"type":"zip","url":"https://api.github.com/repos/ringcentral/psr7/zipball/360faaec4b563958b673fb52bbe94e37f14bc686","reference":"360faaec4b563958b673fb52bbe94e37f14bc686","shasum":""},"require":{"php":">=5.3","psr/http-message":"~1.0"},"provide":{"psr/http-message-implementation":"1.0"},"require-dev":{"phpunit/phpunit":"~4.0"},"type":"library","extra":{"branch-alias":{"dev-master":"1.0-dev"}},"autoload":{"files":["src/functions_include.php"],"psr-4":{"RingCentral\\Psr7\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Michael Dowling","email":"[email protected]","homepage":"https://github.com/mtdowling"}],"description":"PSR-7 message implementation","keywords":["http","message","stream","uri"],"support":{"source":"https://github.com/ringcentral/psr7/tree/master"},"time":"2018-05-29T20:21:04+00:00"},{"name":"symfony/deprecation-contracts","version":"v3.4.0","source":{"type":"git","url":"https://github.com/symfony/deprecation-contracts.git","reference":"7c3aff79d10325257a001fcf92d991f24fc967cf"},"dist":{"type":"zip","url":"https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf","reference":"7c3aff79d10325257a001fcf92d991f24fc967cf","shasum":""},"require":{"php":">=8.1"},"type":"library","extra":{"branch-alias":{"dev-main":"3.4-dev"},"thanks":{"name":"symfony/contracts","url":"https://github.com/symfony/contracts"}},"autoload":{"files":["function.php"]},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Nicolas Grekas","email":"[email protected]"},{"name":"Symfony Community","homepage":"https://symfony.com/contributors"}],"description":"A generic function and convention to trigger deprecation notices","homepage":"https://symfony.com","support":{"source":"https://github.com/symfony/deprecation-contracts/tree/v3.4.0"},"funding":[{"url":"https://symfony.com/sponsor","type":"custom"},{"url":"https://github.com/fabpot","type":"github"},{"url":"https://tidelift.com/funding/github/packagist/symfony/symfony","type":"tidelift"}],"time":"2023-05-23T14:45:45+00:00"},{"name":"symfony/polyfill-ctype","version":"v1.28.0","source":{"type":"git","url":"https://github.com/symfony/polyfill-ctype.git","reference":"ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb"},"dist":{"type":"zip","url":"https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb","reference":"ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb","shasum":""},"require":{"php":">=7.1"},"provide":{"ext-ctype":"*"},"suggest":{"ext-ctype":"For best performance"},"type":"library","extra":{"branch-alias":{"dev-main":"1.28-dev"},"thanks":{"name":"symfony/polyfill","url":"https://github.com/symfony/polyfill"}},"autoload":{"files":["bootstrap.php"],"psr-4":{"Symfony\\Polyfill\\Ctype\\":""}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Gert de Pagter","email":"[email protected]"},{"name":"Symfony Community","homepage":"https://symfony.com/contributors"}],"description":"Symfony polyfill for ctype functions","homepage":"https://symfony.com","keywords":["compatibility","ctype","polyfill","portable"],"support":{"source":"https://github.com/symfony/polyfill-ctype/tree/v1.28.0"},"funding":[{"url":"https://symfony.com/sponsor","type":"custom"},{"url":"https://github.com/fabpot","type":"github"},{"url":"https://tidelift.com/funding/github/packagist/symfony/symfony","type":"tidelift"}],"time":"2023-01-26T09:26:14+00:00"},{"name":"symfony/polyfill-mbstring","version":"v1.28.0","source":{"type":"git","url":"https://github.com/symfony/polyfill-mbstring.git","reference":"42292d99c55abe617799667f454222c54c60e229"},"dist":{"type":"zip","url":"https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229","reference":"42292d99c55abe617799667f454222c54c60e229","shasum":""},"require":{"php":">=7.1"},"provide":{"ext-mbstring":"*"},"suggest":{"ext-mbstring":"For best performance"},"type":"library","extra":{"branch-alias":{"dev-main":"1.28-dev"},"thanks":{"name":"symfony/polyfill","url":"https://github.com/symfony/polyfill"}},"autoload":{"files":["bootstrap.php"],"psr-4":{"Symfony\\Polyfill\\Mbstring\\":""}},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Nicolas Grekas","email":"[email protected]"},{"name":"Symfony Community","homepage":"https://symfony.com/contributors"}],"description":"Symfony polyfill for the Mbstring extension","homepage":"https://symfony.com","keywords":["compatibility","mbstring","polyfill","portable","shim"],"support":{"source":"https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"},"funding":[{"url":"https://symfony.com/sponsor","type":"custom"},{"url":"https://github.com/fabpot","type":"github"},{"url":"https://tidelift.com/funding/github/packagist/symfony/symfony","type":"tidelift"}],"time":"2023-07-28T09:04:16+00:00"},{"name":"symfony/polyfill-php80","version":"v1.28.0","source":{"type":"git","url":"https://github.com/symfony/polyfill-php80.git","reference":"6caa57379c4aec19c0a12a38b59b26487dcfe4b5"},"dist":{"type":"zip","url":"https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5","reference":"6caa57379c4aec19c0a12a38b59b26487dcfe4b5","shasum":""},"require":{"php":">=7.1"},"type":"library","extra":{"branch-alias":{"dev-main":"1.28-dev"},"thanks":{"name":"symfony/polyfill","url":"https://github.com/symfony/polyfill"}},"autoload":{"files":["bootstrap.php"],"psr-4":{"Symfony\\Polyfill\\Php80\\":""},"classmap":["Resources/stubs"]},"notification-url":"https://packagist.org/downloads/","license":["MIT"],"authors":[{"name":"Ion Bazan","email":"[email protected]"},{"name":"Nicolas Grekas","email":"[email protected]"},{"name":"Symfony Community","homepage":"https://symfony.com/contributors"}],"description":"Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions","homepage":"https://symfony.com","keywords":["compatibility","polyfill","portable","shim"],"support":{"source":"https://github.com/symfony/polyfill-php80/tree/v1.28.0"},"funding":[{"url":"https://symfony.com/sponsor","type":"custom"},{"url":"https://github.com/fabpot","type":"github"},{"url":"https://tidelift.com/funding/github/packagist/symfony/symfony","type":"tidelift"}],"time":"2023-01-26T09:26:14+00:00"},{"name":"twig/twig","version":"3.x-dev","source":{"type":"git","url":"https://github.com/twigphp/Twig.git","reference":"edf580814491bbfb212cf3a403b3841fdfc2281c"},"dist":{"type":"zip","url":"https://api.github.com/repos/twigphp/Twig/zipball/edf580814491bbfb212cf3a403b3841fdfc2281c","reference":"edf580814491bbfb212cf3a403b3841fdfc2281c","shasum":""},"require":{"php":">=7.2.5","symfony/deprecation-contracts":"^2.5|^3","symfony/polyfill-ctype":"^1.8","symfony/polyfill-mbstring":"^1.3","symfony/polyfill-php80":"^1.22"},"require-dev":{"psr/container":"^1.0|^2.0","symfony/phpunit-bridge":"^5.4.9|^6.4|^7.0"},"default-branch":true,"type":"library","autoload":{"files":["src/Resources/core.php","src/Resources/debug.php","src/Resources/escaper.php","src/Resources/string_loader.php"],"psr-4":{"Twig\\":"src/"}},"notification-url":"https://packagist.org/downloads/","license":["BSD-3-Clause"],"authors":[{"name":"Fabien Potencier","email":"[email protected]","homepage":"http://fabien.potencier.org","role":"Lead Developer"},{"name":"Twig Team","role":"Contributors"},{"name":"Armin Ronacher","email":"[email protected]","role":"Project Founder"}],"description":"Twig, the flexible, fast, and secure template language for PHP","homepage":"https://twig.symfony.com","keywords":["templating"],"support":{"issues":"https://github.com/twigphp/Twig/issues","source":"https://github.com/twigphp/Twig/tree/3.x"},"funding":[{"url":"https://github.com/fabpot","type":"github"},{"url":"https://tidelift.com/funding/github/packagist/twig/twig","type":"tidelift"}],"time":"2024-02-05T13:24:44+00:00"}],"packages-dev":[],"aliases":[],"minimum-stability":"stable","stability-flags":{"twig/twig":20},"prefer-stable":false,"prefer-lowest":false,"platform":{"php":">=8.2"},"platform-dev":[],"plugin-api-version":"2.6.0"} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment