{"id":18784697,"url":"https://github.com/carono/codegen","last_synced_at":"2025-04-11T00:31:50.862Z","repository":{"id":62499832,"uuid":"66392041","full_name":"carono/codegen","owner":"carono","description":"Динамическая генерация классов в php","archived":false,"fork":false,"pushed_at":"2022-10-05T09:06:42.000Z","size":11,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T21:13:10.893Z","etag":null,"topics":["codegen","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/carono.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-23T18:20:09.000Z","updated_at":"2024-12-17T12:32:34.000Z","dependencies_parsed_at":"2022-11-02T11:47:17.584Z","dependency_job_id":null,"html_url":"https://github.com/carono/codegen","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carono%2Fcodegen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carono%2Fcodegen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carono%2Fcodegen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carono%2Fcodegen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/carono","download_url":"https://codeload.github.com/carono/codegen/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247867366,"owners_count":21009240,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["codegen","php"],"created_at":"2024-11-07T20:43:49.001Z","updated_at":"2025-04-11T00:31:50.845Z","avatar_url":"https://github.com/carono.png","language":"PHP","readme":"[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/carono/codegen/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/carono/codegen/?branch=master)\n[![Latest Stable Version](https://poser.pugx.org/carono/codegen/v/stable)](https://packagist.org/packages/carono/codegen)\n[![Total Downloads](https://poser.pugx.org/carono/codegen/downloads)](https://packagist.org/packages/carono/codegen)\n[![License](https://poser.pugx.org/carono/codegen/license)](https://packagist.org/packages/carono/codegen)\n\nУстановка\n=========\n`composer require carono/codegen`\n\nКак использовать\n================\nСоздайте класс от `carono\\codegen\\ClassGenerator`\n\n```php\n\u003c?php\n\n\nnamespace carono\\codegen\\tests;\n\n\nuse carono\\codegen\\ClassGenerator;\nuse Nette\\PhpGenerator\\Method;\n\nclass Demo extends ClassGenerator\n{\n    /**\n     * @param Method $method\n     */\n    public function myFunc($method)\n    {\n        $method-\u003eaddParameter('param1');\n        $method-\u003eaddParameter('param2', null);\n        $method-\u003eaddComment('@param mixed $param1');\n        $method-\u003eaddComment('@param mixed|null $param2');\n        $method-\u003eaddComment('@return mixed');\n        $method-\u003esetStatic();\n        $method-\u003eaddBody('return ?;', [$this-\u003eparams['value']]);\n    }\n\n    protected function phpProperties()\n    {\n        return ['id' =\u003e 100, 'name' =\u003e 'myParam'];\n    }\n\n    protected function phpDocComments()\n    {\n        return ['Auto generated class'];\n    }\n\n    protected function formExtends()\n    {\n        return 'ArrayObject';\n    }\n\n    protected function classConstants()\n    {\n        return [\n            'const1' =\u003e 1,\n            'const2' =\u003e 2\n        ];\n    }\n\n    protected function classTraits()\n    {\n        return ['someTrait'];\n    }\n\n    protected function classUses()\n    {\n        return ['some\\Object1', 'baseObject' =\u003e 'some2\\Object1'];\n    }\n\n    protected function classAfterRender()\n    {\n        $property = $this-\u003ephpClass-\u003eaddProperty('afterRenderProperty');\n        $property-\u003esetStatic();\n        $property-\u003esetVisibility('private');\n        $property-\u003eaddComment('Event after render');\n\n        $method = $this-\u003ephpClass-\u003eaddMethod('dynamicMethod' . $this-\u003eparams['value']);\n        $method-\u003esetStatic();\n        $method-\u003eaddBody('return ?;', [$this-\u003eparams['value'] * 2]);\n    }\n\n    protected function formOutputPath()\n    {\n        return __DIR__ . DIRECTORY_SEPARATOR . 'output' . DIRECTORY_SEPARATOR . 'MyClassDemo.php';\n    }\n\n    protected function formClassNamespace()\n    {\n        return 'carono\\codegen\\tests\\Demo';\n    }\n\n    protected function formClassName()\n    {\n        return 'MyClassDemo';\n    }\n}\n```\nСоздайте экземпляр своего генератора и произведите рендер\n\n```php\n\u003c?php\nrequire_once '../vendor/autoload.php';\n\nrequire_once 'Demo.php';\n$demo = new \\carono\\codegen\\tests\\Demo();\n$content = $demo-\u003erender(['value' =\u003e 500]);\nfile_put_contents($demo-\u003eoutput, $content);\n```\n\nИтоговый файл\n```php\n\u003c?php\n\n/**\n * This class is generated using the package carono/codegen\n */\n\nnamespace carono\\codegen\\tests\\Demo;\n\nuse some2\\Object1 as baseObject;\nuse some\\Object1;\n\n/**\n * Auto generated class\n */\nclass MyClassDemo extends \\ArrayObject\n{\n\tuse \\someTrait;\n\n\tconst const1 = 1;\n\tconst const2 = 2;\n\n\tpublic $id = 100;\n\n\tpublic $name = 'myParam';\n\n\t/** Event after render */\n\tprivate static $afterRenderProperty;\n\n\n\t/**\n\t * @param mixed $param1\n\t * @param mixed|null $param2\n\t * @return mixed\n\t */\n\tpublic static function myFunc($param1, $param2 = null)\n\t{\n\t\treturn 500;\n\t}\n\n\n\tpublic static function dynamicMethod500()\n\t{\n\t\treturn 1000;\n\t}\n}\n```\n\nВсе публичные методы в вашем генераторе, будут формировать аналогичные методы в итоговом классе. Приватные и защищенные методы игнорируются.\n\nБолее подробная информация по генератору можно найти на сайте источника https://packagist.org/packages/nette/php-generator\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarono%2Fcodegen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarono%2Fcodegen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarono%2Fcodegen/lists"}