duyler / duyler
Installs: 13
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Type:project
Requires
- php: >=8.3
- duyler/aspect: dev-main
- duyler/builder: dev-main
- duyler/console: dev-main
- duyler/http: dev-main
- duyler/io: dev-main
- duyler/orm: dev-main
- duyler/web: dev-main
- nyholm/psr7: ^1.8
- spiral/roadrunner-http: ^3.1
Requires (Dev)
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2025-06-04 13:35:21 UTC
README
Event-driven and non-blocking PHP framework
Get started
Install with included docker config and without host php interpreter
curl -L -O https://github.com/duyler/duyler/archive/refs/heads/master.zip
unzip master.zip && mv duyler-master duyler
cd duyler
make build
make up
For show all available commands
make help
Install using local composer
composer create-project duyler/duyler
cd duyler
make up
Open http://localhost/
Create type
// src/Type/Page.php <?php declare(strict_types=1); namespace App\Type; readonly class Page { public function __construct( public string $title, public string $content, ) {} }
Create action
// src/Action/GetPageAction.php <?php declare(strict_types=1); namespace App\Action; use App\Type\Page; class GetPageAction { public function __invoke(): Page { return new Page( title: 'Home', content: 'Hello, World!', ); } }
// build/actions.php <?php declare(strict_types=1); use Duyler\Builder\Build\Action\Action; Action::create(id: 'Page.GetPage') ->handler(handler: \App\Action\GetPageAction::class) ->type(\App\Type\Page::class);
Create controller
// src/Controller/PageController <?php declare(strict_types=1); namespace App\Controller; use App\Type\Page; use Duyler\Web\Controller\BaseController; use Psr\Http\Message\ResponseInterface; class PageController extends BaseController { public function __invoke(Page $page): ResponseInterface { return $this->json($page); } }
// build/controllers.php <?php declare(strict_types=1); use App\Controller\PageController; use App\Type\Page; use Duyler\Web\Build\Attribute\Route; use Duyler\Web\Build\Controller; use Duyler\Web\Enum\HttpMethod; Controller::build(PageController::class) ->actions( 'Page.GetPage', ) ->attributes( new Route( method: HttpMethod::Get, pattern: 'page', ), );
type Page
will be received automatically
make restart