{"id":37014061,"url":"https://github.com/parvinshi/eagle","last_synced_at":"2026-01-14T01:23:44.754Z","repository":{"id":57036104,"uuid":"163825614","full_name":"parvinshi/eagle","owner":"parvinshi","description":"An extensible web framework for PHP, with useful features: dependency injection container and route, that helps you to quickly and easily build RESTful APIs and web applications.","archived":false,"fork":false,"pushed_at":"2021-03-28T05:34:54.000Z","size":36,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-19T17:34:19.723Z","etag":null,"topics":["container","dependency-injection","fastroute","php","psr-11","route","routing"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/parvinshi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-01-02T10:15:29.000Z","updated_at":"2021-03-28T05:34:56.000Z","dependencies_parsed_at":"2022-08-23T20:50:50.368Z","dependency_job_id":null,"html_url":"https://github.com/parvinshi/eagle","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/parvinshi/eagle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parvinshi%2Feagle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parvinshi%2Feagle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parvinshi%2Feagle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parvinshi%2Feagle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/parvinshi","download_url":"https://codeload.github.com/parvinshi/eagle/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parvinshi%2Feagle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28407694,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T00:40:43.272Z","status":"ssl_error","status_checked_at":"2026-01-14T00:40:42.636Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["container","dependency-injection","fastroute","php","psr-11","route","routing"],"created_at":"2026-01-14T01:23:43.977Z","updated_at":"2026-01-14T01:23:44.740Z","avatar_url":"https://github.com/parvinshi.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Eagle framework\nEagle框架实现了依赖注入容器（Dependency Injection Container）、路由（route）等组件,其它如ORM、cache、validation、filesystem等组件可以使用composer来由用户自由扩展。\n\n# composer安装\ncomposer require parvin/eagle-framework\n\n# php版本要求\nPHP7以上\n\n# Route \nroute可以使用symfony的http foundation组件来处理HTTP消息请求（http messages）。\n```php\n\u003c?php\nrequire 'vendor/autoload.php';\n\nuse Eagle\\Route\\Router;\nuse Symfony\\Component\\HttpFoundation\\Request;\n\n$router = new Router();\n$router-\u003eget('/articles', function () {\n    return 'This is articles list';\n});\n\n$router-\u003eget('/articles/{id:\\d+}', function ($id) {\n    return 'Article id: ' . $id;\n});\n\n/* title 为可选参数 */\n$router-\u003eget('/articles/{id:\\d+}[/{title}]', function ($id, $title) {\n    return 'Article id: ' . $id . ', title: ' . $title;\n});\n\n/*匹配处理路由组*/\n$router-\u003egroup('/articles', function () use ($router) {\n    $router-\u003eget('/list', function() {\n        return 'This is articles list';\n    });\n\n    $router-\u003eget('/detail', function ($id, $title) {\n        return 'Article detail id: ' . $id . ', title: ' . $title;\n    });\n});\n\n$request = new Request();\n$routeHandler = $router-\u003egetRouteHandler();\n$response = $routeHandler-\u003ehandle($request);\necho $response;\n```\n\n# Container\nDependency injection Container基于PSR-11规范实现，包括3种注入实现方式：构造方法注入（Constructor Injection）、setter类方法或属性注入（Setter Injection）、匿名回调函数注入（ Closure callable Injection ）。\n\n## 构造方法注入（Constructor Injection)\n```php\n\u003c?php \ndeclare(strict_types=1);\nnamespace Examples;\nuse Eagle\\DI\\Container;\n\n/**\n* 构造方法注入（Constructor Injection)\n*/\nclass Foo\n{\n    /**\n     * @var \\Examples\\Bar\n     */\n    public $bar;\n\n    /**\n     * Foo constructor.\n     * @param \\Examples\\Bar $bar\n     */\n    public function __construct(Bar $bar)\n    {\n        $this-\u003ebar = $bar;\n    }\n}\n\n/*class Bar {\n\n}*/\n\nclass Bar {\n    public $baz;\n\n    public function __construct(Baz $baz)\n    {\n        $this-\u003ebaz = $baz;\n    }\n}\n\nclass Baz {\n\n}\n\n$container = new Container;\n$container-\u003eset(Foo::class)-\u003eaddArguments(Bar::class);\n$container-\u003eset(Bar::class)-\u003eaddArguments(Baz::class);\n\n$foo = $container-\u003eget(Foo::class);\n\nvar_dump($foo, $foo-\u003ebar);\nvar_dump($foo instanceof Foo);  // true\nvar_dump($foo-\u003ebar instanceof Bar); // true\nvar_dump($foo-\u003ebar-\u003ebaz instanceof Baz); // true\n```\n\n## 类方法注入（ Setter Injection ）\n```php\n\u003c?php\ndeclare(strict_types=1);\n\nnamespace Examples;\n\nrequire 'vendor/autoload.php';\n\nuse Eagle\\DI\\Container;\nclass Controller\n{\n    public $model;\n\n    public function __construct(Model $model)\n    {\n        $this-\u003emodel = $model;\n    }\n}\n\nclass Model\n{\n    public $pdo;\n\n    public function setPdo(\\PDO $pdo)\n    {\n        $this-\u003epdo = $pdo;\n    }\n}\n\n$container = new Container;\n\n$container-\u003eset(Controller::class)-\u003eaddArguments(Model::class);\n$container-\u003eset(Model::class)-\u003eaddInvokeMethod('setPdo', [\\PDO::class]);\n\n$container-\u003eset(\\PDO::class)\n    -\u003eaddArguments(['mysql:dbname=test;host=localhost', 'root', '111111']);\n\n$controller = $container-\u003eget(Controller::class);\n\nvar_dump($controller instanceof Controller);       // true\nvar_dump($controller-\u003emodel instanceof Model);     // true\nvar_dump($controller-\u003emodel-\u003epdo instanceof \\PDO); // true\n```\n\n## 匿名函数注入（ Closure callable Injection ）\n```php\n\u003c?php\ndeclare(strict_types=1);\n\nnamespace Examples;\n\nrequire 'vendor/autoload.php';\n\nuse Eagle\\DI\\Container;\nclass Controller\n{\n    public $model;\n\n    public function __construct(Model $model)\n    {\n        $this-\u003emodel = $model;\n    }\n}\n\nclass Model\n{\n    public $pdo;\n\n    public function setPdo(\\PDO $pdo)\n    {\n        $this-\u003epdo = $pdo;\n    }\n}\n\n$container = new Container;\n\n$container-\u003eset(Controller::class, function () {\n\n    $pdo   = new \\PDO('mysql:dbname=test;host=localhost', 'root', '111111');\n    $model = new Model;\n\n    $model-\u003esetPdo($pdo);\n\n    return new Controller($model);\n});\n\n$controller = $container-\u003eget(Controller::class);\n\nvar_dump($controller instanceof Controller); // true\nvar_dump($controller-\u003emodel instanceof Model); // true\nvar_dump($controller-\u003emodel-\u003epdo instanceof \\PDO); // true\n```\n\n## 自动装配（auto wiring）\n```php\n\u003c?php\ndeclare(strict_types=1);\n\nnamespace AutoWiring;\n\nrequire 'vendor/autoload.php';\n\nuse Eagle\\DI\\ContainerBuilder;\n\nclass Foo\n{\n    /**\n     * @var \\AutoWiring\\Bar\n     */\n    public $bar;\n\n    /**\n     * @var \\AutoWiring\\Baz\n     */\n    public $baz;\n\n    /**\n     * Construct.\n     *\n     * @param \\AutoWiring\\Bar $bar\n     * @param \\AutoWiring\\Baz $baz\n     */\n    public function __construct(Bar $bar, Baz $baz)\n    {\n        $this-\u003ebar = $bar;\n        $this-\u003ebaz = $baz;\n    }\n}\n\nclass Bar\n{\n    /**\n     * @var \\AutoWiring\\Bam\n     */\n    public $bam;\n\n    /**\n     * Construct.\n     *\n     * @param \\AutoWiring\\Bam $bam\n     */\n    public function __construct(Bam $bam)\n    {\n        $this-\u003ebam = $bam;\n    }\n}\n\nclass Baz\n{\n    // ..\n}\n\nclass Bam\n{\n    // ..\n}\n\n$container = new ContainerBuilder;\n$container = $container-\u003ebuild();\n\n$foo = $container-\u003eget(Foo::class);\n\nvar_dump($foo instanceof Foo);           // true\nvar_dump($foo-\u003ebar instanceof Bar);      // true\nvar_dump($foo-\u003ebaz instanceof Baz);      // true\nvar_dump($foo-\u003ebar-\u003ebam instanceof Bam); // true\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparvinshi%2Feagle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparvinshi%2Feagle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparvinshi%2Feagle/lists"}