From 0b9a43afcfb00da837e8b3623d234113c13f68d6 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Mon, 14 Nov 2022 16:11:24 +0300 Subject: [PATCH 01/29] Add support `yiisoft/router` version `^2.0` (#59) --- README.md | 4 ++-- composer.json | 5 +++-- tests/TestCase.php | 6 +++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index bcd2152d..76d7b231 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,8 @@ Installation The preferred way to install this extension is through [composer](http://getcomposer.org/download/). -``` -composer require --prefer-dist yiisoft/yii-gii +```shell +composer require yiisoft/yii-gii ``` Usage diff --git a/composer.json b/composer.json index 646e9707..839ef057 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ "yiisoft/injector": "^1.1", "yiisoft/json": "^1.0", "yiisoft/request-model": "dev-master", - "yiisoft/router": "^1.2", + "yiisoft/router": "^1.2|^2.0", "yiisoft/strings": "^2.1", "yiisoft/validator": "^3.0@dev", "yiisoft/yii-console": "^1.3", @@ -43,10 +43,11 @@ "spatie/phpunit-watcher": "^1.23", "vimeo/psalm": "^4.27", "yiisoft/di": "^1.1", + "yiisoft/dummy-provider": "^1.0", "yiisoft/event-dispatcher": "^1.0", "yiisoft/files": "^2.0", "yiisoft/log": "^2.0", - "yiisoft/router-fastroute": "^1.0" + "yiisoft/translator": "^2.0" }, "autoload": { "psr-4": { diff --git a/tests/TestCase.php b/tests/TestCase.php index c1b90d9f..1b0f8e0f 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -64,9 +64,9 @@ protected function setUp(): void TranslatorInterface::class => [ 'class' => Translator::class, '__construct()' => [ - 'en', - 'en', - Reference::to(EventDispatcherInterface::class), + 'locale' => 'en', + 'fallbackLocale' => 'en', + 'eventDispatcher' => Reference::to(EventDispatcherInterface::class), ], ], RuleHandlerResolverInterface::class => RuleHandlerContainer::class, From 41c9753de6e0bd1ddd18d3f546cba2020369da50 Mon Sep 17 00:00:00 2001 From: Dmitriy Derepko Date: Sun, 4 Dec 2022 15:49:38 +0300 Subject: [PATCH 02/29] Enhance cors middleware (#60) --- src/Middleware/Cors.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Middleware/Cors.php b/src/Middleware/Cors.php index 65577b39..437727f1 100644 --- a/src/Middleware/Cors.php +++ b/src/Middleware/Cors.php @@ -23,8 +23,9 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface ->withHeader(Header::ALLOW, '*') ->withHeader(Header::VARY, 'Origin') ->withHeader(Header::ACCESS_CONTROL_ALLOW_ORIGIN, '*') - ->withHeader(Header::ACCESS_CONTROL_ALLOW_METHODS, 'GET,OPTIONS,HEAD') + ->withHeader(Header::ACCESS_CONTROL_ALLOW_METHODS, 'GET,OPTIONS,HEAD,POST,PUT,PATCH,DELETE') ->withHeader(Header::ACCESS_CONTROL_ALLOW_HEADERS, '*') - ->withHeader(Header::ACCESS_CONTROL_ALLOW_CREDENTIALS, 'true'); + ->withHeader(Header::ACCESS_CONTROL_ALLOW_CREDENTIALS, 'true') + ->withHeader(Header::ACCESS_CONTROL_MAX_AGE, '86400'); } } From 5bb75f22e1a450a92da81788be27affe0806fc25 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Mon, 12 Dec 2022 09:48:52 +0300 Subject: [PATCH 03/29] Adapt to last changes in validator (#64) --- src/Controller/DefaultController.php | 2 +- tests/TestCase.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Controller/DefaultController.php b/src/Controller/DefaultController.php index 44bfec2a..119f4466 100644 --- a/src/Controller/DefaultController.php +++ b/src/Controller/DefaultController.php @@ -11,7 +11,7 @@ use Yiisoft\DataResponse\DataResponseFactoryInterface; use Yiisoft\Http\Status; use Yiisoft\RequestModel\Attribute\Query; -use Yiisoft\Validator\RulesDumper; +use Yiisoft\Validator\Helper\RulesDumper; use Yiisoft\Validator\RulesProvider\AttributesRulesProvider; use Yiisoft\Yii\Gii\Component\CodeFile\CodeFile; use Yiisoft\Yii\Gii\Component\CodeFile\CodeFileWriteOperationEnum; diff --git a/tests/TestCase.php b/tests/TestCase.php index 1b0f8e0f..b6470b2c 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -18,7 +18,7 @@ use Yiisoft\Files\FileHelper; use Yiisoft\Translator\Translator; use Yiisoft\Translator\TranslatorInterface; -use Yiisoft\Validator\RuleHandlerContainer; +use Yiisoft\Validator\RuleHandlerResolver\RuleHandlerContainer; use Yiisoft\Validator\RuleHandlerResolverInterface; use Yiisoft\Validator\Validator; use Yiisoft\Validator\ValidatorInterface; From 592850e7fd8cebab5a9a141b262ffeefe812d8a2 Mon Sep 17 00:00:00 2001 From: Ihor Sychevskyi Date: Sat, 17 Dec 2022 09:20:57 +0200 Subject: [PATCH 04/29] update links (http=>https) (#67) --- .github/CODE_OF_CONDUCT.md | 6 +++--- README.md | 4 ++-- docs/guide-ja/basic-usage.md | 4 ++-- docs/guide-ja/installation.md | 2 +- docs/guide-pt-BR/basic-usage.md | 4 ++-- docs/guide-pt-BR/installation.md | 2 +- docs/guide-ru/basic-usage.md | 2 +- docs/guide-ru/installation.md | 2 +- docs/guide-uk/basic-usage.md | 4 ++-- docs/guide-uk/installation.md | 2 +- docs/guide-zh-CN/basic-usage.md | 4 ++-- docs/guide-zh-CN/installation.md | 2 +- docs/guide/basic-usage.md | 4 ++-- docs/guide/installation.md | 2 +- 14 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index 803e0007..eb64a881 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -61,7 +61,7 @@ the project's leadership. This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4.0, available at -[http://contributor-covenant.org/version/1/4/][version] +[https://contributor-covenant.org/version/1/4/][version] -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ +[homepage]: https://contributor-covenant.org +[version]: https://contributor-covenant.org/version/1/4/ diff --git a/README.md b/README.md index 76d7b231..d0b79e5d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@

-This extension provides a Web-based code generator, called Gii, for [Yii framework](http://www.yiiframework.com) applications. +This extension provides a Web-based code generator, called Gii, for [Yii framework](https://www.yiiframework.com) applications. You can use Gii to quickly generate models, forms, modules, CRUD, etc. For license information check the [LICENSE](LICENSE.md)-file. @@ -25,7 +25,7 @@ Documentation is at [docs/guide/README.md](docs/guide/README.md). Installation ------------ -The preferred way to install this extension is through [composer](http://getcomposer.org/download/). +The preferred way to install this extension is through [composer](https://getcomposer.org/download/). ```shell composer require yiisoft/yii-gii diff --git a/docs/guide-ja/basic-usage.md b/docs/guide-ja/basic-usage.md index 6b8f7460..67ec115c 100644 --- a/docs/guide-ja/basic-usage.md +++ b/docs/guide-ja/basic-usage.md @@ -25,8 +25,8 @@ Gii にアクセスすると、最初に、ジェネレータを選択できる その場合は、どのファイルを上書きし、どのファイルを上書きしないかを選択することも出来ます。 > Tip: データベースに変更を加えた後で、モデル・ジェネレータを使ってモデルを更新したい場合は、Gii のプレビューからコードをコピーして、あなたのコードに変更をマージすることが出来ます。 -PHPStorm の [クリップボードと比較](http://www.jetbrains.com/phpstorm/webhelp/comparing-files.html) のような IDE の機能を使うと良いでしょう。 -[Aptana Studio](http://www.aptana.com/products/studio3/download) や [Eclipse](http://www.eclipse.org/pdt/) ベースのエディタも [AnyEdit tools plugin](http://andrei.gmxhome.de/anyedit/) を使って [クリップボードと比較](http://andrei.gmxhome.de/anyedit/examples.html) をすることが出来ます。 +PHPStorm の [クリップボードと比較](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html) のような IDE の機能を使うと良いでしょう。 +[Aptana Studio](http://www.aptana.com/products/studio3/download) や [Eclipse](https://www.eclipse.org/pdt/) ベースのエディタも [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/) を使って [クリップボードと比較](https://andrei.gmxhome.de/anyedit/examples.html) をすることが出来ます。 この機能を使うと、関係のある変更だけを取り込んで、あなた自身のコードを取り消すような他の変更は放っておくことが出来ます。 コードをレビューして、生成すべきファイルを選択し、"Generate" ボタンをクリックするとファイルが生成されます。 diff --git a/docs/guide-ja/installation.md b/docs/guide-ja/installation.md index 9bb2c508..70830778 100644 --- a/docs/guide-ja/installation.md +++ b/docs/guide-ja/installation.md @@ -3,7 +3,7 @@ ## Composer パッケージを取得する -このエクステンションをインストールするのに推奨される方法は [composer](http://getcomposer.org/download/) によるものです。 +このエクステンションをインストールするのに推奨される方法は [composer](https://getcomposer.org/download/) によるものです。 下記のコマンドを実行してください。 diff --git a/docs/guide-pt-BR/basic-usage.md b/docs/guide-pt-BR/basic-usage.md index 07e46d9c..854b26ec 100644 --- a/docs/guide-pt-BR/basic-usage.md +++ b/docs/guide-pt-BR/basic-usage.md @@ -30,7 +30,7 @@ e o que vai ser gerado. Neste caso, você também pode escolher quais arquivos d > Dica: Ao utilizar o Modelo Generator para atualizar modelos após a mudança de banco de dados, você pode copiar o código da pré-visualização do Gii e mesclar as alterações com o seu próprio código. Você pode usar recursos de uma IDE como PHPStorms. - [compare with clipboard](http://www.jetbrains.com/phpstorm/webhelp/comparing-files.html), [Aptana Studio](http://www.aptana.com/products/studio3/download) ou [Eclipse](http://www.eclipse.org/pdt/) based também permitem [compare with clipboard](http://andrei.gmxhome.de/anyedit/examples.html) por usar [AnyEdit tools plugin](http://andrei.gmxhome.de/anyedit/) para isso, que lhe permite unir as mudanças relevantes e deixar de fora outros que podem reverter o seu próprio código. + [compare with clipboard](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html), [Aptana Studio](http://www.aptana.com/products/studio3/download) ou [Eclipse](https://www.eclipse.org/pdt/) based também permitem [compare with clipboard](https://andrei.gmxhome.de/anyedit/examples.html) por usar [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/) para isso, que lhe permite unir as mudanças relevantes e deixar de fora outros que podem reverter o seu próprio código. Depois de revisar o código e selecionar os arquivos a serem gerados você pode clicar no botão "Gerar" para criar os arquivos. Se tudo correu bem está pronto. Quando você vê erros que Gii não é capaz de gerar os arquivos e que você tem que @@ -40,4 +40,4 @@ ajustar as permissões do diretório do seu servidor web permitindo ser capaz de para você criar novas coisas mais rapidamente mas não é algo que cria código pronto para uso. Muitas vezes vemos pessoas que utilizam os modelos gerados pelo GII, sem alteração e basta apenas estendê-los para ajustar algumas partes dele. Esta não é a forma para ele ser usado. Código gerado pelo GII é incompleto, ou incorreto, de deve ser alterado para atender às suas necessidades de que que você possa usa-lo realmente. - \ No newline at end of file + diff --git a/docs/guide-pt-BR/installation.md b/docs/guide-pt-BR/installation.md index c043815b..c899e748 100644 --- a/docs/guide-pt-BR/installation.md +++ b/docs/guide-pt-BR/installation.md @@ -3,7 +3,7 @@ Instalação ## Instalado o pocote composer -A maneira preferida para instalar essa extensão é via [composer](http://getcomposer.org/download/). +A maneira preferida para instalar essa extensão é via [composer](https://getcomposer.org/download/). Então rode diff --git a/docs/guide-ru/basic-usage.md b/docs/guide-ru/basic-usage.md index 82a16b8c..f70c7f8f 100644 --- a/docs/guide-ru/basic-usage.md +++ b/docs/guide-ru/basic-usage.md @@ -28,7 +28,7 @@ В этом случае, выбор остается за Вами - какие файлы оставить как есть, а какие перезаписать. > Tip: При использовании Model-генератора для обновления моделей после изменений в БД, просто скопируйте код из превью и - встройте его в свой код. Вы можете использовать возможности разных IDE: [сравнение с буфером обмена](http://www.jetbrains.com/phpstorm/webhelp/comparing-files.html) в PHPStorm, [Aptana Studio](http://www.aptana.com/products/studio3/download). В редакторах, основанных на [Eclipse](http://www.eclipse.org/pdt/) можно [сравнивать код с буфером обмена](http://andrei.gmxhome.de/anyedit/examples.html), используя для этого [AnyEdit tools plugin](http://andrei.gmxhome.de/anyedit/). Всё это позволит вам объединить только нужные изменения и пропустить изменения, которые заменят уже существующий полезный код. + встройте его в свой код. Вы можете использовать возможности разных IDE: [сравнение с буфером обмена](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html) в PHPStorm, [Aptana Studio](http://www.aptana.com/products/studio3/download). В редакторах, основанных на [Eclipse](https://www.eclipse.org/pdt/) можно [сравнивать код с буфером обмена](https://andrei.gmxhome.de/anyedit/examples.html), используя для этого [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/). Всё это позволит вам объединить только нужные изменения и пропустить изменения, которые заменят уже существующий полезный код. После просмотра кода и выбора файлов для генерирования кликните на кнопке "Generate" чтобы создать файлы. Если нет ошибок - на этом всё! Если появятся ошибки, значит Gii не смог сгенерировать файлы и Вам нужно установить права на запись для директорий, чтобы веб-сервер мог diff --git a/docs/guide-ru/installation.md b/docs/guide-ru/installation.md index dd784075..14bc9e88 100644 --- a/docs/guide-ru/installation.md +++ b/docs/guide-ru/installation.md @@ -3,7 +3,7 @@ ## Установка composer-пакета -Предпочтительнее установить это расширение через [composer](http://getcomposer.org/download/). +Предпочтительнее установить это расширение через [composer](https://getcomposer.org/download/). Либо запустите diff --git a/docs/guide-uk/basic-usage.md b/docs/guide-uk/basic-usage.md index 41854d0f..e0313f25 100644 --- a/docs/guide-uk/basic-usage.md +++ b/docs/guide-uk/basic-usage.md @@ -30,8 +30,8 @@ > Підказка: Коли використовуєте генератор моделі для оновлення моделей після змін у базі даних, ви можете скопіювати код із попереднього перегляду Gii та поєднати зміни з вашим власним кодом. Ви можете використовувати функціонал Інтегрованого Середовища Розробки (IDE), як наприклад, - [порівняння з буфером обміну в PHPStorms](http://www.jetbrains.com/phpstorm/webhelp/comparing-files.html). - [Aptana Studio](http://www.aptana.com/products/studio3/download) або редактори на базі [Eclipse](http://www.eclipse.org/pdt/) також дозволяють [порівняння з буфером обміну](http://andrei.gmxhome.de/anyedit/examples.html) при використанні [плагіну інструментів AnyEdit](http://andrei.gmxhome.de/anyedit/) для цього, який дозволяє вам приєднувати актуальні зміни, не враховуючи те, що повторює ваш власний код. + [порівняння з буфером обміну в PHPStorms](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html). + [Aptana Studio](http://www.aptana.com/products/studio3/download) або редактори на базі [Eclipse](https://www.eclipse.org/pdt/) також дозволяють [порівняння з буфером обміну](https://andrei.gmxhome.de/anyedit/examples.html) при використанні [плагіну інструментів AnyEdit](https://andrei.gmxhome.de/anyedit/) для цього, який дозволяє вам приєднувати актуальні зміни, не враховуючи те, що повторює ваш власний код. Після того, як ви оглянули код та обрали файли для генерування, ви можете натиснути на кнопку "Generate" для створення diff --git a/docs/guide-uk/installation.md b/docs/guide-uk/installation.md index 39245078..e751e63e 100644 --- a/docs/guide-uk/installation.md +++ b/docs/guide-uk/installation.md @@ -3,7 +3,7 @@ ## Встановлення через Composer -Рекомендується встановлювати це розширення за допомогою [Composer](http://getcomposer.org/download/). +Рекомендується встановлювати це розширення за допомогою [Composer](https://getcomposer.org/download/). Виконайте diff --git a/docs/guide-zh-CN/basic-usage.md b/docs/guide-zh-CN/basic-usage.md index 5cf8ba22..0fbbed10 100644 --- a/docs/guide-zh-CN/basic-usage.md +++ b/docs/guide-zh-CN/basic-usage.md @@ -21,9 +21,9 @@ 单击文件名可以查看将为该文件生成的代码的预览。 当文件已经存在时,Gii 还提供了一个 diff 视图,它显示了存在的代码和将要生成的代码之间的区别。 在这种情况下,还可以选择应覆盖哪些文件,哪些不覆盖。 -> 提示:在使用模型生成器在数据库更改后更新模型时,可以从 Gii 预览复制代码,并将更改与您自己的代码合并。可以使用IDE功能,如 PHPStorms [compare with clipboard(与剪贴板比较)](http://www.jetbrains.com/phpstorm/webhelp/comparing-files.html),[Aptana Studio](http://www.aptana.com/products/studio3/download) 或者使用 [Eclipse](http://www.eclipse.org/pdt/) 通过 [AnyEdit tools plugin](http://andrei.gmxhome.de/anyedit/) 也允许 [compare with clipboard(与剪贴板比较)](http://andrei.gmxhome.de/anyedit/examples.html),这样可以合并相关的更改,并省略其他可能被自己还原的代码。 +> 提示:在使用模型生成器在数据库更改后更新模型时,可以从 Gii 预览复制代码,并将更改与您自己的代码合并。可以使用IDE功能,如 PHPStorms [compare with clipboard(与剪贴板比较)](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html),[Aptana Studio](http://www.aptana.com/products/studio3/download) 或者使用 [Eclipse](https://www.eclipse.org/pdt/) 通过 [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/) 也允许 [compare with clipboard(与剪贴板比较)](https://andrei.gmxhome.de/anyedit/examples.html),这样可以合并相关的更改,并省略其他可能被自己还原的代码。 在检查代码并选择要生成的文件后,可以单击 "Generate" 按钮创建文件即可。 如果看到Gii无法生成文件的错误时,则需调整目录权限,以便的Web服务器能够写入目录并创建文件。 > 注意:Gii 生成的代码只是一个根据自己的需要进行调整的模板。 它可以帮助你快速创建新的代码,但它不是创建准备使用于正式项目的代码。我们经常看到人们使用 Gii 生成的 model 没有改变,只是通过扩展它们从而调整部分 model 的功能。 这不是我们编写它的初衷。 Gii 生成的代码可能不完整或不正确,必须根据自己的需要进行更改才能使用它。 - \ No newline at end of file + diff --git a/docs/guide-zh-CN/installation.md b/docs/guide-zh-CN/installation.md index ef1a738b..cd411adc 100644 --- a/docs/guide-zh-CN/installation.md +++ b/docs/guide-zh-CN/installation.md @@ -3,7 +3,7 @@ ## 获取 Composer 包 -安装此扩展的首选方法是通过 [composer](http://getcomposer.org/download/). +安装此扩展的首选方法是通过 [composer](https://getcomposer.org/download/). 执行 diff --git a/docs/guide/basic-usage.md b/docs/guide/basic-usage.md index 5c9160e2..5d8a5a23 100644 --- a/docs/guide/basic-usage.md +++ b/docs/guide/basic-usage.md @@ -30,7 +30,7 @@ and the one that will be generated. In this case you can also choose which files > Tip: When using the Model Generator to update models after database change, you can copy the code from Gii preview and merge the changes with your own code. You can use IDE features like PHPStorms - [compare with clipboard](http://www.jetbrains.com/phpstorm/webhelp/comparing-files.html), [Aptana Studio](http://www.aptana.com/products/studio3/download) or [Eclipse](http://www.eclipse.org/pdt/) based editor also allows [compare with clipboard](http://andrei.gmxhome.de/anyedit/examples.html) by using [AnyEdit tools plugin](http://andrei.gmxhome.de/anyedit/) for this, which allows you to merge in relevant changes and leave out others that may revert your own code. + [compare with clipboard](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html), [Aptana Studio](http://www.aptana.com/products/studio3/download) or [Eclipse](https://www.eclipse.org/pdt/) based editor also allows [compare with clipboard](https://andrei.gmxhome.de/anyedit/examples.html) by using [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/) for this, which allows you to merge in relevant changes and leave out others that may revert your own code. After you have reviewed the code and selected the files to be generated you can click the "Generate" button to create @@ -42,4 +42,4 @@ adjust directory permissions so that your webserver is able to write to the dire We often see people using the models generated by Gii without change and just extend them to adjust some parts of it. This is not how it is meant to be used. Code generated by Gii may be incomplete or incorrect and has to be changed to fit your needs before you can use it. - \ No newline at end of file + diff --git a/docs/guide/installation.md b/docs/guide/installation.md index dd4590f1..96e18863 100644 --- a/docs/guide/installation.md +++ b/docs/guide/installation.md @@ -3,7 +3,7 @@ Installation ## Getting Composer package -The preferred way to install this extension is through [composer](http://getcomposer.org/download/). +The preferred way to install this extension is through [composer](https://getcomposer.org/download/). Either run From 87dcd4335da90e80e13c653b6f46f2ff052f89d4 Mon Sep 17 00:00:00 2001 From: Dmitriy Derepko Date: Fri, 23 Dec 2022 19:51:06 +0300 Subject: [PATCH 05/29] Adjust validator changes (#70) * Adjust validator changes * Adjust validator changes * Apply fixes from StyleCI * Adjust validator changes * Fix psalm Co-authored-by: StyleCI Bot --- src/Command/BaseGenerateCommand.php | 13 +++++++++++-- src/Validator/ClassExistsRule.php | 3 ++- src/Validator/NewClassRule.php | 3 ++- src/Validator/ReservedKeywordRule.php | 3 ++- src/Validator/TemplateRule.php | 3 ++- src/Validator/TemplateRuleHandler.php | 14 ++++++++------ 6 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/Command/BaseGenerateCommand.php b/src/Command/BaseGenerateCommand.php index 2a624b4d..c0648b9c 100644 --- a/src/Command/BaseGenerateCommand.php +++ b/src/Command/BaseGenerateCommand.php @@ -5,6 +5,7 @@ namespace Yiisoft\Yii\Gii\Command; use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\QuestionHelper; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -169,7 +170,11 @@ abstract protected function createGeneratorCommand(InputInterface $input): Gener protected function confirm(InputInterface $input, OutputInterface $output) { $question = new ConfirmationQuestion("\nReady to generate the selected files? (yes|no) [yes]:", true); - return $this->getHelper('question')->ask($input, $output, $question); + /** + * @var QuestionHelper $helper + */ + $helper = $this->getHelper('question'); + return $helper->ask($input, $output, $question); } /** @@ -186,7 +191,11 @@ protected function choice(InputInterface $input, OutputInterface $output) 'na' => 'Skip this and the rest of the changed files.', ] ); - return $this->getHelper('question')->ask($input, $output, $question); + /** + * @var QuestionHelper $helper + */ + $helper = $this->getHelper('question'); + return $helper->ask($input, $output, $question); } private function areAllFilesSkipped(array $answers): bool diff --git a/src/Validator/ClassExistsRule.php b/src/Validator/ClassExistsRule.php index ef761cf8..4528ffd8 100644 --- a/src/Validator/ClassExistsRule.php +++ b/src/Validator/ClassExistsRule.php @@ -5,6 +5,7 @@ namespace Yiisoft\Yii\Gii\Validator; use Attribute; +use Yiisoft\Validator\RuleHandlerInterface; use Yiisoft\Validator\RuleInterface; #[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)] @@ -15,7 +16,7 @@ public function getName(): string return 'gii_class_exists'; } - public function getHandlerClassName(): string + public function getHandler(): string|RuleHandlerInterface { return ClassExistsHandler::class; } diff --git a/src/Validator/NewClassRule.php b/src/Validator/NewClassRule.php index 625af8e2..cda0b4a7 100644 --- a/src/Validator/NewClassRule.php +++ b/src/Validator/NewClassRule.php @@ -5,6 +5,7 @@ namespace Yiisoft\Yii\Gii\Validator; use Attribute; +use Yiisoft\Validator\RuleHandlerInterface; use Yiisoft\Validator\RuleInterface; #[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)] @@ -15,7 +16,7 @@ public function getName(): string return 'gii_new_class'; } - public function getHandlerClassName(): string + public function getHandler(): string|RuleHandlerInterface { return NewClassHandler::class; } diff --git a/src/Validator/ReservedKeywordRule.php b/src/Validator/ReservedKeywordRule.php index dc443c60..3f92c664 100644 --- a/src/Validator/ReservedKeywordRule.php +++ b/src/Validator/ReservedKeywordRule.php @@ -5,6 +5,7 @@ namespace Yiisoft\Yii\Gii\Validator; use Attribute; +use Yiisoft\Validator\RuleHandlerInterface; use Yiisoft\Validator\RuleInterface; #[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)] @@ -15,7 +16,7 @@ public function getName(): string return 'gii_reserved_keyword'; } - public function getHandlerClassName(): string + public function getHandler(): string|RuleHandlerInterface { return ReservedKeywordHandler::class; } diff --git a/src/Validator/TemplateRule.php b/src/Validator/TemplateRule.php index b785493d..06e73c03 100644 --- a/src/Validator/TemplateRule.php +++ b/src/Validator/TemplateRule.php @@ -5,6 +5,7 @@ namespace Yiisoft\Yii\Gii\Validator; use Attribute; +use Yiisoft\Validator\RuleHandlerInterface; use Yiisoft\Validator\RuleInterface; #[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)] @@ -15,7 +16,7 @@ public function getName(): string return 'gii_template_rule'; } - public function getHandlerClassName(): string + public function getHandler(): string|RuleHandlerInterface { return TemplateRuleHandler::class; } diff --git a/src/Validator/TemplateRuleHandler.php b/src/Validator/TemplateRuleHandler.php index 791f1600..d1d3bda9 100644 --- a/src/Validator/TemplateRuleHandler.php +++ b/src/Validator/TemplateRuleHandler.php @@ -6,7 +6,6 @@ use RuntimeException; use Yiisoft\Aliases\Aliases; -use Yiisoft\Validator\DataSet\ObjectDataSet; use Yiisoft\Validator\Exception\UnexpectedRuleException; use Yiisoft\Validator\Result; use Yiisoft\Validator\RuleHandlerInterface; @@ -40,9 +39,12 @@ public function validate(mixed $value, object $rule, ValidationContext $context) if ($value === 'default') { return $result; } - $command = $context->getDataSet(); - if (!$command instanceof ObjectDataSet || !$command->getObject() instanceof GeneratorCommandInterface) { - throw new RuntimeException('Unsupported dataset class.'); + $command = $context->getRawData(); + if (!$command instanceof GeneratorCommandInterface) { + throw new RuntimeException(sprintf( + 'Unsupported dataset class "%s".', + get_debug_type($command) + )); } $generator = $this->getGenerator($command); $templates = $this->parametersProvider->getTemplates($generator::getId()); @@ -74,10 +76,10 @@ public function validate(mixed $value, object $rule, ValidationContext $context) return $result; } - private function getGenerator(ObjectDataSet $dataSet): GeneratorInterface + private function getGenerator(GeneratorCommandInterface $dataSet): GeneratorInterface { foreach ($this->gii->getGenerators() as $generator) { - if ($generator::getCommandClass() === $dataSet->getObject()::class) { + if ($generator::getCommandClass() === $dataSet::class) { return $generator; } } From b93c6b190b262f619decdbf65a94c87b965e8506 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Tue, 17 Jan 2023 02:40:02 +0400 Subject: [PATCH 06/29] Allow yiisoft/arrays ^3.0 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 839ef057..4e19a274 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "php": "^8.1", "phpspec/php-diff": "^1.1.3", "yiisoft/aliases": "^2.0", - "yiisoft/arrays": "^2.1", + "yiisoft/arrays": "^2.1|^3.0", "yiisoft/data-response": "^1.0", "yiisoft/http": "^1.2", "yiisoft/injector": "^1.1", From 7a2989935de59fa92ec04ec31d5272334438d6b7 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Sun, 19 Feb 2023 13:03:36 +0300 Subject: [PATCH 07/29] Adapt configuration group names to Yii conventions (#82) --- composer.json | 6 +----- config/console.php | 6 ------ config/{common.php => di.php} | 0 3 files changed, 1 insertion(+), 11 deletions(-) delete mode 100644 config/console.php rename config/{common.php => di.php} (100%) diff --git a/composer.json b/composer.json index 4e19a274..80c8df6f 100644 --- a/composer.json +++ b/composer.json @@ -68,11 +68,7 @@ }, "config-plugin": { "params": "params.php", - "console": [ - "$common", - "console.php" - ], - "common": "common.php", + "di": "di.php", "routes": "routes.php" } }, diff --git a/config/console.php b/config/console.php deleted file mode 100644 index 1f6a841d..00000000 --- a/config/console.php +++ /dev/null @@ -1,6 +0,0 @@ - Date: Sun, 19 Feb 2023 17:12:18 +0300 Subject: [PATCH 08/29] Update Yii dependencies (#85) --- composer.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index 80c8df6f..22c58b3f 100644 --- a/composer.json +++ b/composer.json @@ -21,17 +21,17 @@ "require": { "php": "^8.1", "phpspec/php-diff": "^1.1.3", - "yiisoft/aliases": "^2.0", + "yiisoft/aliases": "^3.0", "yiisoft/arrays": "^2.1|^3.0", - "yiisoft/data-response": "^1.0", + "yiisoft/data-response": "^2.0", "yiisoft/http": "^1.2", "yiisoft/injector": "^1.1", "yiisoft/json": "^1.0", "yiisoft/request-model": "dev-master", - "yiisoft/router": "^1.2|^2.0", + "yiisoft/router": "^3.0", "yiisoft/strings": "^2.1", "yiisoft/validator": "^3.0@dev", - "yiisoft/yii-console": "^1.3", + "yiisoft/yii-console": "^2.0", "yiisoft/yii-middleware": "dev-master" }, "require-dev": { @@ -47,7 +47,7 @@ "yiisoft/event-dispatcher": "^1.0", "yiisoft/files": "^2.0", "yiisoft/log": "^2.0", - "yiisoft/translator": "^2.0" + "yiisoft/translator": "^3.0" }, "autoload": { "psr-4": { From d9d40e9f69dd6680866418d325895bd86ef39d85 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Fri, 24 Feb 2023 10:24:15 +0300 Subject: [PATCH 09/29] Update contributor code of conduct (#89) --- .github/CODE_OF_CONDUCT.md | 117 ++++++++++++++++++++++++------------- 1 file changed, 76 insertions(+), 41 deletions(-) diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index eb64a881..2400eec3 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -2,66 +2,101 @@ ## Our Pledge -As contributors and maintainers of this project, and in order to keep Yii community open and welcoming, we ask to respect all community members. +As contributors and maintainers of this project, and in order to keep Yii community open and welcoming, we ask to +respect all community members. ## Our Standards -Examples of behavior that contributes to creating a positive environment include: +Examples of behavior that contributes to a positive environment for our community include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or - advances -* Personal attacks -* Trolling or insulting/derogatory comments, and personal or political attacks +* The use of sexualized language or imagery, and sexual attention or advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment -* Publishing other's private information, such as physical or electronic - addresses, without explicit permission -* Other conduct which could reasonably be considered inappropriate in - a professional setting +* Publishing others' private information, such as a physical or email address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting -## Our Responsibilities +## Enforcement Responsibilities -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in response -to any instances of unacceptable behavior. +Core team members are responsible for clarifying and enforcing our standards of acceptable behavior and will take +appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. -Project maintainers have the right and responsibility to remove, edit, or reject comments, -commits, code, wiki edits, issues, and other contributions that are not aligned to this -Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors -that they deem inappropriate, threatening, offensive, or harmful. +Core team members have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, +issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for +moderation decisions when appropriate. ## Scope -This Code of Conduct applies both within project spaces and in public spaces when -an individual is representing the project or its community. Examples of representing -a project or community include posting via an official social media account, -within project GitHub, official forum or acting as an appointed representative at -an online or offline event. +This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing +the community in public spaces. Examples of representing a project or community include using an official e-mail +address, posting via an official social media account, within project GitHub, official forum or acting as an appointed +representative at an online or offline event. ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported -by contacting core team members. All complaints will be reviewed and investigated -and will result in a response that is deemed necessary and appropriate to the circumstances. -The project team is obligated to maintain confidentiality with regard to the reporter of -an incident. Further details of specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting core team members. All +complaints will be reviewed and investigated promptly and fairly. -Project maintainers who do not follow or enforce the Code of Conduct in good faith -may face temporary or permanent repercussions as determined by other members of -the project's leadership. +All core team members are obligated to respect the privacy and security of the reporter of any incident. + +## Enforcement Guidelines + +Core team members will follow these Community Impact Guidelines in determining the consequences for any action they +deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in +the community. + +**Consequence**: A private, written warning from core team members, providing clarity around the nature of the violation +and an explanation of why the behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of actions. + +**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including +unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding +interactions in community spaces as well as external channels like social media. Violating these terms may lead to +a temporary or permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified +period of time. No public or private interaction with the people involved, including unsolicited interaction with those +enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate +behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 1.4.0, available at -[https://contributor-covenant.org/version/1/4/][version] +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. -[homepage]: https://contributor-covenant.org -[version]: https://contributor-covenant.org/version/1/4/ +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations From 116f234bff078db4b41a86acd524cea391580d7c Mon Sep 17 00:00:00 2001 From: Rustam Mamadaminov Date: Thu, 2 Mar 2023 01:00:41 +0500 Subject: [PATCH 10/29] Use stable validator (#90) --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 22c58b3f..2cfd39f5 100644 --- a/composer.json +++ b/composer.json @@ -30,7 +30,7 @@ "yiisoft/request-model": "dev-master", "yiisoft/router": "^3.0", "yiisoft/strings": "^2.1", - "yiisoft/validator": "^3.0@dev", + "yiisoft/validator": "^1.0", "yiisoft/yii-console": "^2.0", "yiisoft/yii-middleware": "dev-master" }, From 2bcc5b1eeb9e7c97890bf3ee1da9decf6643a440 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Fri, 31 Mar 2023 18:17:34 +0300 Subject: [PATCH 11/29] Update StyleCI config (#95) * Update StyleCI config * Apply fixes from StyleCI --------- Co-authored-by: StyleCI Bot --- .styleci.yml | 17 +++++++---------- tests/templates/custom/controller.php | 2 ++ tests/templates/custom/view.php | 2 ++ 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.styleci.yml b/.styleci.yml index 63e26a59..1ab379b4 100644 --- a/.styleci.yml +++ b/.styleci.yml @@ -1,20 +1,12 @@ preset: psr12 risky: true -version: 8 +version: 8.1 finder: exclude: - docs - vendor - - resources - - views - - public - - templates - not-name: - - UnionCar.php - - TimerUnionTypes.php - - schema1.php enabled: - alpha_ordered_traits @@ -64,7 +56,6 @@ enabled: - phpdoc_order - phpdoc_property - phpdoc_scalar - - phpdoc_separation - phpdoc_singular_inheritdoc - phpdoc_trim - phpdoc_trim_consecutive_blank_line_separation @@ -86,3 +77,9 @@ enabled: - trailing_comma_in_multiline_array - unalign_double_arrow - unalign_equals + - empty_loop_body_braces + - integer_literal_case + - union_type_without_spaces + +disabled: + - function_declaration diff --git a/tests/templates/custom/controller.php b/tests/templates/custom/controller.php index fd7ffd7a..04c044dd 100644 --- a/tests/templates/custom/controller.php +++ b/tests/templates/custom/controller.php @@ -1,3 +1,5 @@ Date: Thu, 25 May 2023 11:28:00 +0600 Subject: [PATCH 12/29] Sync with middleware (#98) --- composer.json | 2 +- config/routes.php | 4 ++-- src/Middleware/Cors.php | 31 ------------------------------- 3 files changed, 3 insertions(+), 34 deletions(-) delete mode 100644 src/Middleware/Cors.php diff --git a/composer.json b/composer.json index 2cfd39f5..146e877f 100644 --- a/composer.json +++ b/composer.json @@ -32,7 +32,7 @@ "yiisoft/strings": "^2.1", "yiisoft/validator": "^1.0", "yiisoft/yii-console": "^2.0", - "yiisoft/yii-middleware": "dev-master" + "yiisoft/yii-middleware": "^1.0" }, "require-dev": { "jetbrains/phpstorm-attributes": "^1.0", diff --git a/config/routes.php b/config/routes.php index 001f6c8d..80d98d63 100644 --- a/config/routes.php +++ b/config/routes.php @@ -12,7 +12,7 @@ use Yiisoft\Router\Route; use Yiisoft\Validator\ValidatorInterface; use Yiisoft\Yii\Gii\Controller\DefaultController; -use Yiisoft\Yii\Gii\Middleware\Cors; +use Yiisoft\Yii\Middleware\CorsAllowAll; use Yiisoft\Yii\Middleware\IpFilter; if (!(bool) ($params['yiisoft/yii-gii']['enabled'] ?? false)) { @@ -21,7 +21,7 @@ return [ Group::create('/gii/api') - ->withCors(Cors::class) + ->withCors(CorsAllowAll::class) ->middleware( static function (ResponseFactoryInterface $responseFactory, ValidatorInterface $validator) use ($params) { return new IpFilter( diff --git a/src/Middleware/Cors.php b/src/Middleware/Cors.php deleted file mode 100644 index 437727f1..00000000 --- a/src/Middleware/Cors.php +++ /dev/null @@ -1,31 +0,0 @@ -handle($request); - - return $response - ->withHeader(Header::ALLOW, '*') - ->withHeader(Header::VARY, 'Origin') - ->withHeader(Header::ACCESS_CONTROL_ALLOW_ORIGIN, '*') - ->withHeader(Header::ACCESS_CONTROL_ALLOW_METHODS, 'GET,OPTIONS,HEAD,POST,PUT,PATCH,DELETE') - ->withHeader(Header::ACCESS_CONTROL_ALLOW_HEADERS, '*') - ->withHeader(Header::ACCESS_CONTROL_ALLOW_CREDENTIALS, 'true') - ->withHeader(Header::ACCESS_CONTROL_MAX_AGE, '86400'); - } -} From 6216ccd82ea0b84793af3282a655e1f7bbd6d1f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jul 2023 16:55:58 +0300 Subject: [PATCH 13/29] Update rector, imporve config it and apply suggestions (#106) --- .github/workflows/rector.yml | 2 + composer.json | 2 +- rector.php | 17 ++++++--- src/Controller/DefaultController.php | 4 +- .../InvalidGeneratorCommandException.php | 2 +- src/Generator/AbstractGenerator.php | 5 +-- .../Controller/ControllerCommand.php | 38 ++++++++----------- src/Request/GeneratorRequest.php | 2 +- src/Validator/NewClassHandler.php | 2 +- src/Validator/TemplateRuleHandler.php | 6 +-- tests/Generators/ControllerGeneratorTest.php | 2 +- 11 files changed, 41 insertions(+), 41 deletions(-) diff --git a/.github/workflows/rector.yml b/.github/workflows/rector.yml index c9030d7e..0bf491f3 100644 --- a/.github/workflows/rector.yml +++ b/.github/workflows/rector.yml @@ -14,6 +14,8 @@ name: rector jobs: rector: uses: yiisoft/actions/.github/workflows/rector.yml@master + secrets: + token: ${{ secrets.YIISOFT_GITHUB_TOKEN }} with: os: >- ['ubuntu-latest'] diff --git a/composer.json b/composer.json index 146e877f..3b849c0f 100644 --- a/composer.json +++ b/composer.json @@ -38,7 +38,7 @@ "jetbrains/phpstorm-attributes": "^1.0", "nyholm/psr7": "^1.5", "phpunit/phpunit": "^9.5", - "rector/rector": "^0.14.3", + "rector/rector": "^0.17.7", "roave/infection-static-analysis-plugin": "^1.23", "spatie/phpunit-watcher": "^1.23", "vimeo/psalm": "^4.27", diff --git a/rector.php b/rector.php index 37b177c2..6dd991ed 100644 --- a/rector.php +++ b/rector.php @@ -4,7 +4,10 @@ use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector; use Rector\Config\RectorConfig; -use Rector\Php70\Rector\FuncCall\NonVariableToVariableOnFunctionCallRector; +use Rector\Php56\Rector\FunctionLike\AddDefaultValueForUndefinedVariableRector; +use Rector\Php71\Rector\FuncCall\RemoveExtraParametersRector; +use Rector\Php74\Rector\Closure\ClosureToArrowFunctionRector; +use Rector\Php81\Rector\FuncCall\NullToStrictStringFuncCallArgRector; use Rector\Set\ValueObject\LevelSetList; return static function (RectorConfig $rectorConfig): void { @@ -16,11 +19,15 @@ // register a single rule $rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class); - $rectorConfig->skip([ - NonVariableToVariableOnFunctionCallRector::class, - ]); // define sets of rules $rectorConfig->sets([ - LevelSetList::UP_TO_PHP_80, + LevelSetList::UP_TO_PHP_81, + ]); + + $rectorConfig->skip([ + ClosureToArrowFunctionRector::class, + AddDefaultValueForUndefinedVariableRector::class, + NullToStrictStringFuncCallArgRector::class, + RemoveExtraParametersRector::class => [__DIR__ . '/src/Generator/AbstractGenerator.php'], ]); }; diff --git a/src/Controller/DefaultController.php b/src/Controller/DefaultController.php index 119f4466..a49a99ef 100644 --- a/src/Controller/DefaultController.php +++ b/src/Controller/DefaultController.php @@ -27,8 +27,8 @@ final class DefaultController { public function __construct( - private DataResponseFactoryInterface $responseFactory, - private ParametersProvider $parametersProvider, + private readonly DataResponseFactoryInterface $responseFactory, + private readonly ParametersProvider $parametersProvider, ) { } diff --git a/src/Exception/InvalidGeneratorCommandException.php b/src/Exception/InvalidGeneratorCommandException.php index 8c6ec43c..1bdb0ad1 100644 --- a/src/Exception/InvalidGeneratorCommandException.php +++ b/src/Exception/InvalidGeneratorCommandException.php @@ -9,7 +9,7 @@ final class InvalidGeneratorCommandException extends Exception { - public function __construct(private Result $result) + public function __construct(private readonly Result $result) { parent::__construct('Invalid generator data.'); } diff --git a/src/Generator/AbstractGenerator.php b/src/Generator/AbstractGenerator.php index d3c11164..dfdfa1b6 100644 --- a/src/Generator/AbstractGenerator.php +++ b/src/Generator/AbstractGenerator.php @@ -122,10 +122,7 @@ protected function render(GeneratorCommandInterface $command, string $templateFi ob_start(); ob_implicit_flush(false); try { - /** - * @noRector \Rector\Php71\Rector\FuncCall\RemoveExtraParametersRector - * @psalm-suppress PossiblyInvalidFunctionCall - */ + /** @psalm-suppress PossiblyInvalidFunctionCall */ $renderer->bindTo($this)($file, array_merge($params, ['command' => $command])); return ob_get_clean(); } catch (Throwable $e) { diff --git a/src/Generator/Controller/ControllerCommand.php b/src/Generator/Controller/ControllerCommand.php index 8c839afb..adb24d6e 100644 --- a/src/Generator/Controller/ControllerCommand.php +++ b/src/Generator/Controller/ControllerCommand.php @@ -15,56 +15,50 @@ final class ControllerCommand extends AbstractGeneratorCommand { + #[Each([ + new Regex( + pattern: '/^[a-z][a-z0-9]*$/', + message: 'Only a-z, 0-9, dashes (-), spaces and commas are allowed.' + ), + ])] + private readonly array $actions; + public function __construct( #[Required] #[Regex( pattern: '/^(?:[a-z][a-z0-9]*)(?:\\\\[a-z][a-z0-9]*)*$/i', message: 'Invalid namespace' )] - private string $controllerNamespace = 'App\\Controller', + private readonly string $controllerNamespace = 'App\\Controller', #[Required] #[Regex( pattern: '/^[A-Z][a-zA-Z0-9]*Controller$/', message: 'Only word characters are allowed, and the class name must start with a capital letter and end with "Controller".' )] #[NewClassRule] - /** - * @var string the controller class name - */ - private string $controllerClass = 'IndexController', + private readonly string $controllerClass = 'IndexController', /** * @var string the controller path */ - private string $controllerPath = '@src/Controller', + private readonly string $controllerPath = '@src/Controller', /** * @var string the controller's views path */ - private string $viewsPath = '@views/', + private readonly string $viewsPath = '@views/', #[Regex( pattern: '/^[a-z\\\\]*$/i', message: 'Only word characters and backslashes are allowed.', skipOnEmpty: true, )] - /** - * @var string the base class of the controller or null if no parent class present - */ - private string $baseClass = '', - #[Each([ - new Regex( - pattern: '/^[a-z][a-z0-9]*$/', - message: 'Only a-z, 0-9, dashes (-), spaces and commas are allowed.' - ), - ])] - /** - * @var string[] list of action IDs - */ - private array $actions = ['index'], + private readonly string $baseClass = '', + array $actions = ['index'], #[Required(message: 'A code template must be selected.')] #[TemplateRule] protected string $template = 'default', ) { parent::__construct($template); - sort($this->actions); + sort($actions); + $this->actions = $actions; } /** diff --git a/src/Request/GeneratorRequest.php b/src/Request/GeneratorRequest.php index 4fee64bc..70c9fe25 100644 --- a/src/Request/GeneratorRequest.php +++ b/src/Request/GeneratorRequest.php @@ -10,7 +10,7 @@ final class GeneratorRequest extends RequestModel { - public function __construct(private GiiInterface $gii) + public function __construct(private readonly GiiInterface $gii) { } diff --git a/src/Validator/NewClassHandler.php b/src/Validator/NewClassHandler.php index 87da369f..dec73ddd 100644 --- a/src/Validator/NewClassHandler.php +++ b/src/Validator/NewClassHandler.php @@ -14,7 +14,7 @@ final class NewClassHandler implements RuleHandlerInterface { public function __construct( - private Aliases $aliases, + private readonly Aliases $aliases, ) { } diff --git a/src/Validator/TemplateRuleHandler.php b/src/Validator/TemplateRuleHandler.php index d1d3bda9..e2bb4faa 100644 --- a/src/Validator/TemplateRuleHandler.php +++ b/src/Validator/TemplateRuleHandler.php @@ -18,9 +18,9 @@ final class TemplateRuleHandler implements RuleHandlerInterface { public function __construct( - private Aliases $aliases, - private GiiInterface $gii, - private ParametersProvider $parametersProvider, + private readonly Aliases $aliases, + private readonly GiiInterface $gii, + private readonly ParametersProvider $parametersProvider, ) { } diff --git a/tests/Generators/ControllerGeneratorTest.php b/tests/Generators/ControllerGeneratorTest.php index b467c1ad..058f63b7 100644 --- a/tests/Generators/ControllerGeneratorTest.php +++ b/tests/Generators/ControllerGeneratorTest.php @@ -30,7 +30,7 @@ public function testValidGenerator(): void $this->assertNotEmpty($files); } - public function testInvalidGenerator(): void + public function testInvalidGenerator(): never { $generator = $this->createGenerator( templates: [ From 8f6a06e5cabfe893f4156f9a8539241f4b8b6a17 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Jul 2023 07:19:12 +0300 Subject: [PATCH 14/29] Update psalm, improve config it and add CI in PHP 8.2 (#100) Co-authored-by: Sergei Predvoditelev --- .github/workflows/static.yml | 2 +- composer.json | 2 +- psalm.xml | 11 ++++++++--- src/Generator/AbstractGenerator.php | 2 +- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index 58b54078..301ab7c1 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -28,4 +28,4 @@ jobs: os: >- ['ubuntu-latest'] php: >- - ['8.1'] + ['8.1', '8.2'] diff --git a/composer.json b/composer.json index 3b849c0f..4c98d057 100644 --- a/composer.json +++ b/composer.json @@ -41,7 +41,7 @@ "rector/rector": "^0.17.7", "roave/infection-static-analysis-plugin": "^1.23", "spatie/phpunit-watcher": "^1.23", - "vimeo/psalm": "^4.27", + "vimeo/psalm": "^5.13", "yiisoft/di": "^1.1", "yiisoft/dummy-provider": "^1.0", "yiisoft/event-dispatcher": "^1.0", diff --git a/psalm.xml b/psalm.xml index 81eb3520..19c8d795 100644 --- a/psalm.xml +++ b/psalm.xml @@ -1,15 +1,20 @@ - + - - + + + + + diff --git a/src/Generator/AbstractGenerator.php b/src/Generator/AbstractGenerator.php index dfdfa1b6..3fee61e6 100644 --- a/src/Generator/AbstractGenerator.php +++ b/src/Generator/AbstractGenerator.php @@ -122,7 +122,7 @@ protected function render(GeneratorCommandInterface $command, string $templateFi ob_start(); ob_implicit_flush(false); try { - /** @psalm-suppress PossiblyInvalidFunctionCall */ + /** @psalm-suppress PossiblyNullFunctionCall */ $renderer->bindTo($this)($file, array_merge($params, ['command' => $command])); return ob_get_clean(); } catch (Throwable $e) { From 83d964f98ef0aaf706da1c61ac80c358c4e85e15 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Jul 2023 20:24:01 +0300 Subject: [PATCH 15/29] Migrate to PHPUnit 10 (#107) * Update phpunit/phpunit requirement from ^9.5 to ^10.2 Updates the requirements on [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) to permit the latest version. - [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.2.6/ChangeLog-10.2.md) - [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.5.0...10.2.6) --- updated-dependencies: - dependency-name: phpunit/phpunit dependency-type: direct:development ... Signed-off-by: dependabot[bot] * Migrate to PHPUnit 10 --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sergei Predvoditelev --- .gitignore | 3 +-- composer.json | 2 +- phpunit.xml.dist | 30 +++++++++++++++--------------- tests/CodeFileTest.php | 9 +++++---- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index ed1669b6..cd0943ce 100644 --- a/.gitignore +++ b/.gitignore @@ -27,8 +27,7 @@ phpunit.phar /tests/data/config.local.php /tests/docker /tests/dockerids +/.phpunit.cache # node js /node_modules - -.phpunit.result.cache diff --git a/composer.json b/composer.json index 4c98d057..629f8305 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,7 @@ "require-dev": { "jetbrains/phpstorm-attributes": "^1.0", "nyholm/psr7": "^1.5", - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "^10.2", "rector/rector": "^0.17.7", "roave/infection-static-analysis-plugin": "^1.23", "spatie/phpunit-watcher": "^1.23", diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 3e43103c..4ce94439 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,16 +1,16 @@ - - + @@ -21,9 +21,9 @@ - + - ./src + ./src - + diff --git a/tests/CodeFileTest.php b/tests/CodeFileTest.php index d84e8069..937ecc59 100644 --- a/tests/CodeFileTest.php +++ b/tests/CodeFileTest.php @@ -4,6 +4,7 @@ namespace Yiisoft\Yii\Gii\Tests; +use PHPUnit\Framework\Attributes\DataProvider; use Yiisoft\Aliases\Aliases; use Yiisoft\Yii\Gii\Component\CodeFile\CodeFile; use Yiisoft\Yii\Gii\Component\CodeFile\CodeFileWriteOperationEnum; @@ -132,7 +133,7 @@ public function customMethod() { ]; } - public function dataProviderPreview(): array + public static function dataProviderPreview(): array { return [ [ @@ -153,7 +154,7 @@ public function dataProviderPreview(): array ]; } - public function dataProviderConstruct(): array + public static function dataProviderConstruct(): array { return [ [ @@ -171,7 +172,7 @@ public function dataProviderConstruct(): array ]; } - /** @dataProvider dataProviderConstruct */ + #[DataProvider('dataProviderConstruct')] public function testConstruct(string $path, CodeFileWriteOperationEnum $expectedOperation): void { $codeFile = new CodeFile($this->aliases->get($path), ''); @@ -206,7 +207,7 @@ public function testDiffSameContent(): void $this->assertEquals($codeFile->diff(), ''); } - /** @dataProvider dataProviderPreview */ + #[DataProvider('dataProviderPreview')] public function testPreview(string $path, string $content, $result): void { $codeFile = new CodeFile($this->aliases->get($path), $content); From 9f540e9cd0ba4dfbf72ad51035e7511cfcd9ac4a Mon Sep 17 00:00:00 2001 From: Dmitriy Derepko Date: Sun, 3 Sep 2023 17:14:00 +0300 Subject: [PATCH 16/29] Active Record generator (#110) * Add AR generator, fix body parsing * Apply fixes from StyleCI * Add table name validator * Apply fixes from StyleCI * Expose base class and add validator * Fix labels and hints * Fix tests * Fix tests * Apply fixes from StyleCI * Fix db tests * Uncomment line * Add properties * Apply fixes from StyleCI --------- Co-authored-by: StyleCI Bot --- composer.json | 4 + config/params.php | 8 +- config/routes.php | 6 + src/Command/ControllerCommand.php | 6 +- src/Generator/ActiveRecord/Command.php | 94 +++++++++++++++ src/Generator/ActiveRecord/Generator.php | 110 ++++++++++++++++++ src/Generator/ActiveRecord/default/model.php | 38 ++++++ .../{ControllerCommand.php => Command.php} | 2 +- ...{ControllerGenerator.php => Generator.php} | 10 +- .../Controller/default/controller.php | 2 +- src/Generator/Controller/default/view.php | 2 +- src/GeneratorInterface.php | 2 +- src/ParametersProvider.php | 2 +- src/Validator/TableExistsHandler.php | 40 +++++++ src/Validator/TableExistsRule.php | 23 ++++ src/Validator/TemplateRuleHandler.php | 2 +- tests/CodeFileTest.php | 2 +- .../Generators/ActiveRecordGeneratorTest.php | 93 +++++++++++++++ tests/Generators/ControllerGeneratorTest.php | 38 +++--- tests/GiiTest.php | 2 +- tests/Support/test.db | Bin 0 -> 8192 bytes tests/TestCase.php | 98 +++++++++------- tests/templates/active-record/model.php | 18 +++ .../{custom => controller}/controller.php | 0 .../templates/{custom => controller}/view.php | 0 25 files changed, 524 insertions(+), 78 deletions(-) create mode 100644 src/Generator/ActiveRecord/Command.php create mode 100644 src/Generator/ActiveRecord/Generator.php create mode 100644 src/Generator/ActiveRecord/default/model.php rename src/Generator/Controller/{ControllerCommand.php => Command.php} (98%) rename src/Generator/Controller/{ControllerGenerator.php => Generator.php} (89%) create mode 100644 src/Validator/TableExistsHandler.php create mode 100644 src/Validator/TableExistsRule.php create mode 100644 tests/Generators/ActiveRecordGeneratorTest.php create mode 100644 tests/Support/test.db create mode 100644 tests/templates/active-record/model.php rename tests/templates/{custom => controller}/controller.php (100%) rename tests/templates/{custom => controller}/view.php (100%) diff --git a/composer.json b/composer.json index 629f8305..db74eac2 100644 --- a/composer.json +++ b/composer.json @@ -20,6 +20,7 @@ "prefer-stable": true, "require": { "php": "^8.1", + "httpsoft/http-basis": "^1.1", "phpspec/php-diff": "^1.1.3", "yiisoft/aliases": "^3.0", "yiisoft/arrays": "^2.1|^3.0", @@ -42,6 +43,9 @@ "roave/infection-static-analysis-plugin": "^1.23", "spatie/phpunit-watcher": "^1.23", "vimeo/psalm": "^5.13", + "yiisoft/active-record": "^3.0@dev", + "yiisoft/cache": "^3.0", + "yiisoft/db-sqlite": "^1.0", "yiisoft/di": "^1.1", "yiisoft/dummy-provider": "^1.0", "yiisoft/event-dispatcher": "^1.0", diff --git a/config/params.php b/config/params.php index f3523b8f..818fb455 100644 --- a/config/params.php +++ b/config/params.php @@ -3,7 +3,7 @@ declare(strict_types=1); use Yiisoft\Yii\Gii\Command\ControllerCommand; -use Yiisoft\Yii\Gii\Generator\Controller\ControllerGenerator; +use Yiisoft\Yii\Gii\Generator as Generators; return [ 'yiisoft/yii-debug' => [ @@ -26,7 +26,11 @@ 'allowedIPs' => ['127.0.0.1', '::1'], 'generators' => [ [ - 'class' => ControllerGenerator::class, + 'class' => Generators\Controller\Generator::class, + 'parameters' => [], + ], + [ + 'class' => Generators\ActiveRecord\Generator::class, 'parameters' => [], ], ], diff --git a/config/routes.php b/config/routes.php index 80d98d63..b457c242 100644 --- a/config/routes.php +++ b/config/routes.php @@ -6,7 +6,9 @@ * @var array $params */ +use HttpSoft\Basis\Middleware\BodyParamsMiddleware; use Psr\Http\Message\ResponseFactoryInterface; +use Yiisoft\Csrf\CsrfMiddleware; use Yiisoft\DataResponse\Middleware\FormatDataResponseAsJson; use Yiisoft\Router\Group; use Yiisoft\Router\Route; @@ -22,6 +24,7 @@ return [ Group::create('/gii/api') ->withCors(CorsAllowAll::class) + ->disableMiddleware(CsrfMiddleware::class) ->middleware( static function (ResponseFactoryInterface $responseFactory, ValidatorInterface $validator) use ($params) { return new IpFilter( @@ -43,12 +46,15 @@ static function (ResponseFactoryInterface $responseFactory, ValidatorInterface $ ->action([DefaultController::class, 'get']) ->name('generator'), Route::post('/{generator}/preview') + ->middleware(BodyParamsMiddleware::class) ->action([DefaultController::class, 'preview']) ->name('preview'), Route::post('/{generator}/generate') + ->middleware(BodyParamsMiddleware::class) ->action([DefaultController::class, 'generate']) ->name('generate'), Route::post('/{generator}/diff') + ->middleware(BodyParamsMiddleware::class) ->action([DefaultController::class, 'diff']) ->name('diff') ) diff --git a/src/Command/ControllerCommand.php b/src/Command/ControllerCommand.php index d2bf22a6..ab7dd64e 100644 --- a/src/Command/ControllerCommand.php +++ b/src/Command/ControllerCommand.php @@ -6,7 +6,7 @@ use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; -use Yiisoft\Yii\Gii\Generator\Controller\ControllerGenerator; +use Yiisoft\Yii\Gii\Generator\Controller\Generator; use Yiisoft\Yii\Gii\GeneratorCommandInterface; use Yiisoft\Yii\Gii\GeneratorInterface; @@ -36,7 +36,7 @@ protected function configure(): void public function getGenerator(): GeneratorInterface { - return $this->gii->getGenerator(ControllerGenerator::getId()); + return $this->gii->getGenerator(Generator::getId()); } protected function createGeneratorCommand(InputInterface $input): GeneratorCommandInterface @@ -47,7 +47,7 @@ protected function createGeneratorCommand(InputInterface $input): GeneratorComma $template = $input->getOption('template'); $template ??= 'default'; - return new \Yiisoft\Yii\Gii\Generator\Controller\ControllerCommand( + return new \Yiisoft\Yii\Gii\Generator\Controller\Command( controllerClass: $input->getArgument('controllerClass'), viewsPath: (string)$input->getOption('viewsPath'), baseClass: (string)$input->getOption('baseClass'), diff --git a/src/Generator/ActiveRecord/Command.php b/src/Generator/ActiveRecord/Command.php new file mode 100644 index 00000000..ae26fd44 --- /dev/null +++ b/src/Generator/ActiveRecord/Command.php @@ -0,0 +1,94 @@ +namespace; + } + + public function getBaseClass(): string + { + return $this->baseClass; + } + + public function getTableName(): string + { + return $this->tableName; + } + + public function getModelName(): string + { + return (new Inflector())->tableToClass($this->tableName); + } + + public static function getAttributeLabels(): array + { + return [ + 'namespace' => 'Model namespace', + 'baseClass' => 'Base class', + 'tableName' => 'Table name', + 'template' => 'Template', + ]; + } + + public static function getHints(): array + { + return [ + 'namespace' => 'Namespace for the model class to store it in the related directory.', + 'baseClass' => 'Parent class for the new model class.', + 'tableName' => 'Corresponded table name for the model class.', + ]; + } + + public static function getAttributes(): array + { + return [ + 'namespace', + 'tableName', + 'baseClass', + 'template', + ]; + } +} diff --git a/src/Generator/ActiveRecord/Generator.php b/src/Generator/ActiveRecord/Generator.php new file mode 100644 index 00000000..1c8d690f --- /dev/null +++ b/src/Generator/ActiveRecord/Generator.php @@ -0,0 +1,110 @@ +aliases->get('@root'); + + $properties = []; + if ($schema = $this->connection->getTableSchema($command->getTableName(), true)) { + foreach ($schema->getColumns() as $columnSchema) { + $properties[] = [ + 'name' => $columnSchema->getName(), + 'type' => match ($columnSchema->getPhpType()) { + 'integer' => 'int', + default => 'string', + }, + 'isAllowNull' => $columnSchema->isAllowNull(), + 'defaultValue' => $columnSchema->getDefaultValue(), + ]; + } + } + $path = $this->getControllerFile($command); + $codeFile = (new CodeFile( + $path, + $this->render($command, 'model.php', ['properties' => $properties]) + ))->withBasePath($rootPath); + $files[$codeFile->getId()] = $codeFile; + + return $files; + } + + /** + * @return string the controller class file path + */ + private function getControllerFile(Command $command): string + { + $directory = '@src/Model/'; + + return $this->aliases->get( + str_replace( + ['\\', '//'], + '/', + sprintf( + '%s/%s.php', + $directory, + $command->getModelName(), + ), + ), + ); + } + + public static function getCommandClass(): string + { + return Command::class; + } +} diff --git a/src/Generator/ActiveRecord/default/model.php b/src/Generator/ActiveRecord/default/model.php new file mode 100644 index 00000000..6eff74b7 --- /dev/null +++ b/src/Generator/ActiveRecord/default/model.php @@ -0,0 +1,38 @@ + $properties + */ + +echo " + +declare(strict_types=1); + +namespace getNamespace() ?>; + +use getBaseClass() ?>; + +final class getModelName(); ?> extends getBaseClass()) . PHP_EOL ?> +{ + + private ; + + + public function tableName(): string + { + return 'getTableName() ?>'; + } +} diff --git a/src/Generator/Controller/ControllerCommand.php b/src/Generator/Controller/Command.php similarity index 98% rename from src/Generator/Controller/ControllerCommand.php rename to src/Generator/Controller/Command.php index adb24d6e..f4ef38cb 100644 --- a/src/Generator/Controller/ControllerCommand.php +++ b/src/Generator/Controller/Command.php @@ -13,7 +13,7 @@ use Yiisoft\Yii\Gii\Validator\NewClassRule; use Yiisoft\Yii\Gii\Validator\TemplateRule; -final class ControllerCommand extends AbstractGeneratorCommand +final class Command extends AbstractGeneratorCommand { #[Each([ new Regex( diff --git a/src/Generator/Controller/ControllerGenerator.php b/src/Generator/Controller/Generator.php similarity index 89% rename from src/Generator/Controller/ControllerGenerator.php rename to src/Generator/Controller/Generator.php index a02f6678..e8098448 100644 --- a/src/Generator/Controller/ControllerGenerator.php +++ b/src/Generator/Controller/Generator.php @@ -12,7 +12,7 @@ /** * This generator will generate a controller and one or a few action view files. */ -final class ControllerGenerator extends AbstractGenerator +final class Generator extends AbstractGenerator { public static function getId(): string { @@ -40,7 +40,7 @@ public function getRequiredTemplates(): array public function doGenerate(GeneratorCommandInterface $command): array { - if (!$command instanceof ControllerCommand) { + if (!$command instanceof Command) { throw new InvalidArgumentException(); } @@ -68,7 +68,7 @@ public function doGenerate(GeneratorCommandInterface $command): array /** * @return string the controller class file path */ - private function getControllerFile(ControllerCommand $command): string + private function getControllerFile(Command $command): string { $directory = empty($command->getDirectory()) ? '@src/Controller/' : $command->getDirectory(); @@ -90,7 +90,7 @@ private function getControllerFile(ControllerCommand $command): string * * @return string the action view file path */ - public function getViewFile(ControllerCommand $command, string $action): string + public function getViewFile(Command $command, string $action): string { $directory = empty($command->getViewsPath()) ? '@views/' : $command->getViewsPath(); @@ -110,6 +110,6 @@ public function getViewFile(ControllerCommand $command, string $action): string public static function getCommandClass(): string { - return ControllerCommand::class; + return Command::class; } } diff --git a/src/Generator/Controller/default/controller.php b/src/Generator/Controller/default/controller.php index fc5b6533..bf2c307e 100644 --- a/src/Generator/Controller/default/controller.php +++ b/src/Generator/Controller/default/controller.php @@ -6,7 +6,7 @@ use Yiisoft\Strings\StringHelper; -/* @var $command Yiisoft\Yii\Gii\Generator\Controller\ControllerCommand */ +/* @var $command Yiisoft\Yii\Gii\Generator\Controller\Command */ $classDefinitionParts = []; $classDefinitionParts[] = StringHelper::baseName($command->getControllerClass()); diff --git a/src/Generator/Controller/default/view.php b/src/Generator/Controller/default/view.php index c0b546d3..d3fc5dc0 100644 --- a/src/Generator/Controller/default/view.php +++ b/src/Generator/Controller/default/view.php @@ -4,7 +4,7 @@ * This is the template for generating an action view file. */ -/* @var $command Yiisoft\Yii\Gii\Generator\Controller\ControllerCommand */ +/* @var $command Yiisoft\Yii\Gii\Generator\Controller\Command */ /* @var $action string the action ID */ echo "> a list of available code templates. The array keys are the template names, * and the array values are the corresponding template paths or path aliases. */ - private array $templates = [], + private readonly array $templates = [], ) { } diff --git a/src/Validator/TableExistsHandler.php b/src/Validator/TableExistsHandler.php new file mode 100644 index 00000000..6f550940 --- /dev/null +++ b/src/Validator/TableExistsHandler.php @@ -0,0 +1,40 @@ +connection->getTableSchema($value); + + if ($tableSchema === null) { + $result->addError(sprintf('Table "%s" does not exist.', $value)); + return $result; + } + + return $result; + } +} diff --git a/src/Validator/TableExistsRule.php b/src/Validator/TableExistsRule.php new file mode 100644 index 00000000..1f5a3ef7 --- /dev/null +++ b/src/Validator/TableExistsRule.php @@ -0,0 +1,23 @@ +createGenerator(); + $command = new Command( + namespace: 'App\\Model', + tableName: 'user', + baseClass: ActiveRecord::class, + template: 'default', + ); + + $files = $generator->generate($command); + + $this->assertNotEmpty($files); + } + + public function testInvalidTableName(): void + { + $generator = $this->createGenerator(); + $command = new Command( + namespace: 'App\\Model', + tableName: 'user2', + baseClass: ActiveRecord::class, + template: 'default', + ); + + $this->expectException(InvalidGeneratorCommandException::class); + $generator->generate($command); + } + + public function testInvalidGenerator(): void + { + $generator = $this->createGenerator( + templates: [ + 'default' => dirname(__DIR__ . '../templates'), + ], + ); + $command = new Command( + namespace: '0App', + template: 'test', + ); + + $this->expectException(InvalidGeneratorCommandException::class); + $generator->generate($command); + } + + public function testCustomTemplate(): void + { + $generator = $this->createGenerator( + templates: [ + Generator::getId() => [ + 'custom' => '@src/templates/active-record', + ], + ], + ); + $command = new Command( + namespace: 'App\\Model', + tableName: 'user', + baseClass: ActiveRecord::class, + template: 'custom', + ); + + $files = $generator->generate($command); + $this->assertNotEmpty($files); + $this->assertMatchesRegularExpression('/final custom class/', reset($files)->getContent()); + } + + private function createGenerator(...$params): Generator + { + $injector = new Injector( + $this->getContainer([ + ParametersProvider::class => new ParametersProvider(...$params), + ]) + ); + + return $injector->make(Generator::class); + } +} diff --git a/tests/Generators/ControllerGeneratorTest.php b/tests/Generators/ControllerGeneratorTest.php index 058f63b7..307bf748 100644 --- a/tests/Generators/ControllerGeneratorTest.php +++ b/tests/Generators/ControllerGeneratorTest.php @@ -6,20 +6,17 @@ use Yiisoft\Injector\Injector; use Yiisoft\Yii\Gii\Exception\InvalidGeneratorCommandException; -use Yiisoft\Yii\Gii\Generator\Controller\ControllerCommand; -use Yiisoft\Yii\Gii\Generator\Controller\ControllerGenerator as ControllerGenerator; +use Yiisoft\Yii\Gii\Generator\Controller\Command; +use Yiisoft\Yii\Gii\Generator\Controller\Generator; use Yiisoft\Yii\Gii\ParametersProvider; use Yiisoft\Yii\Gii\Tests\TestCase; -/** - * ControllerGeneratorTest checks that Gii controller generator produces valid results - */ -class ControllerGeneratorTest extends TestCase +final class ControllerGeneratorTest extends TestCase { public function testValidGenerator(): void { $generator = $this->createGenerator(); - $command = new ControllerCommand( + $command = new Command( controllerClass: 'TestController', actions: ['index', 'edit', 'view'], template: 'default', @@ -37,7 +34,7 @@ public function testInvalidGenerator(): never 'default' => dirname(__DIR__ . '../templates'), ], ); - $command = new ControllerCommand( + $command = new Command( controllerClass: 'Wr0ngContr0ller', actions: ['index', 'ed1t', 'view'], template: 'test', @@ -58,25 +55,32 @@ public function testCustomTemplate(): void { $generator = $this->createGenerator( templates: [ - 'custom' => '@src/templates/custom', + Generator::getId() => [ + 'custom' => '@src/templates/controller', + ], ], ); - $command = new ControllerCommand( + $command = new Command( controllerClass: 'TestController', actions: ['index', 'edit', 'view'], template: 'custom', ); - $this->expectException(InvalidGeneratorCommandException::class); - $generator->generate($command); + $files = $generator->generate($command); + $this->assertNotEmpty($files); + foreach ($files as $file) { + $this->assertEmpty($file->getContent()); + } } - private function createGenerator(...$params): ControllerGenerator + private function createGenerator(...$params): Generator { - $injector = new Injector($this->getContainer()); + $injector = new Injector( + $this->getContainer([ + ParametersProvider::class => new ParametersProvider(...$params), + ]) + ); - return $injector->make(ControllerGenerator::class, [ - new ParametersProvider(...$params), - ]); + return $injector->make(Generator::class); } } diff --git a/tests/GiiTest.php b/tests/GiiTest.php index 16a183c5..483cf389 100644 --- a/tests/GiiTest.php +++ b/tests/GiiTest.php @@ -10,7 +10,7 @@ /** * GiiTestCase is the base class for all gii related test cases */ -class GiiTest extends TestCase +final class GiiTest extends TestCase { public function testUnknownGeneratorInstance(): void { diff --git a/tests/Support/test.db b/tests/Support/test.db new file mode 100644 index 0000000000000000000000000000000000000000..32e7cfb5ac46f1cdd02b650bf1646c7215bb2600 GIT binary patch literal 8192 zcmeI#u?oU45XSMlB2G$Oij#13QVw%G&qrDN3by++$y3XdO_o~hN3l(-^Q`-f|C>wr c?v6MkfB*srAbwithDefinitions([ - GiiInterface::class => function (ContainerInterface $container) { - $generators = [ - 'controller' => ControllerGenerator::class, - ]; - $generatorsInstances = []; - foreach ($generators as $class) { - $generatorsInstances[] = $container->get($class); - } - return new Gii($generatorsInstances); - }, - Aliases::class => new Aliases( - [ - '@src' => __DIR__, - '@views' => '@src/runtime', - '@view' => '@src/runtime', - '@root' => '@src/runtime', - ] - ), - EventDispatcherInterface::class => Dispatcher::class, - ListenerProviderInterface::class => Provider::class, - LoggerInterface::class => NullLogger::class, - TranslatorInterface::class => [ - 'class' => Translator::class, - '__construct()' => [ - 'locale' => 'en', - 'fallbackLocale' => 'en', - 'eventDispatcher' => Reference::to(EventDispatcherInterface::class), - ], - ], - RuleHandlerResolverInterface::class => RuleHandlerContainer::class, - ValidatorInterface::class => Validator::class, - ]); - $this->container = new Container($config); } protected function tearDown(): void @@ -82,8 +48,54 @@ protected function tearDown(): void $this->container = null; } - protected function getContainer(): ContainerInterface + protected function getContainer(array $definitions = []): ContainerInterface { + if ($this->container === null) { + $config = ContainerConfig::create() + ->withDefinitions([ + GiiInterface::class => function (ContainerInterface $container) { + $generators = [ + Generators\Controller\Generator::getId() => Generators\Controller\Generator::class, + Generators\ActiveRecord\Generator::getId() => Generators\ActiveRecord\Generator::class, + ]; + $generatorsInstances = []; + foreach ($generators as $class) { + $generatorsInstances[] = $container->get($class); + } + return new Gii($generatorsInstances); + }, + Aliases::class => new Aliases( + [ + '@src' => __DIR__, + '@views' => '@src/runtime', + '@view' => '@src/runtime', + '@root' => '@src/runtime', + ] + ), + EventDispatcherInterface::class => Dispatcher::class, + ListenerProviderInterface::class => Provider::class, + LoggerInterface::class => NullLogger::class, + TranslatorInterface::class => [ + 'class' => Translator::class, + '__construct()' => [ + 'locale' => 'en', + 'fallbackLocale' => 'en', + 'eventDispatcher' => Reference::to(EventDispatcherInterface::class), + ], + ], + RuleHandlerResolverInterface::class => RuleHandlerContainer::class, + ValidatorInterface::class => Validator::class, + CacheInterface::class => NullCache::class, + ConnectionInterface::class => [ + 'class' => SqliteConnection::class, + '__construct()' => [ + new Driver('sqlite:' . __DIR__ . '/Support/test.db'), + ], + ], + ...$definitions, + ]); + $this->container = new Container($config); + } return $this->container; } } diff --git a/tests/templates/active-record/model.php b/tests/templates/active-record/model.php new file mode 100644 index 00000000..4c89e7ee --- /dev/null +++ b/tests/templates/active-record/model.php @@ -0,0 +1,18 @@ + + +declare(strict_types=1); + +namespace getNamespace() ?>; + +use getBaseClass() ?>; + +final custom class getModelName(); ?> diff --git a/tests/templates/custom/controller.php b/tests/templates/controller/controller.php similarity index 100% rename from tests/templates/custom/controller.php rename to tests/templates/controller/controller.php diff --git a/tests/templates/custom/view.php b/tests/templates/controller/view.php similarity index 100% rename from tests/templates/custom/view.php rename to tests/templates/controller/view.php From d0be0507c59293dc47aba205e028534dcb648872 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 11:17:25 +0300 Subject: [PATCH 17/29] Update rector/rector requirement from ^0.17.7 to ^0.18.4 (#114) Co-authored-by: Sergei Predvoditelev --- composer.json | 2 +- rector.php | 2 -- src/Generator/ActiveRecord/Generator.php | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index db74eac2..d462b375 100644 --- a/composer.json +++ b/composer.json @@ -39,7 +39,7 @@ "jetbrains/phpstorm-attributes": "^1.0", "nyholm/psr7": "^1.5", "phpunit/phpunit": "^10.2", - "rector/rector": "^0.17.7", + "rector/rector": "^0.18.4", "roave/infection-static-analysis-plugin": "^1.23", "spatie/phpunit-watcher": "^1.23", "vimeo/psalm": "^5.13", diff --git a/rector.php b/rector.php index 6dd991ed..8a6cdc9e 100644 --- a/rector.php +++ b/rector.php @@ -4,7 +4,6 @@ use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector; use Rector\Config\RectorConfig; -use Rector\Php56\Rector\FunctionLike\AddDefaultValueForUndefinedVariableRector; use Rector\Php71\Rector\FuncCall\RemoveExtraParametersRector; use Rector\Php74\Rector\Closure\ClosureToArrowFunctionRector; use Rector\Php81\Rector\FuncCall\NullToStrictStringFuncCallArgRector; @@ -26,7 +25,6 @@ $rectorConfig->skip([ ClosureToArrowFunctionRector::class, - AddDefaultValueForUndefinedVariableRector::class, NullToStrictStringFuncCallArgRector::class, RemoveExtraParametersRector::class => [__DIR__ . '/src/Generator/AbstractGenerator.php'], ]); diff --git a/src/Generator/ActiveRecord/Generator.php b/src/Generator/ActiveRecord/Generator.php index 1c8d690f..c625fe62 100644 --- a/src/Generator/ActiveRecord/Generator.php +++ b/src/Generator/ActiveRecord/Generator.php @@ -22,7 +22,7 @@ public function __construct( Aliases $aliases, ValidatorInterface $validator, ParametersProvider $parametersProvider, - private ConnectionInterface $connection, + private readonly ConnectionInterface $connection, ) { parent::__construct($aliases, $validator, $parametersProvider); } From e10310cdfea611b17a3b851d17fb66e689055248 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 5 Oct 2023 15:59:43 +0300 Subject: [PATCH 18/29] Remove generators from params (#115) --- config/params.php | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/config/params.php b/config/params.php index 818fb455..56e71694 100644 --- a/config/params.php +++ b/config/params.php @@ -3,7 +3,6 @@ declare(strict_types=1); use Yiisoft\Yii\Gii\Command\ControllerCommand; -use Yiisoft\Yii\Gii\Generator as Generators; return [ 'yiisoft/yii-debug' => [ @@ -24,16 +23,7 @@ 'yiisoft/yii-gii' => [ 'enabled' => true, 'allowedIPs' => ['127.0.0.1', '::1'], - 'generators' => [ - [ - 'class' => Generators\Controller\Generator::class, - 'parameters' => [], - ], - [ - 'class' => Generators\ActiveRecord\Generator::class, - 'parameters' => [], - ], - ], + 'generators' => [], 'parameters' => [ 'templates' => [], ], From 31f915803e93a07cf3fc44adab4360907ec36819 Mon Sep 17 00:00:00 2001 From: Dmitriy Derepko Date: Sun, 8 Oct 2023 14:05:03 +0300 Subject: [PATCH 19/29] Lazy generators (#116) * Make generators lazy * Apply fixes from StyleCI * Revert generators * Add AR generator --------- Co-authored-by: StyleCI Bot --- config/di.php | 6 +++--- config/params.php | 12 +++++++++++- src/Gii.php | 17 ++++++++++------- src/GiiInterface.php | 6 +++++- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/config/di.php b/config/di.php index 3f8dc62c..fe6fc121 100644 --- a/config/di.php +++ b/config/di.php @@ -20,10 +20,10 @@ foreach ($generators as $generator) { $class = $generator['class']; /** - * @var $generator GeneratorInterface + * @var $loader Closure(): GeneratorInterface */ - $generator = $injector->make($class, $generator['parameters'] ?? []); - $generatorsInstances[] = $generator; + $loader = fn() => $injector->make($class, $generator['parameters'] ?? []); + $generatorsInstances[$class] = $loader; } return new Gii($generatorsInstances); }, diff --git a/config/params.php b/config/params.php index 56e71694..818fb455 100644 --- a/config/params.php +++ b/config/params.php @@ -3,6 +3,7 @@ declare(strict_types=1); use Yiisoft\Yii\Gii\Command\ControllerCommand; +use Yiisoft\Yii\Gii\Generator as Generators; return [ 'yiisoft/yii-debug' => [ @@ -23,7 +24,16 @@ 'yiisoft/yii-gii' => [ 'enabled' => true, 'allowedIPs' => ['127.0.0.1', '::1'], - 'generators' => [], + 'generators' => [ + [ + 'class' => Generators\Controller\Generator::class, + 'parameters' => [], + ], + [ + 'class' => Generators\ActiveRecord\Generator::class, + 'parameters' => [], + ], + ], 'parameters' => [ 'templates' => [], ], diff --git a/src/Gii.php b/src/Gii.php index 8c6d1cd0..002b8a98 100644 --- a/src/Gii.php +++ b/src/Gii.php @@ -4,19 +4,19 @@ namespace Yiisoft\Yii\Gii; +use Closure; use Yiisoft\Yii\Gii\Exception\GeneratorNotFoundException; +/** + * @psalm-import-type LazyGenerator from GiiInterface + */ final class Gii implements GiiInterface { /** - * @param array $generators + * @param array $generators */ public function __construct(private array $generators) { - $this->generators = array_combine( - array_map(fn (GeneratorInterface $generator) => $generator::getId(), $generators), - array_values($this->generators) - ); } public function addGenerator(GeneratorInterface $generator): void @@ -30,11 +30,14 @@ public function getGenerator(string $id): GeneratorInterface throw new GeneratorNotFoundException('Generator "' . $id . '" not found'); } - return $this->generators[$id]; + return $this->generators[$id] instanceof Closure ? $this->generators[$id]() : $this->generators[$id]; } public function getGenerators(): array { - return $this->generators; + return array_map( + fn (Closure|GeneratorInterface $generator) => $generator instanceof Closure ? $generator() : $generator, + $this->generators + ); } } diff --git a/src/GiiInterface.php b/src/GiiInterface.php index 2462000f..614435d3 100644 --- a/src/GiiInterface.php +++ b/src/GiiInterface.php @@ -4,12 +4,16 @@ namespace Yiisoft\Yii\Gii; +use Closure; use Yiisoft\Yii\Gii\Exception\GeneratorNotFoundException; +/** + * @psalm-type LazyGenerator = Closure(): GeneratorInterface + */ interface GiiInterface { /** - * @param GeneratorInterface $generator + * @psalm-param GeneratorInterface $generator */ public function addGenerator(GeneratorInterface $generator): void; From 31d9506b4cab6d87b40abc98117ceb7d0e8698aa Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Tue, 10 Oct 2023 16:01:31 +0300 Subject: [PATCH 20/29] Replace Yii Request Model to Yii Input HTTP (#118) --- composer.json | 3 ++- src/Controller/DefaultController.php | 2 +- src/Request/GeneratorRequest.php | 21 ++++++++++++++++----- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/composer.json b/composer.json index d462b375..f083adfc 100644 --- a/composer.json +++ b/composer.json @@ -26,9 +26,10 @@ "yiisoft/arrays": "^2.1|^3.0", "yiisoft/data-response": "^2.0", "yiisoft/http": "^1.2", + "yiisoft/hydrator": "dev-master", "yiisoft/injector": "^1.1", + "yiisoft/input-http": "dev-master", "yiisoft/json": "^1.0", - "yiisoft/request-model": "dev-master", "yiisoft/router": "^3.0", "yiisoft/strings": "^2.1", "yiisoft/validator": "^1.0", diff --git a/src/Controller/DefaultController.php b/src/Controller/DefaultController.php index a49a99ef..24ff60d0 100644 --- a/src/Controller/DefaultController.php +++ b/src/Controller/DefaultController.php @@ -10,7 +10,7 @@ use Yiisoft\DataResponse\DataResponse; use Yiisoft\DataResponse\DataResponseFactoryInterface; use Yiisoft\Http\Status; -use Yiisoft\RequestModel\Attribute\Query; +use Yiisoft\Input\Http\Attribute\Parameter\Query; use Yiisoft\Validator\Helper\RulesDumper; use Yiisoft\Validator\RulesProvider\AttributesRulesProvider; use Yiisoft\Yii\Gii\Component\CodeFile\CodeFile; diff --git a/src/Request/GeneratorRequest.php b/src/Request/GeneratorRequest.php index 70c9fe25..e63568a0 100644 --- a/src/Request/GeneratorRequest.php +++ b/src/Request/GeneratorRequest.php @@ -4,28 +4,39 @@ namespace Yiisoft\Yii\Gii\Request; -use Yiisoft\RequestModel\RequestModel; +use Yiisoft\Hydrator\Temp\RouteArgument; +use Yiisoft\Input\Http\Attribute\Parameter\Body; +use Yiisoft\Input\Http\RequestInputInterface; use Yiisoft\Yii\Gii\GeneratorInterface; use Yiisoft\Yii\Gii\GiiInterface; -final class GeneratorRequest extends RequestModel +final class GeneratorRequest implements RequestInputInterface { + #[RouteArgument('generator')] + private string $generatorId = ''; + + #[Body('answers')] + private array $answers = []; + + #[Body('parameters')] + private array $parameters = []; + public function __construct(private readonly GiiInterface $gii) { } public function getGenerator(): GeneratorInterface { - return $this->gii->getGenerator($this->getAttributeValue('router.generator')); + return $this->gii->getGenerator($this->generatorId); } public function getAnswers(): array { - return $this->getAttributeValue('body.answers', []); + return $this->answers; } public function getBody(): array { - return $this->getAttributeValue('body.parameters', []); + return $this->parameters; } } From 747502a9b17e5a4c7bbf2c04f691faee28c7a2cb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 10:26:01 +0300 Subject: [PATCH 21/29] Update rector/rector requirement from ^0.18.4 to ^0.19.0 (#119) Updates the requirements on [rector/rector](https://github.com/rectorphp/rector) to permit the latest version. - [Release notes](https://github.com/rectorphp/rector/releases) - [Commits](https://github.com/rectorphp/rector/compare/0.18.4...0.19.0) --- updated-dependencies: - dependency-name: rector/rector dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index f083adfc..14fe4bc2 100644 --- a/composer.json +++ b/composer.json @@ -40,7 +40,7 @@ "jetbrains/phpstorm-attributes": "^1.0", "nyholm/psr7": "^1.5", "phpunit/phpunit": "^10.2", - "rector/rector": "^0.18.4", + "rector/rector": "^0.19.0", "roave/infection-static-analysis-plugin": "^1.23", "spatie/phpunit-watcher": "^1.23", "vimeo/psalm": "^5.13", From fcd87d32c59cec0d73378e4b58d9bbae5b373c85 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Mon, 22 Jan 2024 20:26:53 +0300 Subject: [PATCH 22/29] Add "dev" to composer.json keywords --- composer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 14fe4bc2..7128c75d 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,8 @@ "keywords": [ "yii", "gii", - "code generator" + "code generator", + "dev" ], "license": "BSD-3-Clause", "support": { From 18f91ca6e5d697058a823494ffe63daccd61afb6 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Mon, 29 Jan 2024 13:50:31 +0300 Subject: [PATCH 23/29] Use stable yiisoft/hydrator --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 7128c75d..0e96c0c0 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,7 @@ "yiisoft/arrays": "^2.1|^3.0", "yiisoft/data-response": "^2.0", "yiisoft/http": "^1.2", - "yiisoft/hydrator": "dev-master", + "yiisoft/hydrator": "^1.0", "yiisoft/injector": "^1.1", "yiisoft/input-http": "dev-master", "yiisoft/json": "^1.0", From 9ba020aabb812dc7e2949b7cea91a1acc17ef50e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 10:40:35 +0300 Subject: [PATCH 24/29] Update rector/rector requirement from ^0.19.0 to ^1.0.0 (#121) Updates the requirements on [rector/rector](https://github.com/rectorphp/rector) to permit the latest version. - [Release notes](https://github.com/rectorphp/rector/releases) - [Commits](https://github.com/rectorphp/rector/compare/0.19.0...1.0.0) --- updated-dependencies: - dependency-name: rector/rector dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 0e96c0c0..0cd25c18 100644 --- a/composer.json +++ b/composer.json @@ -41,7 +41,7 @@ "jetbrains/phpstorm-attributes": "^1.0", "nyholm/psr7": "^1.5", "phpunit/phpunit": "^10.2", - "rector/rector": "^0.19.0", + "rector/rector": "^1.0.0", "roave/infection-static-analysis-plugin": "^1.23", "spatie/phpunit-watcher": "^1.23", "vimeo/psalm": "^5.13", From 06562e2b8baa92738320e3801618fe1ee554b465 Mon Sep 17 00:00:00 2001 From: Alexey Rogachev Date: Tue, 26 Mar 2024 18:11:50 +0500 Subject: [PATCH 25/29] Use stable version of `input-http` (#122) * Use stable version of input-http * Update PR template [skip ci] --- .github/PULL_REQUEST_TEMPLATE.md | 1 - composer.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 4a3e8ace..6be5d587 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -3,4 +3,3 @@ | Is bugfix? | ✔️/❌ | New feature? | ✔️/❌ | Breaks BC? | ✔️/❌ -| Fixed issues | comma-separated list of tickets # fixed by the PR, if any diff --git a/composer.json b/composer.json index 0cd25c18..fc434ec8 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,7 @@ "yiisoft/http": "^1.2", "yiisoft/hydrator": "^1.0", "yiisoft/injector": "^1.1", - "yiisoft/input-http": "dev-master", + "yiisoft/input-http": "^1.0", "yiisoft/json": "^1.0", "yiisoft/router": "^3.0", "yiisoft/strings": "^2.1", From 38adb9eb9f3f7e1a4363f43c7eb8db71cc6f2f56 Mon Sep 17 00:00:00 2001 From: Luiz Marin <67489841+luizcmarin@users.noreply.github.com> Date: Mon, 22 Apr 2024 17:34:34 -0300 Subject: [PATCH 26/29] Docs folder standardization and other fixes (#126) --- LICENSE.md | 8 +- README.md | 34 +++++-- composer.json | 2 +- docs/guide-pt-BR/images/gii-entry.png | Bin 45302 -> 0 bytes docs/guide-pt-BR/images/gii-preview.png | Bin 41620 -> 0 bytes docs/guide-ru/README.md | 20 ----- docs/guide-ru/basic-usage.md | 41 --------- docs/guide-ru/images/gii-entry.png | Bin 45302 -> 0 bytes docs/guide-ru/images/gii-preview.png | Bin 41620 -> 0 bytes docs/guide-ru/installation.md | 85 ------------------ .../topics-creating-your-own-generators.md | 47 ---------- .../topics-creating-your-own-templates.md | 54 ----------- docs/guide-uk/README.md | 20 ----- docs/guide-uk/basic-usage.md | 46 ---------- docs/guide-uk/images/gii-entry.png | Bin 45302 -> 0 bytes docs/guide-uk/images/gii-preview.png | Bin 41620 -> 0 bytes docs/guide-uk/installation.md | 58 ------------ .../topics-creating-your-own-generators.md | 48 ---------- .../topics-creating-your-own-templates.md | 55 ------------ docs/guide-zh-CN/images/gii-entry.png | Bin 45302 -> 0 bytes docs/guide-zh-CN/images/gii-preview.png | Bin 41620 -> 0 bytes docs/guide/README.md | 28 ++---- docs/guide/{ => en}/basic-usage.md | 9 +- docs/guide/{ => en}/installation.md | 0 docs/guide/en/readme.md | 20 +++++ .../topics-creating-your-own-generators.md | 0 .../topics-creating-your-own-templates.md | 0 docs/guide/images/gii-entry.png | Bin 45302 -> 0 bytes docs/guide/images/gii-preview.png | Bin 41620 -> 0 bytes docs/{guide-ja => guide/ja}/basic-usage.md | 7 +- docs/{guide-ja => guide/ja}/installation.md | 0 .../README.md => guide/ja/readme.md} | 0 .../topics-creating-your-own-generators.md | 0 .../ja}/topics-creating-your-own-templates.md | 0 .../pt-BR}/basic-usage.md | 20 ++--- .../pt-BR}/installation.md | 0 .../README.md => guide/pt-BR/readme.md} | 0 .../topics-creating-your-own-generators.md | 0 .../topics-creating-your-own-templates.md | 0 .../zh-CN}/basic-usage.md | 8 +- .../zh-CN}/installation.md | 0 .../README.md => guide/zh-CN/readme.md} | 0 .../topics-creating-your-own-generators.md | 0 .../topics-creating-your-own-templates.md | 0 docs/{guide-ja => }/images/gii-entry.png | Bin docs/{guide-ja => }/images/gii-preview.png | Bin docs/internals.md | 45 ++++++++++ 47 files changed, 128 insertions(+), 527 deletions(-) delete mode 100644 docs/guide-pt-BR/images/gii-entry.png delete mode 100644 docs/guide-pt-BR/images/gii-preview.png delete mode 100644 docs/guide-ru/README.md delete mode 100644 docs/guide-ru/basic-usage.md delete mode 100644 docs/guide-ru/images/gii-entry.png delete mode 100644 docs/guide-ru/images/gii-preview.png delete mode 100644 docs/guide-ru/installation.md delete mode 100644 docs/guide-ru/topics-creating-your-own-generators.md delete mode 100644 docs/guide-ru/topics-creating-your-own-templates.md delete mode 100644 docs/guide-uk/README.md delete mode 100644 docs/guide-uk/basic-usage.md delete mode 100644 docs/guide-uk/images/gii-entry.png delete mode 100644 docs/guide-uk/images/gii-preview.png delete mode 100644 docs/guide-uk/installation.md delete mode 100644 docs/guide-uk/topics-creating-your-own-generators.md delete mode 100644 docs/guide-uk/topics-creating-your-own-templates.md delete mode 100644 docs/guide-zh-CN/images/gii-entry.png delete mode 100644 docs/guide-zh-CN/images/gii-preview.png rename docs/guide/{ => en}/basic-usage.md (84%) rename docs/guide/{ => en}/installation.md (100%) create mode 100644 docs/guide/en/readme.md rename docs/guide/{ => en}/topics-creating-your-own-generators.md (100%) rename docs/guide/{ => en}/topics-creating-your-own-templates.md (100%) delete mode 100644 docs/guide/images/gii-entry.png delete mode 100644 docs/guide/images/gii-preview.png rename docs/{guide-ja => guide/ja}/basic-usage.md (90%) rename docs/{guide-ja => guide/ja}/installation.md (100%) rename docs/{guide-ja/README.md => guide/ja/readme.md} (100%) rename docs/{guide-ja => guide/ja}/topics-creating-your-own-generators.md (100%) rename docs/{guide-ja => guide/ja}/topics-creating-your-own-templates.md (100%) rename docs/{guide-pt-BR => guide/pt-BR}/basic-usage.md (78%) rename docs/{guide-pt-BR => guide/pt-BR}/installation.md (100%) rename docs/{guide-pt-BR/README.md => guide/pt-BR/readme.md} (100%) rename docs/{guide-pt-BR => guide/pt-BR}/topics-creating-your-own-generators.md (100%) rename docs/{guide-pt-BR => guide/pt-BR}/topics-creating-your-own-templates.md (100%) rename docs/{guide-zh-CN => guide/zh-CN}/basic-usage.md (83%) rename docs/{guide-zh-CN => guide/zh-CN}/installation.md (100%) rename docs/{guide-zh-CN/README.md => guide/zh-CN/readme.md} (100%) rename docs/{guide-zh-CN => guide/zh-CN}/topics-creating-your-own-generators.md (100%) rename docs/{guide-zh-CN => guide/zh-CN}/topics-creating-your-own-templates.md (100%) rename docs/{guide-ja => }/images/gii-entry.png (100%) rename docs/{guide-ja => }/images/gii-preview.png (100%) create mode 100644 docs/internals.md diff --git a/LICENSE.md b/LICENSE.md index bc5674fe..6a920d60 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,17 +1,17 @@ -Copyright © 2008 by Yii Software (https://www.yiiframework.com/) +Copyright © 2008 by Yii Software () All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Yii Software nor the names of its +* Neither the name of Yii Software nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/README.md b/README.md index d0b79e5d..3888c702 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,6 @@ This extension provides a Web-based code generator, called Gii, for [Yii framework](https://www.yiiframework.com) applications. You can use Gii to quickly generate models, forms, modules, CRUD, etc. -For license information check the [LICENSE](LICENSE.md)-file. - -Documentation is at [docs/guide/README.md](docs/guide/README.md). - [![Latest Stable Version](https://poser.pugx.org/yiisoft/yii-gii/v/stable.png)](https://packagist.org/packages/yiisoft/yii-gii) [![Total Downloads](https://poser.pugx.org/yiisoft/yii-gii/downloads.png)](https://packagist.org/packages/yiisoft/yii-gii) [![Build Status](https://github.com/yiisoft/yii-gii/workflows/build/badge.svg)](https://github.com/yiisoft/yii-gii/actions?query=workflow%3Abuild) @@ -21,7 +17,6 @@ Documentation is at [docs/guide/README.md](docs/guide/README.md). [![Mutation testing badge](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fyiisoft%2Fyii-gii%2Fmaster)](https://dashboard.stryker-mutator.io/reports/github.com/yiisoft/yii-gii/master) [![static analysis](https://github.com/yiisoft/yii-gii/workflows/static%20analysis/badge.svg)](https://github.com/yiisoft/yii-gii/actions?query=workflow%3A%22static+analysis%22) - Installation ------------ @@ -77,3 +72,32 @@ yii help gii/model # generate City model from city table yii gii/model --tableName=city --modelClass=City ``` + +## Documentation + +- [Guide](docs/guide/readme.md) +- [Internals](docs/internals.md) + +## Support + +If you need help or have a question, the [Yii Forum](https://forum.yiiframework.com/c/yii-3-0/63) is a good place for that. +You may also check out other [Yii Community Resources](https://www.yiiframework.com/community). + +## Support the project + +[![Open Collective](https://img.shields.io/badge/Open%20Collective-sponsor-7eadf1?logo=open%20collective&logoColor=7eadf1&labelColor=555555)](https://opencollective.com/yiisoft) + +## Follow updates + +[![Official website](https://img.shields.io/badge/Powered_by-Yii_Framework-green.svg?style=flat)](https://www.yiiframework.com/) +[![Twitter](https://img.shields.io/badge/twitter-follow-1DA1F2?logo=twitter&logoColor=1DA1F2&labelColor=555555?style=flat)](https://twitter.com/yiiframework) +[![Telegram](https://img.shields.io/badge/telegram-join-1DA1F2?style=flat&logo=telegram)](https://t.me/yii3en) +[![Facebook](https://img.shields.io/badge/facebook-join-1DA1F2?style=flat&logo=facebook&logoColor=ffffff)](https://www.facebook.com/groups/yiitalk) +[![Slack](https://img.shields.io/badge/slack-join-1DA1F2?style=flat&logo=slack)](https://yiiframework.com/go/slack) + +## License + +The Gii Extension for Yii is free software. It is released under the terms of the BSD License. +Please see [`LICENSE`](./LICENSE.md) for more information. + +Maintained by [Yii Software](https://www.yiiframework.com/). diff --git a/composer.json b/composer.json index fc434ec8..487761ba 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ "issues": "https://github.com/yiisoft/yii-gii/issues", "forum": "https://www.yiiframework.com/forum/", "wiki": "https://www.yiiframework.com/wiki/", - "irc": "irc://irc.freenode.net/yii", + "irc": "ircs://irc.libera.chat:6697/yii", "chat": "https://t.me/yii3en" }, "minimum-stability": "dev", diff --git a/docs/guide-pt-BR/images/gii-entry.png b/docs/guide-pt-BR/images/gii-entry.png deleted file mode 100644 index 0a145f909f622664b5bd709a8d08d34ef5e5093a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45302 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�!ha9!B8Wn0j#sGzj%76GY((wmBch2C3;7$Qmt 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 diff --git a/docs/guide-ru/README.md b/docs/guide-ru/README.md deleted file mode 100644 index f7f4e29e..00000000 --- a/docs/guide-ru/README.md +++ /dev/null @@ -1,20 +0,0 @@ - Gii Yii 2 -======================== - -Gii - - Yii2. -Gii , , , CRUD, .. - -Gii - . - , . - - ---------------- - -* [](installation.md) -* [ ](basic-usage.md) - - ------------------ - -* [ ](topics-creating-your-own-templates.md) -* [ ](topics-creating-your-own-generators.md) diff --git a/docs/guide-ru/basic-usage.md b/docs/guide-ru/basic-usage.md deleted file mode 100644 index f70c7f8f..00000000 --- a/docs/guide-ru/basic-usage.md +++ /dev/null @@ -1,41 +0,0 @@ -Основное использование -=========== - -Когда Вы откроете Gii, на главной странице будут отображены генераторы. - -![Gii entry page](images/gii-entry.png) - -По-умолчанию, доступны следующие генераторы: - -- **Model Generator** - Этот генератор генерирует класс ActiveRecord для выбранной таблицы БД. -- **CRUD Generator** - Этот генератор генерирует контроллер и представления, реализующие операции CRUD (Create, Read, Update, Delete) - для выбранной модели. -- **Controller Generator** - Этот генератор помогает быстро сгенерировать класс контроллера, одно или несколько действий (actions) - и соответствующие им представления. -- **Form Generator** - Этот генератор генерирует файл представления для отображения html-формы с полями, соответствующими модели. -- **Module Generator** - Этот генератор поможет Вам сгенерировать каркас (skeleton code), необходимый для Yii-модуля. -- **Extension Generator** - Этот генератор помогает сгенерировать файлы, необходимые для Yii-расширений. - -После выбора генератора кликом по кнопке "Start" Вы перейдете на форму, которая позволит сконфигурировать -параметры генератора. Заполните форму в соответствии с вашими потребностями и нажмите кнопку "Preview", -чтобы посмотреть код, который Gii собирается сгенерировать. В зависимости от выбранного генератора и наличия -(или отсутствия) генерируемых файлов, Вы увидите что-то подобное изображенному здесь: - -![Gii preview](images/gii-preview.png) - -Кликая на имени файла, посмотрите превью кода, сгенерированного для данного файла. -Когда генерируемый файл уже существует, Gii также покажет и разницу между имеющимся кодом и тем, который будет сгенерирован. -В этом случае, выбор остается за Вами - какие файлы оставить как есть, а какие перезаписать. - -> Tip: При использовании Model-генератора для обновления моделей после изменений в БД, просто скопируйте код из превью и - встройте его в свой код. Вы можете использовать возможности разных IDE: [сравнение с буфером обмена](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html) в PHPStorm, [Aptana Studio](http://www.aptana.com/products/studio3/download). В редакторах, основанных на [Eclipse](https://www.eclipse.org/pdt/) можно [сравнивать код с буфером обмена](https://andrei.gmxhome.de/anyedit/examples.html), используя для этого [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/). Всё это позволит вам объединить только нужные изменения и пропустить изменения, которые заменят уже существующий полезный код. - -После просмотра кода и выбора файлов для генерирования кликните на кнопке "Generate" чтобы создать файлы. Если нет ошибок - на этом всё! -Если появятся ошибки, значит Gii не смог сгенерировать файлы и Вам нужно установить права на запись для директорий, чтобы веб-сервер мог -создать в этих директориях файлы. - -> Note: Код, сгенерированный Gii - всего лишь шаблон, который нужно подстраивать под Ваши нужды. Таким образом, Gii помогает - быстро создавать новый код, но это не полностью готовый к работе код. Часто можно встретить людей, использующих сгенерированные - посредством Gii модели, которые они не изменяли, а просто расширили их (extend) чтобы скорректировать какие-то моменты. Это не - тот подход, которому нужно следовать. Код, сгенерированный Gii может быть неполным или неправильным и прежде чем его использовать, - его необходимо изменить под Ваши потребности. diff --git a/docs/guide-ru/images/gii-entry.png b/docs/guide-ru/images/gii-entry.png deleted file mode 100644 index 0a145f909f622664b5bd709a8d08d34ef5e5093a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45302 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�!ha9!B8Wn0j#sGzj%76GY((wmBch2C3;7$Qmt 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 diff --git a/docs/guide-ru/installation.md b/docs/guide-ru/installation.md deleted file mode 100644 index 14bc9e88..00000000 --- a/docs/guide-ru/installation.md +++ /dev/null @@ -1,85 +0,0 @@ -Установка -============ - -## Установка composer-пакета - -Предпочтительнее установить это расширение через [composer](https://getcomposer.org/download/). - -Либо запустите - -``` -php composer.phar require --dev --prefer-dist yiisoft/yii-gii -``` - -либо добавьте - -``` -"yiisoft/yii-gii": "^3.0@dev" -``` - -в require-dev секцию Вашего файла `composer.json`. - -Теперь Gii доступен по адресу: - -``` -http://localhost/path/to/index.php?r=gii -``` - -Если Вы используете "красивые" адреса (pretty URLs), то используйте такой URL: - -``` -http://localhost/path/to/index.php/gii -``` - -> Note: По-умолчанию, если Вы запускаете gii с ip-адреса, отличного от localhost, доступ к нему будет закрыт. -> Чтобы изменить это поведение, добавьте ip-адреса, которым разрешен доступ, в конфигурацию: -> -```php -'gii' => [ - 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'] // настройте, как Вам нужно здесь - // ... -], -``` -Если Вы настроили Gii аналогичным образом в консольном приложении, Вы сможете таким образом через консоль запустить Gii: - -``` -# измените путь на базовый Вашего приложения -cd path/to/AppBasePath -# эта команда покажет справку Gii -yii help gii -# эта команда покажет справку по генератору Моделей в Gii -yii help gii/model -# сгенерирует модель City из таблицы city -yii gii/model --tableName=city --modelClass=City -``` - -### Basic-приложение - -В шаблоне Basic-приложения структура конфигурации несколько отличается, поэтому Gii должен быть -настроен в `config/web.php`: - -```php -// ... -if (YII_ENV_DEV) { - // configuration adjustments for 'dev' environment - // настройка конфигурации для разработки - $config['bootstrap'][] = 'debug'; - $config['modules']['debug'] = \yii\debug\Module::class; - $config['bootstrap'][] = 'gii'; - $config['modules']['gii'] = \Yiisoft\Yii\Gii\Gii::class; // <--- здесь -} -``` -А для настройки ip-адресов надо сделать следующее: -```php -if (YII_ENV_DEV) { - // configuration adjustments for 'dev' environment - // настройка конфигурации для разработки - $config['bootstrap'][] = 'debug'; - $config['modules']['debug'] = \yii\debug\Module::class; - $config['bootstrap'][] = 'gii'; - $config['modules']['gii'] = [ - 'class' => \Yiisoft\Yii\Gii\Gii::class, - 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'], - ]; -} -``` diff --git a/docs/guide-ru/topics-creating-your-own-generators.md b/docs/guide-ru/topics-creating-your-own-generators.md deleted file mode 100644 index bd25de5b..00000000 --- a/docs/guide-ru/topics-creating-your-own-generators.md +++ /dev/null @@ -1,47 +0,0 @@ -Создание собственных генераторов -============================ - -Откройте папку любого генератора и Вы увидите два файла `form.php` и `Generator.php`. -Первый - это форма, второй - класс генератора. Для того, чтобы создать свой ??генератор, -Вам необходимо создать или переписать эти классы в какой-нибудь другой папке. Также, как -описано в предыдущем разделе, внесите изменения в конфигурацию: - -```php -//config/web.php для basic-приложения -//.. -if (YII_ENV_DEV) { - $config['modules']['gii'] = [ - 'class' => \Yiisoft\Yii\Gii\Gii::class, - 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'], - 'generators' => [ - 'myCrud' => [ - 'class' => \app\myTemplates\crud\Generator::class, - 'templates' => [ - 'my' => '@app/myTemplates/crud/default', - ] - ] - ], - ]; -} -``` - -```php -// @app/myTemplates/crud/Generator.php -modelClass)) ?>-form"> - $form = ActiveForm::begin(); ?> - $form->errorSummary($model) ?> -//... -``` - -Теперь нужно сообщить Gii о нашем шаблоне. Настройте эти строки в конфигурационном файле: - -```php -// config/web.php для basic-приложения -// ... -if (YII_ENV_DEV) { - $config['modules']['gii'] = [ - 'class' => \Yiisoft\Yii\Gii\Gii::class, - 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'], - 'generators' => [ // здесь - 'crud' => [ // название генератора - 'class' => \Yiisoft\Yii\Gii\Generators\Crud\Generator::class, // класс генератора - 'templates' => [ // настройки сторонних шаблонов - 'myCrud' => '@app/myTemplates/crud/default', // имя_шаблона => путь_к_шаблону - ] - ] - ], - ]; -} -``` - -Откройте CRUD и Вы увидите, что в выпадающем списке `Code Template` появился Ваш собственный шаблон. diff --git a/docs/guide-uk/README.md b/docs/guide-uk/README.md deleted file mode 100644 index d68bdb5f..00000000 --- a/docs/guide-uk/README.md +++ /dev/null @@ -1,20 +0,0 @@ -Розширення Gii для Yii 2 -======================== - -Це розширення надає генератор коду для додатків Yii 2, який називається Gii. -Використовуючи Gii, ви можете швидко генерувати моделі, форми, модулі, функціонал CRUD і т. д. - -Gii надає веб-інтерфейс для можливості інтерактивно генерувати код, який ви забажаєте. А також надає -інтерфейс командного рядку для людей, які здебільшого воліють працювати у консолі. - -Початок роботи --------------- - -* [Встановлення](installation.md) -* [Основи використання](basic-usage.md) - -Додаткові теми --------------- - -* [Створення власних шаблонів](topics-creating-your-own-templates.md) -* [Створення власних генераторів](topics-creating-your-own-generators.md) diff --git a/docs/guide-uk/basic-usage.md b/docs/guide-uk/basic-usage.md deleted file mode 100644 index e0313f25..00000000 --- a/docs/guide-uk/basic-usage.md +++ /dev/null @@ -1,46 +0,0 @@ -Основи використання -=================== - -Коли ви відкриваєте Gii, спершу ви бачите початкову сторінку, яка дозволяє вам обрати генератор. - -![Початкова сторінка Gii](images/gii-entry.png) - -За замовчуванням доступні перелічені генератори: - -- **Model Generator** (**Генератор моделі**) - Цей генератор генерує клас ActiveRecord для вказаної таблиці бази даних. -- **CRUD Generator** (**Генератор CRUD**) - Цей генератор генерує контролер і представлення, які реалізовують функціонал операцій CRUD (Create, Read, Update, Delete) - для вказаної моделі даних. -- **Controller Generator** (**Генератор контролера**) - Цей генератор допоможе вам швидко згенерувати новий клас контролера, одну або декілька - дій контролера та їх відповідні представлення. -- **Form Generator** (**Генератор форми**) - Цей генератор генерує файл скрипту представлення, що відображає форму введення інформації - для вказаного класу моделі. -- **Module Generator** (**Генератор модуля**) - Цей генератор допоможе вам згенерувати каркас коду, необхідний для модуля Yii. -- **Extension Generator** (**Генератор розширення**) - Цей генератор допоможе вам згенерувати файли, необхідні для розширення Yii. - -Після вибору генератора натисканням кнопки "Start" ви побачите форму, яка дозволяє вам сконфігурувати -параметри генератора. Заповніть форму відповідно до ваших потреб і натисніть кнопку "Preview" для -перегляду коду, який Gii збирається згенерувати. В залежності від того, який генератор ви обрали та чи файли -вже існують чи ні, ви отримаєте вивід подібний до того, що зображено на наступному зображенні: - -![Попередній перегляд у Gii](images/gii-preview.png) - -Натиснувши на імені файлу, ви можете попередньо переглянути код, який буде згенеровано для цього файлу. -Коли файл вже існує, Gii також забезпечує перегляд відмінностей (diff), який показує відмінності між наявним кодом -та тим, що буде згенеровано. У цьому випадку ви також можете обирати які файли повинні бути перезаписані, а які ні. - -> Підказка: Коли використовуєте генератор моделі для оновлення моделей після змін у базі даних, ви можете скопіювати код із попереднього перегляду Gii - та поєднати зміни з вашим власним кодом. Ви можете використовувати функціонал Інтегрованого Середовища Розробки (IDE), як наприклад, - [порівняння з буфером обміну в PHPStorms](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html). - [Aptana Studio](http://www.aptana.com/products/studio3/download) або редактори на базі [Eclipse](https://www.eclipse.org/pdt/) також дозволяють [порівняння з буфером обміну](https://andrei.gmxhome.de/anyedit/examples.html) при використанні [плагіну інструментів AnyEdit](https://andrei.gmxhome.de/anyedit/) для цього, який дозволяє вам приєднувати актуальні зміни, не враховуючи те, що повторює ваш власний код. - - -Після того, як ви оглянули код та обрали файли для генерування, ви можете натиснути на кнопку "Generate" для створення -файлів. Якщо все пройшло нормально - справу зроблено. Якщо ви бачите помилки про те, що Gii не має можливості згенерувати файли, необхідно -налаштувати права доступу до директорії, щоб ваш веб-сервер мав право на запис до директорій та міг створювати файли. - -> Примітка: Код згенерований за допомогою Gii - це лише шаблон, який необхідно допрацювати для ваших потреб. Призначення генератора - - допомогти вам швидко створювати нові речі, але це не те, що створює готовий до використання код. - Багато хто використовує моделі згенеровані за допомогою Gii без змін та лише розширюють їх для часткового - налаштування. Це не той спосіб, в який потрібно використовувати генератор. Код згенерований за допомогою Gii може бути неповним або неправильним - та повинен бути зміненим для відповідності вашим потребам перед його використанням. - diff --git a/docs/guide-uk/images/gii-entry.png b/docs/guide-uk/images/gii-entry.png deleted file mode 100644 index 0a145f909f622664b5bd709a8d08d34ef5e5093a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45302 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�!ha9!B8Wn0j#sGzj%76GY((wmBch2C3;7$Qmt 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 diff --git a/docs/guide-uk/installation.md b/docs/guide-uk/installation.md deleted file mode 100644 index e751e63e..00000000 --- a/docs/guide-uk/installation.md +++ /dev/null @@ -1,58 +0,0 @@ -Встановлення -============ - -## Встановлення через Composer - -Рекомендується встановлювати це розширення за допомогою [Composer](https://getcomposer.org/download/). - -Виконайте - -``` -php composer.phar require --dev --prefer-dist yiisoft/yii-gii -``` - -або додайте - -``` -"yiisoft/yii-gii": "^3.0@dev" -``` - -до секції require-dev вашого файлу `composer.json`. - -Потім ви можете мати доступ до Gii за наведеною URL-адресою: - -``` -http://localhost/path/to/index.php?r=gii -``` - -Якщо у вас налаштовані гарні URL-адреси, ви можете використовувати наступну адресу: - -``` -http://localhost/path/to/index.php/gii -``` - -> Примітка: якщо ви звертаєтеся до Gii з IP-адреси відмінної від localhost, доступ буде заборонений за замовчуванням. -> Для обходу цієї заборони, додайте дозволені IP-адреси до конфігурації: -> -```php -'gii' => [ - 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'] // налаштувати для ваших потреб - // ... -], -``` -Якщо ви так само налаштували Gii у конфігурації вашого консольного додатку, то можете також мати доступ до Gii з -вікна терміналу, як показано нижче: - -``` -# перейти до базової директорії додатку -cd path/to/AppBasePath - -# показати допоміжну інформацію про Gii -yii help gii - -# показати допоміжну інформацію про генератор моделі у Gii -yii help gii/model - -# згенерувати модель City з таблиці city -yii gii/model --tableName=city --modelClass=City -``` diff --git a/docs/guide-uk/topics-creating-your-own-generators.md b/docs/guide-uk/topics-creating-your-own-generators.md deleted file mode 100644 index 6ef3393e..00000000 --- a/docs/guide-uk/topics-creating-your-own-generators.md +++ /dev/null @@ -1,48 +0,0 @@ -Створення власних генераторів -============================= - -Відкрийте каталог будь-якого генератора й ви побачите два файли `form.php` і `Generator.php`. -Перший - це форма, другий - клас генератора. Для того, щоб створити ваш власний генератор, вам необхідно створити або -перевизначити ці класи у будь-якому каталозі. Знову, як і в попередньому розділі налаштуйте конфігурацію: - -```php -// config/web.php у базовому додатку -// ... -if (YII_ENV_DEV) { - $config['modules']['gii'] = [ - 'class' => Yiisoft\Yii\Gii\Gii::class, - 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'], - 'generators' => [ - 'myCrud' => [ - 'class' => app\myTemplates\crud\Generator::class, - 'templates' => [ - 'my' => '@app/myTemplates/crud/default', - ] - ] - ], - ]; -} -``` - -```php -// @app/myTemplates/crud/Generator.php -modelClass)) ?>-form"> - - $form = ActiveForm::begin(); ?> - $form->errorSummary($model) ?> -//... -``` - -Тепер вам необхідно розповісти Gii про ваш шаблон. Налаштування робиться у файлі конфігурації: - -```php -// config/web.php у базовому додатку -// ... -if (YII_ENV_DEV) { - $config['modules']['gii'] = [ - 'class' => Yiisoft\Yii\Gii\Gii::class, - 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'], - 'generators' => [ // тут - 'crud' => [ // ім’я генератора - 'class' => Yiisoft\Yii\Gii\Generators\Crud\Generator::class, // клас генератора - 'templates' => [ // налаштування сторонніх шаблонів - 'myCrud' => '@app/myTemplates/crud/default', // ім’я шаблону => шлях до шаблону - ] - ] - ], - ]; -} -``` - -Відкрийте генератор CRUD й ви побачите, що у полі форми `Code Template` з’явився ваш власний шаблон. diff --git a/docs/guide-zh-CN/images/gii-entry.png b/docs/guide-zh-CN/images/gii-entry.png deleted file mode 100644 index 0a145f909f622664b5bd709a8d08d34ef5e5093a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45302 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�!ha9!B8Wn0j#sGzj%76GY((wmBch2C3;7$Qmt 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 diff --git a/docs/guide/README.md b/docs/guide/README.md index 51451ae4..8c9f3a81 100644 --- a/docs/guide/README.md +++ b/docs/guide/README.md @@ -1,20 +1,8 @@ -Gii Extension for Yii 2 -======================== - -This extension provides a Web-based code generator, called Gii, for Yii 2 applications. -You can use Gii to quickly generate models, forms, modules, CRUD, etc. - -Gii provides a Web-based interface for you to interactively generate the code you want. It also provides a -command line interface for people who prefer to work with their console windows most of the time. - -Getting Started ---------------- - -* [Installation](installation.md) -* [Basic Usage](basic-usage.md) - -Additional topics ------------------ - -* [Creating your own templates](topics-creating-your-own-templates.md) -* [Creating your own generators](topics-creating-your-own-generators.md) +# Gii Extension for Yii + +- [中国人](zh-CN/readme.md) +- [English](en/readme.md) +- [日本語](ja/readme.md) +- [Português - Brasil](pt-BR/readme.md) +- [Русский](ru/readme.md) +- [Internals](../internals.md) diff --git a/docs/guide/basic-usage.md b/docs/guide/en/basic-usage.md similarity index 84% rename from docs/guide/basic-usage.md rename to docs/guide/en/basic-usage.md index 5d8a5a23..ccfbfd7c 100644 --- a/docs/guide/basic-usage.md +++ b/docs/guide/en/basic-usage.md @@ -3,7 +3,7 @@ Basic Usage When you open Gii you first see the entry page that lets you choose a generator. -![Gii entry page](images/gii-entry.png) +![Gii entry page](../../images/gii-entry.png) By default there are the following generators available: @@ -22,7 +22,7 @@ parameters of the generator. Fill out the form according to your needs and press preview of the code that Gii is about to generate. Depending on the generator you chose and whether the files already existed or not, you will get an output similar to what you see in the following picture: -![Gii preview](images/gii-preview.png) +![Gii preview](../../images/gii-preview.png) Clicking on the file name you can view a preview of the code that will be generated for that file. When the file already exists, Gii also provides a diff view that shows what is different between the code that exists @@ -30,9 +30,8 @@ and the one that will be generated. In this case you can also choose which files > Tip: When using the Model Generator to update models after database change, you can copy the code from Gii preview and merge the changes with your own code. You can use IDE features like PHPStorms - [compare with clipboard](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html), [Aptana Studio](http://www.aptana.com/products/studio3/download) or [Eclipse](https://www.eclipse.org/pdt/) based editor also allows [compare with clipboard](https://andrei.gmxhome.de/anyedit/examples.html) by using [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/) for this, which allows you to merge in relevant changes and leave out others that may revert your own code. + [compare with clipboard](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html), [Aptana Studio](https://www.aptana.com/products/studio3/download) or [Eclipse](https://www.eclipse.org/pdt/) based editor also allows [compare with clipboard](https://andrei.gmxhome.de/anyedit/examples.html) by using [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/) for this, which allows you to merge in relevant changes and leave out others that may revert your own code. - After you have reviewed the code and selected the files to be generated you can click the "Generate" button to create the files. If all went fine you are done. When you see errors that Gii is not able to generate the files you have to adjust directory permissions so that your webserver is able to write to the directories and create the files. @@ -42,4 +41,4 @@ adjust directory permissions so that your webserver is able to write to the dire We often see people using the models generated by Gii without change and just extend them to adjust some parts of it. This is not how it is meant to be used. Code generated by Gii may be incomplete or incorrect and has to be changed to fit your needs before you can use it. - + \ No newline at end of file diff --git a/docs/guide/installation.md b/docs/guide/en/installation.md similarity index 100% rename from docs/guide/installation.md rename to docs/guide/en/installation.md diff --git a/docs/guide/en/readme.md b/docs/guide/en/readme.md new file mode 100644 index 00000000..51451ae4 --- /dev/null +++ b/docs/guide/en/readme.md @@ -0,0 +1,20 @@ +Gii Extension for Yii 2 +======================== + +This extension provides a Web-based code generator, called Gii, for Yii 2 applications. +You can use Gii to quickly generate models, forms, modules, CRUD, etc. + +Gii provides a Web-based interface for you to interactively generate the code you want. It also provides a +command line interface for people who prefer to work with their console windows most of the time. + +Getting Started +--------------- + +* [Installation](installation.md) +* [Basic Usage](basic-usage.md) + +Additional topics +----------------- + +* [Creating your own templates](topics-creating-your-own-templates.md) +* [Creating your own generators](topics-creating-your-own-generators.md) diff --git a/docs/guide/topics-creating-your-own-generators.md b/docs/guide/en/topics-creating-your-own-generators.md similarity index 100% rename from docs/guide/topics-creating-your-own-generators.md rename to docs/guide/en/topics-creating-your-own-generators.md diff --git a/docs/guide/topics-creating-your-own-templates.md b/docs/guide/en/topics-creating-your-own-templates.md similarity index 100% rename from docs/guide/topics-creating-your-own-templates.md rename to docs/guide/en/topics-creating-your-own-templates.md diff --git a/docs/guide/images/gii-entry.png b/docs/guide/images/gii-entry.png deleted file mode 100644 index 0a145f909f622664b5bd709a8d08d34ef5e5093a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45302 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�!ha9!B8Wn0j#sGzj%76GY((wmBch2C3;7$Qmt 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 diff --git a/docs/guide-ja/basic-usage.md b/docs/guide/ja/basic-usage.md similarity index 90% rename from docs/guide-ja/basic-usage.md rename to docs/guide/ja/basic-usage.md index 67ec115c..d86dd097 100644 --- a/docs/guide-ja/basic-usage.md +++ b/docs/guide/ja/basic-usage.md @@ -3,7 +3,7 @@ Gii にアクセスすると、最初に、ジェネレータを選択できるエントリ・ページが開かれます。 -![Gii エントリ・ページ](images/gii-entry.png) +![Gii エントリ・ページ](../../images/gii-entry.png) デフォルトでは、以下のジェネレータを利用できます。 @@ -18,7 +18,7 @@ Gii にアクセスすると、最初に、ジェネレータを選択できる あなたの要求を満たすようにフォームに入力して "Preview" ボタンをクリックすると、Gii が生成しようとしているコードのプレビューが出来ます。 選択したジェネレータや、既存のファイルの有無によって多少異なりますが、次の画像で見るのと同じような出力が得られます。 -![Gii プレビュー](images/gii-preview.png) +![Gii プレビュー](../../images/gii-preview.png) ファイル名をクリックすると、そのファイルのために生成されるコードのプレビューを見ることが出来ます。 ファイルが既に存在する場合は、既存のコードと生成されるコードのどこが異なるかを示す差分ビューも提供されます。 @@ -26,7 +26,7 @@ Gii にアクセスすると、最初に、ジェネレータを選択できる > Tip: データベースに変更を加えた後で、モデル・ジェネレータを使ってモデルを更新したい場合は、Gii のプレビューからコードをコピーして、あなたのコードに変更をマージすることが出来ます。 PHPStorm の [クリップボードと比較](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html) のような IDE の機能を使うと良いでしょう。 -[Aptana Studio](http://www.aptana.com/products/studio3/download) や [Eclipse](https://www.eclipse.org/pdt/) ベースのエディタも [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/) を使って [クリップボードと比較](https://andrei.gmxhome.de/anyedit/examples.html) をすることが出来ます。 +[Aptana Studio](https://www.aptana.com/products/studio3/download) や [Eclipse](https://www.eclipse.org/pdt/) ベースのエディタも [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/) を使って [クリップボードと比較](https://andrei.gmxhome.de/anyedit/examples.html) をすることが出来ます。 この機能を使うと、関係のある変更だけを取り込んで、あなた自身のコードを取り消すような他の変更は放っておくことが出来ます。 コードをレビューして、生成すべきファイルを選択し、"Generate" ボタンをクリックするとファイルが生成されます。 @@ -38,4 +38,3 @@ Gii がファイルを生成できないというエラーが出た場合は、 Gii によって生成されたモデルを変更せずに、ちょっとした所だけを修正して使っている人をよく見かけます。 これは、意図されている Gii の使い方ではありません。 Gii によって生成されるコードは不完全であったり、間違っていたりする可能性があるもので、あなたの要求を満たすように変更して初めて使用できるようになるものです。 - diff --git a/docs/guide-ja/installation.md b/docs/guide/ja/installation.md similarity index 100% rename from docs/guide-ja/installation.md rename to docs/guide/ja/installation.md diff --git a/docs/guide-ja/README.md b/docs/guide/ja/readme.md similarity index 100% rename from docs/guide-ja/README.md rename to docs/guide/ja/readme.md diff --git a/docs/guide-ja/topics-creating-your-own-generators.md b/docs/guide/ja/topics-creating-your-own-generators.md similarity index 100% rename from docs/guide-ja/topics-creating-your-own-generators.md rename to docs/guide/ja/topics-creating-your-own-generators.md diff --git a/docs/guide-ja/topics-creating-your-own-templates.md b/docs/guide/ja/topics-creating-your-own-templates.md similarity index 100% rename from docs/guide-ja/topics-creating-your-own-templates.md rename to docs/guide/ja/topics-creating-your-own-templates.md diff --git a/docs/guide-pt-BR/basic-usage.md b/docs/guide/pt-BR/basic-usage.md similarity index 78% rename from docs/guide-pt-BR/basic-usage.md rename to docs/guide/pt-BR/basic-usage.md index 854b26ec..2b7c8b6a 100644 --- a/docs/guide-pt-BR/basic-usage.md +++ b/docs/guide/pt-BR/basic-usage.md @@ -3,17 +3,17 @@ Uso Básico Quando você abre Gii, você verá primeiro a página de entrada que lhe permite escolher um gerador. -![Gii entry page](images/gii-entry.png) +![Gii entry page](../../images/gii-entry.png) Por padrão, existem os seguintes geradores disponíveis: - **Model Generator** - Este gerador gera uma classe ActiveRecord para a tabela de banco de dados especificada. -- **CRUD Generator** - Este gerador gera um controlador e views que implementam CRUD (Create, Read, Update, Delete ou Criar, Recuperar, Atualizar e Deletar) das - operações para o modelo de dados especificado. +- **CRUD Generator** - Este gerador gera um controlador e views que implementam CRUD (Create, Read, Update, Delete ou Criar, Recuperar, Atualizar e Deletar) das + operações para o modelo de dados especificado. - **Controller Generator** - Este gerador ajuda a gerar rapidamente uma nova classe de controlador, um ou mais - ações do controlador para as views correspondentes. + ações do controlador para as views correspondentes. - **Form Generator** - Este gerador gera um arquivo view que exibe um formulário para receber dados para a - classe de modelo especificado. + classe de modelo especificado. - **Module Generator** - Este gerador ajuda a gerar o esqueleto necessário por um módulo Yii. - **Extension Generator** - Este gerador ajuda a gerar os arquivos necessários por uma extensão Yii. @@ -22,22 +22,22 @@ parâmetros do gerador. Preencha o formulário de acordo com as suas necessidade pré-visualização do código que o GII está prestes a gerar. Dependendo do gerador que você escolheu e/ou se os arquivos já existiam ou não, você vai ter uma tela semelhante ao que você vê na figura abaixo: -![Gii preview](images/gii-preview.png) +![Gii preview](../../images/gii-preview.png) Clicando sobre o nome do arquivo que você poderá ver um preview do código que será gerado para o arquivo. Quando o arquivo já existe, o Gii fornece uma visão diff que mostra o que é diferente entre o código que existe e o que vai ser gerado. Neste caso, você também pode escolher quais arquivos devem ser substituídos. -> Dica: Ao utilizar o Modelo Generator para atualizar modelos após a mudança de banco de dados, você pode copiar o código da pré-visualização do Gii +> Dica: Ao utilizar o Modelo Generator para atualizar modelos após a mudança de banco de dados, você pode copiar o código da pré-visualização do Gii e mesclar as alterações com o seu próprio código. Você pode usar recursos de uma IDE como PHPStorms. - [compare with clipboard](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html), [Aptana Studio](http://www.aptana.com/products/studio3/download) ou [Eclipse](https://www.eclipse.org/pdt/) based também permitem [compare with clipboard](https://andrei.gmxhome.de/anyedit/examples.html) por usar [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/) para isso, que lhe permite unir as mudanças relevantes e deixar de fora outros que podem reverter o seu próprio código. + [compare with clipboard](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html), [Aptana Studio](https://www.aptana.com/products/studio3/download) ou [Eclipse](https://www.eclipse.org/pdt/) based também permitem [compare with clipboard](https://andrei.gmxhome.de/anyedit/examples.html) por usar [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/) para isso, que lhe permite unir as mudanças relevantes e deixar de fora outros que podem reverter o seu próprio código. Depois de revisar o código e selecionar os arquivos a serem gerados você pode clicar no botão "Gerar" para criar os arquivos. Se tudo correu bem está pronto. Quando você vê erros que Gii não é capaz de gerar os arquivos e que você tem que ajustar as permissões do diretório do seu servidor web permitindo ser capaz de escrever para os diretórios desejados e para criar os arquivos. -> Nota: O código gerado pelo Gii é apenas um template que tem que ser ajustado às suas necessidades. Isto é uma ajuda +> Nota: O código gerado pelo Gii é apenas um template que tem que ser ajustado às suas necessidades. Isto é uma ajuda para você criar novas coisas mais rapidamente mas não é algo que cria código pronto para uso. Muitas vezes vemos pessoas que utilizam os modelos gerados pelo GII, sem alteração e basta apenas estendê-los para ajustar algumas partes dele. Esta não é a forma para ele ser usado. Código gerado pelo GII é incompleto, ou incorreto, de deve ser alterado para atender às suas necessidades de que que você possa usa-lo realmente. - + \ No newline at end of file diff --git a/docs/guide-pt-BR/installation.md b/docs/guide/pt-BR/installation.md similarity index 100% rename from docs/guide-pt-BR/installation.md rename to docs/guide/pt-BR/installation.md diff --git a/docs/guide-pt-BR/README.md b/docs/guide/pt-BR/readme.md similarity index 100% rename from docs/guide-pt-BR/README.md rename to docs/guide/pt-BR/readme.md diff --git a/docs/guide-pt-BR/topics-creating-your-own-generators.md b/docs/guide/pt-BR/topics-creating-your-own-generators.md similarity index 100% rename from docs/guide-pt-BR/topics-creating-your-own-generators.md rename to docs/guide/pt-BR/topics-creating-your-own-generators.md diff --git a/docs/guide-pt-BR/topics-creating-your-own-templates.md b/docs/guide/pt-BR/topics-creating-your-own-templates.md similarity index 100% rename from docs/guide-pt-BR/topics-creating-your-own-templates.md rename to docs/guide/pt-BR/topics-creating-your-own-templates.md diff --git a/docs/guide-zh-CN/basic-usage.md b/docs/guide/zh-CN/basic-usage.md similarity index 83% rename from docs/guide-zh-CN/basic-usage.md rename to docs/guide/zh-CN/basic-usage.md index 0fbbed10..4413ee7a 100644 --- a/docs/guide-zh-CN/basic-usage.md +++ b/docs/guide/zh-CN/basic-usage.md @@ -3,7 +3,7 @@ 打开 Gii 时,首先进入到引导页,此处可以选择一种代码生成器。 -![Gii entry page](images/gii-entry.png) +![Gii entry page](../../images/gii-entry.png) 默认有以下生成器可用: @@ -16,14 +16,14 @@ 通过单击 "Start" 按钮选择生成器后,将看到一个表单,允许配置生成器的参数。 根据需要填写表单,然后按 "Preview" 按钮获取 Gii 将要生成的代码的预览。 根据选择的生成器以及文件是否已经存在,将得到类似于下图所示的输出: -![Gii preview](images/gii-preview.png) +![Gii preview](../../images/gii-preview.png) 单击文件名可以查看将为该文件生成的代码的预览。 当文件已经存在时,Gii 还提供了一个 diff 视图,它显示了存在的代码和将要生成的代码之间的区别。 在这种情况下,还可以选择应覆盖哪些文件,哪些不覆盖。 -> 提示:在使用模型生成器在数据库更改后更新模型时,可以从 Gii 预览复制代码,并将更改与您自己的代码合并。可以使用IDE功能,如 PHPStorms [compare with clipboard(与剪贴板比较)](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html),[Aptana Studio](http://www.aptana.com/products/studio3/download) 或者使用 [Eclipse](https://www.eclipse.org/pdt/) 通过 [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/) 也允许 [compare with clipboard(与剪贴板比较)](https://andrei.gmxhome.de/anyedit/examples.html),这样可以合并相关的更改,并省略其他可能被自己还原的代码。 +> 提示:在使用模型生成器在数据库更改后更新模型时,可以从 Gii 预览复制代码,并将更改与您自己的代码合并。可以使用IDE功能,如 PHPStorms [compare with clipboard(与剪贴板比较)](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html),[Aptana Studio](https://www.aptana.com/products/studio3/download) 或者使用 [Eclipse](https://www.eclipse.org/pdt/) 通过 [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/) 也允许 [compare with clipboard(与剪贴板比较)](https://andrei.gmxhome.de/anyedit/examples.html),这样可以合并相关的更改,并省略其他可能被自己还原的代码。 在检查代码并选择要生成的文件后,可以单击 "Generate" 按钮创建文件即可。 如果看到Gii无法生成文件的错误时,则需调整目录权限,以便的Web服务器能够写入目录并创建文件。 > 注意:Gii 生成的代码只是一个根据自己的需要进行调整的模板。 它可以帮助你快速创建新的代码,但它不是创建准备使用于正式项目的代码。我们经常看到人们使用 Gii 生成的 model 没有改变,只是通过扩展它们从而调整部分 model 的功能。 这不是我们编写它的初衷。 Gii 生成的代码可能不完整或不正确,必须根据自己的需要进行更改才能使用它。 - + \ No newline at end of file diff --git a/docs/guide-zh-CN/installation.md b/docs/guide/zh-CN/installation.md similarity index 100% rename from docs/guide-zh-CN/installation.md rename to docs/guide/zh-CN/installation.md diff --git a/docs/guide-zh-CN/README.md b/docs/guide/zh-CN/readme.md similarity index 100% rename from docs/guide-zh-CN/README.md rename to docs/guide/zh-CN/readme.md diff --git a/docs/guide-zh-CN/topics-creating-your-own-generators.md b/docs/guide/zh-CN/topics-creating-your-own-generators.md similarity index 100% rename from docs/guide-zh-CN/topics-creating-your-own-generators.md rename to docs/guide/zh-CN/topics-creating-your-own-generators.md diff --git a/docs/guide-zh-CN/topics-creating-your-own-templates.md b/docs/guide/zh-CN/topics-creating-your-own-templates.md similarity index 100% rename from docs/guide-zh-CN/topics-creating-your-own-templates.md rename to docs/guide/zh-CN/topics-creating-your-own-templates.md diff --git a/docs/guide-ja/images/gii-entry.png b/docs/images/gii-entry.png similarity index 100% rename from docs/guide-ja/images/gii-entry.png rename to docs/images/gii-entry.png diff --git a/docs/guide-ja/images/gii-preview.png b/docs/images/gii-preview.png similarity index 100% rename from docs/guide-ja/images/gii-preview.png rename to docs/images/gii-preview.png diff --git a/docs/internals.md b/docs/internals.md new file mode 100644 index 00000000..8dc4049f --- /dev/null +++ b/docs/internals.md @@ -0,0 +1,45 @@ +# Internals + +## Unit testing + +The package is tested with [PHPUnit](https://phpunit.de/). To run tests: + +```shell +./vendor/bin/phpunit +``` + +## Mutation testing + +The package tests are checked with [Infection](https://infection.github.io/) mutation framework with +[Infection Static Analysis Plugin](https://github.com/Roave/infection-static-analysis-plugin). To run it: + +```shell +./vendor/bin/roave-infection-static-analysis-plugin +``` + +## Static analysis + +The code is statically analyzed with [Psalm](https://psalm.dev/). To run static analysis: + +```shell +./vendor/bin/psalm +``` + +## Rector + +Use [Rector](https://github.com/rectorphp/rector) to make codebase follow some specific rules or +use either newest or any specific version of PHP: + +```shell +./vendor/bin/rector +``` + +## Composer require checker + +This package uses [composer-require-checker](https://github.com/maglnet/ComposerRequireChecker) to check if all dependencies are correctly defined in `composer.json`. + +To run the checker, execute the following command: + +```shell +./vendor/bin/composer-require-checker +``` From 4ac39abeccb89f0ccede52b550907ea907bcf6d8 Mon Sep 17 00:00:00 2001 From: Luiz Marin <67489841+luizcmarin@users.noreply.github.com> Date: Wed, 15 May 2024 05:20:04 -0300 Subject: [PATCH 27/29] Fix docs (#127) Co-authored-by: Sergei Predvoditelev --- LICENSE.md | 6 +- README.md | 42 ++++----- docs/guide/README.md | 11 ++- docs/guide/en/{readme.md => README.md} | 0 docs/guide/ja/{readme.md => README.md} | 0 docs/guide/pt-BR/{readme.md => README.md} | 0 docs/guide/ru/README.md | 20 +++++ docs/guide/ru/basic-usage.md | 41 +++++++++ docs/guide/ru/installation.md | 85 +++++++++++++++++++ .../ru/topics-creating-your-own-generators.md | 47 ++++++++++ .../ru/topics-creating-your-own-templates.md | 54 ++++++++++++ docs/guide/zh-CN/{readme.md => README.md} | 0 docs/internals.md | 12 +-- 13 files changed, 277 insertions(+), 41 deletions(-) rename docs/guide/en/{readme.md => README.md} (100%) rename docs/guide/ja/{readme.md => README.md} (100%) rename docs/guide/pt-BR/{readme.md => README.md} (100%) create mode 100644 docs/guide/ru/README.md create mode 100644 docs/guide/ru/basic-usage.md create mode 100644 docs/guide/ru/installation.md create mode 100644 docs/guide/ru/topics-creating-your-own-generators.md create mode 100644 docs/guide/ru/topics-creating-your-own-templates.md rename docs/guide/zh-CN/{readme.md => README.md} (100%) diff --git a/LICENSE.md b/LICENSE.md index 6a920d60..c48bcea7 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -5,13 +5,13 @@ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -* Neither the name of Yii Software nor the names of its + * Neither the name of Yii Software nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/README.md b/README.md index 3888c702..7db7e6c2 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,6 @@

-This extension provides a Web-based code generator, called Gii, for [Yii framework](https://www.yiiframework.com) applications. -You can use Gii to quickly generate models, forms, modules, CRUD, etc. - [![Latest Stable Version](https://poser.pugx.org/yiisoft/yii-gii/v/stable.png)](https://packagist.org/packages/yiisoft/yii-gii) [![Total Downloads](https://poser.pugx.org/yiisoft/yii-gii/downloads.png)](https://packagist.org/packages/yiisoft/yii-gii) [![Build Status](https://github.com/yiisoft/yii-gii/workflows/build/badge.svg)](https://github.com/yiisoft/yii-gii/actions?query=workflow%3Abuild) @@ -17,17 +14,22 @@ You can use Gii to quickly generate models, forms, modules, CRUD, etc. [![Mutation testing badge](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fyiisoft%2Fyii-gii%2Fmaster)](https://dashboard.stryker-mutator.io/reports/github.com/yiisoft/yii-gii/master) [![static analysis](https://github.com/yiisoft/yii-gii/workflows/static%20analysis/badge.svg)](https://github.com/yiisoft/yii-gii/actions?query=workflow%3A%22static+analysis%22) -Installation ------------- +This extension provides a Web-based code generator, called Gii, for [Yii framework](https://www.yiiframework.com) applications. +You can use Gii to quickly generate models, forms, modules, CRUD, etc. + +## Requirements + +- PHP 8.1 or higher. -The preferred way to install this extension is through [composer](https://getcomposer.org/download/). +## Installation + +The package could be installed with [Composer](https://getcomposer.org): ```shell composer require yiisoft/yii-gii ``` -Usage ------ +## General usage Once the extension is installed, simply modify your application configuration as follows: @@ -46,20 +48,20 @@ return [ You can then access Gii through the following URL: -``` +```text http://localhost/path/to/index.php?r=gii ``` or if you have enabled pretty URLs, you may use the following URL: -``` +```text http://localhost/path/to/index.php/gii ``` Using the same configuration for your console application, you will also be able to access Gii via command line as follows, -``` +```shell # change path to your application's base path cd path/to/AppBasePath @@ -75,14 +77,19 @@ yii gii/model --tableName=city --modelClass=City ## Documentation -- [Guide](docs/guide/readme.md) +- Guide: [English](docs/guide/en/README.md), [中国人](docs/guide/zh-CN/README.md), [日本語](docs/guide/ja/README.md), [Português - Brasil](docs/guide/pt-BR/README.md), [Русский](docs/guide/ru/README.md) - [Internals](docs/internals.md) -## Support - If you need help or have a question, the [Yii Forum](https://forum.yiiframework.com/c/yii-3-0/63) is a good place for that. You may also check out other [Yii Community Resources](https://www.yiiframework.com/community). +## License + +The Gii Extension for Yii is free software. It is released under the terms of the BSD License. +Please see [`LICENSE`](./LICENSE.md) for more information. + +Maintained by [Yii Software](https://www.yiiframework.com/). + ## Support the project [![Open Collective](https://img.shields.io/badge/Open%20Collective-sponsor-7eadf1?logo=open%20collective&logoColor=7eadf1&labelColor=555555)](https://opencollective.com/yiisoft) @@ -94,10 +101,3 @@ You may also check out other [Yii Community Resources](https://www.yiiframework. [![Telegram](https://img.shields.io/badge/telegram-join-1DA1F2?style=flat&logo=telegram)](https://t.me/yii3en) [![Facebook](https://img.shields.io/badge/facebook-join-1DA1F2?style=flat&logo=facebook&logoColor=ffffff)](https://www.facebook.com/groups/yiitalk) [![Slack](https://img.shields.io/badge/slack-join-1DA1F2?style=flat&logo=slack)](https://yiiframework.com/go/slack) - -## License - -The Gii Extension for Yii is free software. It is released under the terms of the BSD License. -Please see [`LICENSE`](./LICENSE.md) for more information. - -Maintained by [Yii Software](https://www.yiiframework.com/). diff --git a/docs/guide/README.md b/docs/guide/README.md index 8c9f3a81..87fa001e 100644 --- a/docs/guide/README.md +++ b/docs/guide/README.md @@ -1,8 +1,7 @@ # Gii Extension for Yii -- [中国人](zh-CN/readme.md) -- [English](en/readme.md) -- [日本語](ja/readme.md) -- [Português - Brasil](pt-BR/readme.md) -- [Русский](ru/readme.md) -- [Internals](../internals.md) +- [中国人](zh-CN/README.md) +- [English](en/README.md) +- [日本語](ja/README.md) +- [Português - Brasil](pt-BR/README.md) +- [Русский](ru/README.md) diff --git a/docs/guide/en/readme.md b/docs/guide/en/README.md similarity index 100% rename from docs/guide/en/readme.md rename to docs/guide/en/README.md diff --git a/docs/guide/ja/readme.md b/docs/guide/ja/README.md similarity index 100% rename from docs/guide/ja/readme.md rename to docs/guide/ja/README.md diff --git a/docs/guide/pt-BR/readme.md b/docs/guide/pt-BR/README.md similarity index 100% rename from docs/guide/pt-BR/readme.md rename to docs/guide/pt-BR/README.md diff --git a/docs/guide/ru/README.md b/docs/guide/ru/README.md new file mode 100644 index 00000000..0b2bfe28 --- /dev/null +++ b/docs/guide/ru/README.md @@ -0,0 +1,20 @@ +���������� Gii ��� Yii 2 +======================== + +Gii - ��� ���-���������� ��� ������������� ���� � ����������� Yii2. +Gii ��������� ��� ������ ������������� ������, �����, ������, CRUD, � �.�. + +Gii ������������� ���-��������� ��� �������������� �������� ����. ��� ���������� ����� +������������� ���������� ��������� ������ ��� ���, ��� � �������� ������������ �������� � �������. + +�������� +--------------- + +* [���������](installation.md) +* [�������� �������������](basic-usage.md) + +�������������� ���� +----------------- + +* [�������� ����������� ��������](topics-creating-your-own-templates.md) +* [�������� ����������� �����������](topics-creating-your-own-generators.md) diff --git a/docs/guide/ru/basic-usage.md b/docs/guide/ru/basic-usage.md new file mode 100644 index 00000000..e132d009 --- /dev/null +++ b/docs/guide/ru/basic-usage.md @@ -0,0 +1,41 @@ +Основное использование +=========== + +Когда Вы откроете Gii, на главной странице будут отображены генераторы. + +![Gii entry page](../../images/gii-entry.png) + +По-умолчанию, доступны следующие генераторы: + +- **Model Generator** - Этот генератор генерирует класс ActiveRecord для выбранной таблицы БД. +- **CRUD Generator** - Этот генератор генерирует контроллер и представления, реализующие операции CRUD (Create, Read, Update, Delete) + для выбранной модели. +- **Controller Generator** - Этот генератор помогает быстро сгенерировать класс контроллера, одно или несколько действий (actions) + и соответствующие им представления. +- **Form Generator** - Этот генератор генерирует файл представления для отображения html-формы с полями, соответствующими модели. +- **Module Generator** - Этот генератор поможет Вам сгенерировать каркас (skeleton code), необходимый для Yii-модуля. +- **Extension Generator** - Этот генератор помогает сгенерировать файлы, необходимые для Yii-расширений. + +После выбора генератора кликом по кнопке "Start" Вы перейдете на форму, которая позволит сконфигурировать +параметры генератора. Заполните форму в соответствии с вашими потребностями и нажмите кнопку "Preview", +чтобы посмотреть код, который Gii собирается сгенерировать. В зависимости от выбранного генератора и наличия +(или отсутствия) генерируемых файлов, Вы увидите что-то подобное изображенному здесь: + +![Gii preview](../../images/gii-preview.png) + +Кликая на имени файла, посмотрите превью кода, сгенерированного для данного файла. +Когда генерируемый файл уже существует, Gii также покажет и разницу между имеющимся кодом и тем, который будет сгенерирован. +В этом случае, выбор остается за Вами - какие файлы оставить как есть, а какие перезаписать. + +> Tip: При использовании Model-генератора для обновления моделей после изменений в БД, просто скопируйте код из превью и + встройте его в свой код. Вы можете использовать возможности разных IDE: [сравнение с буфером обмена](https://www.jetbrains.com/help/phpstorm/comparing-files-and-folders.html) в PHPStorm, [Aptana Studio](http://www.aptana.com/products/studio3/download). В редакторах, основанных на [Eclipse](https://www.eclipse.org/pdt/) можно [сравнивать код с буфером обмена](https://andrei.gmxhome.de/anyedit/examples.html), используя для этого [AnyEdit tools plugin](https://andrei.gmxhome.de/anyedit/). Всё это позволит вам объединить только нужные изменения и пропустить изменения, которые заменят уже существующий полезный код. + +После просмотра кода и выбора файлов для генерирования кликните на кнопке "Generate" чтобы создать файлы. Если нет ошибок - на этом всё! +Если появятся ошибки, значит Gii не смог сгенерировать файлы и Вам нужно установить права на запись для директорий, чтобы веб-сервер мог +создать в этих директориях файлы. + +> Note: Код, сгенерированный Gii - всего лишь шаблон, который нужно подстраивать под Ваши нужды. Таким образом, Gii помогает + быстро создавать новый код, но это не полностью готовый к работе код. Часто можно встретить людей, использующих сгенерированные + посредством Gii модели, которые они не изменяли, а просто расширили их (extend) чтобы скорректировать какие-то моменты. Это не + тот подход, которому нужно следовать. Код, сгенерированный Gii может быть неполным или неправильным и прежде чем его использовать, + его необходимо изменить под Ваши потребности. diff --git a/docs/guide/ru/installation.md b/docs/guide/ru/installation.md new file mode 100644 index 00000000..14bc9e88 --- /dev/null +++ b/docs/guide/ru/installation.md @@ -0,0 +1,85 @@ +Установка +============ + +## Установка composer-пакета + +Предпочтительнее установить это расширение через [composer](https://getcomposer.org/download/). + +Либо запустите + +``` +php composer.phar require --dev --prefer-dist yiisoft/yii-gii +``` + +либо добавьте + +``` +"yiisoft/yii-gii": "^3.0@dev" +``` + +в require-dev секцию Вашего файла `composer.json`. + +Теперь Gii доступен по адресу: + +``` +http://localhost/path/to/index.php?r=gii +``` + +Если Вы используете "красивые" адреса (pretty URLs), то используйте такой URL: + +``` +http://localhost/path/to/index.php/gii +``` + +> Note: По-умолчанию, если Вы запускаете gii с ip-адреса, отличного от localhost, доступ к нему будет закрыт. +> Чтобы изменить это поведение, добавьте ip-адреса, которым разрешен доступ, в конфигурацию: +> +```php +'gii' => [ + 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'] // настройте, как Вам нужно здесь + // ... +], +``` +Если Вы настроили Gii аналогичным образом в консольном приложении, Вы сможете таким образом через консоль запустить Gii: + +``` +# измените путь на базовый Вашего приложения +cd path/to/AppBasePath +# эта команда покажет справку Gii +yii help gii +# эта команда покажет справку по генератору Моделей в Gii +yii help gii/model +# сгенерирует модель City из таблицы city +yii gii/model --tableName=city --modelClass=City +``` + +### Basic-приложение + +В шаблоне Basic-приложения структура конфигурации несколько отличается, поэтому Gii должен быть +настроен в `config/web.php`: + +```php +// ... +if (YII_ENV_DEV) { + // configuration adjustments for 'dev' environment + // настройка конфигурации для разработки + $config['bootstrap'][] = 'debug'; + $config['modules']['debug'] = \yii\debug\Module::class; + $config['bootstrap'][] = 'gii'; + $config['modules']['gii'] = \Yiisoft\Yii\Gii\Gii::class; // <--- здесь +} +``` +А для настройки ip-адресов надо сделать следующее: +```php +if (YII_ENV_DEV) { + // configuration adjustments for 'dev' environment + // настройка конфигурации для разработки + $config['bootstrap'][] = 'debug'; + $config['modules']['debug'] = \yii\debug\Module::class; + $config['bootstrap'][] = 'gii'; + $config['modules']['gii'] = [ + 'class' => \Yiisoft\Yii\Gii\Gii::class, + 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'], + ]; +} +``` diff --git a/docs/guide/ru/topics-creating-your-own-generators.md b/docs/guide/ru/topics-creating-your-own-generators.md new file mode 100644 index 00000000..bd25de5b --- /dev/null +++ b/docs/guide/ru/topics-creating-your-own-generators.md @@ -0,0 +1,47 @@ +Создание собственных генераторов +============================ + +Откройте папку любого генератора и Вы увидите два файла `form.php` и `Generator.php`. +Первый - это форма, второй - класс генератора. Для того, чтобы создать свой ??генератор, +Вам необходимо создать или переписать эти классы в какой-нибудь другой папке. Также, как +описано в предыдущем разделе, внесите изменения в конфигурацию: + +```php +//config/web.php для basic-приложения +//.. +if (YII_ENV_DEV) { + $config['modules']['gii'] = [ + 'class' => \Yiisoft\Yii\Gii\Gii::class, + 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'], + 'generators' => [ + 'myCrud' => [ + 'class' => \app\myTemplates\crud\Generator::class, + 'templates' => [ + 'my' => '@app/myTemplates/crud/default', + ] + ] + ], + ]; +} +``` + +```php +// @app/myTemplates/crud/Generator.php +modelClass)) ?>-form"> + $form = ActiveForm::begin(); ?> + $form->errorSummary($model) ?> +//... +``` + +Теперь нужно сообщить Gii о нашем шаблоне. Настройте эти строки в конфигурационном файле: + +```php +// config/web.php для basic-приложения +// ... +if (YII_ENV_DEV) { + $config['modules']['gii'] = [ + 'class' => \Yiisoft\Yii\Gii\Gii::class, + 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'], + 'generators' => [ // здесь + 'crud' => [ // название генератора + 'class' => \Yiisoft\Yii\Gii\Generators\Crud\Generator::class, // класс генератора + 'templates' => [ // настройки сторонних шаблонов + 'myCrud' => '@app/myTemplates/crud/default', // имя_шаблона => путь_к_шаблону + ] + ] + ], + ]; +} +``` + +Откройте CRUD и Вы увидите, что в выпадающем списке `Code Template` появился Ваш собственный шаблон. diff --git a/docs/guide/zh-CN/readme.md b/docs/guide/zh-CN/README.md similarity index 100% rename from docs/guide/zh-CN/readme.md rename to docs/guide/zh-CN/README.md diff --git a/docs/internals.md b/docs/internals.md index 8dc4049f..58489317 100644 --- a/docs/internals.md +++ b/docs/internals.md @@ -25,7 +25,7 @@ The code is statically analyzed with [Psalm](https://psalm.dev/). To run static ./vendor/bin/psalm ``` -## Rector +## Code style Use [Rector](https://github.com/rectorphp/rector) to make codebase follow some specific rules or use either newest or any specific version of PHP: @@ -33,13 +33,3 @@ use either newest or any specific version of PHP: ```shell ./vendor/bin/rector ``` - -## Composer require checker - -This package uses [composer-require-checker](https://github.com/maglnet/ComposerRequireChecker) to check if all dependencies are correctly defined in `composer.json`. - -To run the checker, execute the following command: - -```shell -./vendor/bin/composer-require-checker -``` From 935c21a8cd4fed4190b2fbbcf60c6dcf1f3c4ed3 Mon Sep 17 00:00:00 2001 From: Luiz Marin <67489841+luizcmarin@users.noreply.github.com> Date: Thu, 23 May 2024 11:48:14 -0300 Subject: [PATCH 28/29] Fix docs (#128) Co-authored-by: Sergei Predvoditelev --- CHANGELOG.md | 2 +- README.md | 4 ++-- composer.json | 12 +++++++++++- docs/guide/en/installation.md | 2 +- docs/guide/ja/installation.md | 2 +- docs/guide/pt-BR/installation.md | 2 +- docs/guide/zh-CN/installation.md | 2 +- 7 files changed, 18 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94fa58f0..fff84aa3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Yii Framework Gii extension Change Log +# Yii Gii extension Change Log ## 1.0.0 under development diff --git a/README.md b/README.md index 7db7e6c2..363bf1c8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- + Yii

Gii Extension for Yii


@@ -77,7 +77,7 @@ yii gii/model --tableName=city --modelClass=City ## Documentation -- Guide: [English](docs/guide/en/README.md), [中国人](docs/guide/zh-CN/README.md), [日本語](docs/guide/ja/README.md), [Português - Brasil](docs/guide/pt-BR/README.md), [Русский](docs/guide/ru/README.md) +- Guide: [English](docs/guide/en/README.md), [Português - Brasil](docs/guide/pt-BR/README.md), [Русский](docs/guide/ru/README.md), [日本語](docs/guide/ja/README.md), [中国人](docs/guide/zh-CN/README.md) - [Internals](docs/internals.md) If you need help or have a question, the [Yii Forum](https://forum.yiiframework.com/c/yii-3-0/63) is a good place for that. diff --git a/composer.json b/composer.json index 487761ba..d2d14aa4 100644 --- a/composer.json +++ b/composer.json @@ -10,13 +10,23 @@ ], "license": "BSD-3-Clause", "support": { + "issues": "https://github.com/yiisoft/yii-gii/issues?state=open", "source": "https://github.com/yiisoft/yii-gii", - "issues": "https://github.com/yiisoft/yii-gii/issues", "forum": "https://www.yiiframework.com/forum/", "wiki": "https://www.yiiframework.com/wiki/", "irc": "ircs://irc.libera.chat:6697/yii", "chat": "https://t.me/yii3en" }, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/yiisoft" + }, + { + "type": "github", + "url": "https://github.com/sponsors/yiisoft" + } + ], "minimum-stability": "dev", "prefer-stable": true, "require": { diff --git a/docs/guide/en/installation.md b/docs/guide/en/installation.md index 96e18863..f558a145 100644 --- a/docs/guide/en/installation.md +++ b/docs/guide/en/installation.md @@ -8,7 +8,7 @@ The preferred way to install this extension is through [composer](https://getcom Either run ``` -php composer.phar require --dev --prefer-dist yiisoft/yii-gii +composer require --dev yiisoft/yii-gii ``` or add diff --git a/docs/guide/ja/installation.md b/docs/guide/ja/installation.md index 70830778..7c22bbd9 100644 --- a/docs/guide/ja/installation.md +++ b/docs/guide/ja/installation.md @@ -8,7 +8,7 @@ 下記のコマンドを実行してください。 ``` -php composer.phar require --dev --prefer-dist yiisoft/yii-gii +composer require --dev yiisoft/yii-gii ``` または、あなたの `composer.json` ファイルの `require` セクションに、下記を追加してください。 diff --git a/docs/guide/pt-BR/installation.md b/docs/guide/pt-BR/installation.md index c899e748..fed4c47b 100644 --- a/docs/guide/pt-BR/installation.md +++ b/docs/guide/pt-BR/installation.md @@ -8,7 +8,7 @@ A maneira preferida para instalar essa extensão é via [composer](https://getco Então rode ``` -php composer.phar require --dev --prefer-dist yiisoft/yii2-gii +composer require --dev yiisoft/yii-gii ``` ou adicione diff --git a/docs/guide/zh-CN/installation.md b/docs/guide/zh-CN/installation.md index cd411adc..1d94aa85 100644 --- a/docs/guide/zh-CN/installation.md +++ b/docs/guide/zh-CN/installation.md @@ -8,7 +8,7 @@ 执行 ``` -php composer.phar require --dev --prefer-dist yiisoft/yii-gii +composer require --dev yiisoft/yii-gii ``` 或者在项目的 `composer.json` 中的 require-dev 部分添加如下代码 From 43a49e250047204d8719dcf4c26dea09cd485e51 Mon Sep 17 00:00:00 2001 From: Dmitriy Derepko Date: Sun, 9 Jun 2024 13:55:53 +0300 Subject: [PATCH 29/29] Fix lazy loading (#124) * Fix lazy loading * Apply Rector changes (CI) * Fix deps * Fix deps * Fix tests * Fix tests * Apply fixes from StyleCI * Apply Rector changes (CI) --------- Co-authored-by: xepozz Co-authored-by: StyleCI Bot --- composer.json | 6 +++-- config/di.php | 12 ++++++---- config/routes.php | 4 ++++ phpunit.xml.dist | 1 + src/Controller/DefaultController.php | 33 ++++++++++++++++++--------- src/GeneratorProxy.php | 32 ++++++++++++++++++++++++++ src/Gii.php | 31 ++++++++++++------------- src/GiiInterface.php | 6 +---- src/Request/GeneratorRequest.php | 2 +- src/Validator/TemplateRuleHandler.php | 6 ++++- tests/TestCase.php | 18 ++++++++------- 11 files changed, 102 insertions(+), 49 deletions(-) create mode 100644 src/GeneratorProxy.php diff --git a/composer.json b/composer.json index d2d14aa4..5473736d 100644 --- a/composer.json +++ b/composer.json @@ -55,8 +55,9 @@ "roave/infection-static-analysis-plugin": "^1.23", "spatie/phpunit-watcher": "^1.23", "vimeo/psalm": "^5.13", - "yiisoft/active-record": "^3.0@dev", + "yiisoft/active-record": "dev-master", "yiisoft/cache": "^3.0", + "yiisoft/db": "1.2 as dev-master", "yiisoft/db-sqlite": "^1.0", "yiisoft/di": "^1.1", "yiisoft/dummy-provider": "^1.0", @@ -98,7 +99,8 @@ "sort-packages": true, "allow-plugins": { "infection/extension-installer": true, - "composer/package-versions-deprecated": true + "composer/package-versions-deprecated": true, + "php-http/discovery": false } }, "scripts": { diff --git a/config/di.php b/config/di.php index fe6fc121..09054a1a 100644 --- a/config/di.php +++ b/config/di.php @@ -4,6 +4,7 @@ use Yiisoft\Injector\Injector; use Yiisoft\Yii\Gii\GeneratorInterface; +use Yiisoft\Yii\Gii\GeneratorProxy; use Yiisoft\Yii\Gii\Gii; use Yiisoft\Yii\Gii\GiiInterface; use Yiisoft\Yii\Gii\ParametersProvider; @@ -14,7 +15,7 @@ return [ GiiInterface::class => function (Injector $injector) use ($params): GiiInterface { - $generatorsInstances = []; + $proxies = []; $generators = $params['yiisoft/yii-gii']['generators']; foreach ($generators as $generator) { @@ -22,10 +23,13 @@ /** * @var $loader Closure(): GeneratorInterface */ - $loader = fn() => $injector->make($class, $generator['parameters'] ?? []); - $generatorsInstances[$class] = $loader; + $loader = new GeneratorProxy( + fn() => $injector->make($class, $generator['parameters'] ?? []), + $class, + ); + $proxies[$class::getId()] = $loader; } - return new Gii($generatorsInstances); + return new Gii($proxies, []); }, ParametersProvider::class => [ 'class' => ParametersProvider::class, diff --git a/config/routes.php b/config/routes.php index b457c242..2f5b8dd9 100644 --- a/config/routes.php +++ b/config/routes.php @@ -10,6 +10,7 @@ use Psr\Http\Message\ResponseFactoryInterface; use Yiisoft\Csrf\CsrfMiddleware; use Yiisoft\DataResponse\Middleware\FormatDataResponseAsJson; +use Yiisoft\RequestProvider\RequestCatcherMiddleware; use Yiisoft\Router\Group; use Yiisoft\Router\Route; use Yiisoft\Validator\ValidatorInterface; @@ -47,14 +48,17 @@ static function (ResponseFactoryInterface $responseFactory, ValidatorInterface $ ->name('generator'), Route::post('/{generator}/preview') ->middleware(BodyParamsMiddleware::class) + ->middleware(RequestCatcherMiddleware::class) ->action([DefaultController::class, 'preview']) ->name('preview'), Route::post('/{generator}/generate') ->middleware(BodyParamsMiddleware::class) + ->middleware(RequestCatcherMiddleware::class) ->action([DefaultController::class, 'generate']) ->name('generate'), Route::post('/{generator}/diff') ->middleware(BodyParamsMiddleware::class) + ->middleware(RequestCatcherMiddleware::class) ->action([DefaultController::class, 'diff']) ->name('diff') ) diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 4ce94439..691f57cb 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -6,6 +6,7 @@ colors="true" failOnRisky="true" failOnWarning="true" + displayDetailsOnTestsThatTriggerWarnings="true" stopOnFailure="false" executionOrder="random" resolveDependencies="true" diff --git a/src/Controller/DefaultController.php b/src/Controller/DefaultController.php index 24ff60d0..cce96e35 100644 --- a/src/Controller/DefaultController.php +++ b/src/Controller/DefaultController.php @@ -20,6 +20,7 @@ use Yiisoft\Yii\Gii\Generator\CommandHydrator; use Yiisoft\Yii\Gii\GeneratorCommandInterface; use Yiisoft\Yii\Gii\GeneratorInterface; +use Yiisoft\Yii\Gii\GeneratorProxy; use Yiisoft\Yii\Gii\GiiInterface; use Yiisoft\Yii\Gii\ParametersProvider; use Yiisoft\Yii\Gii\Request\GeneratorRequest; @@ -37,7 +38,17 @@ public function list(GiiInterface $gii): ResponseInterface $generators = $gii->getGenerators(); return $this->responseFactory->createResponse([ - 'generators' => array_map($this->serializeGenerator(...), array_values($generators)), + 'generators' => array_map( + $this->serializeGenerator(...), + array_values( + array_map( + fn (GeneratorInterface|GeneratorProxy $generator) => $generator instanceof GeneratorProxy + ? $generator->getClass() + : $generator::class, + $generators + ) + ), + ), ]); } @@ -46,7 +57,7 @@ public function get(GeneratorRequest $request): ResponseInterface $generator = $request->getGenerator(); return $this->responseFactory->createResponse( - $this->serializeGenerator($generator) + $this->serializeGenerator($generator::class) ); } @@ -150,12 +161,12 @@ private function serializeCodeFile(CodeFile $file): array ]; } - private function serializeGenerator(GeneratorInterface $generator): array + /** + * @psalm-param class-string $generatorClass + */ + private function serializeGenerator(string $generatorClass): array { - /** - * @psalm-var class-string $commandClass - */ - $commandClass = $generator::getCommandClass(); + $commandClass = $generatorClass::getCommandClass(); $dataset = new AttributesRulesProvider($commandClass); $rules = $dataset->getRules(); @@ -182,12 +193,12 @@ private function serializeGenerator(GeneratorInterface $generator): array } return [ - 'id' => $generator::getId(), - 'name' => $generator::getName(), - 'description' => $generator::getDescription(), + 'id' => $generatorClass::getId(), + 'name' => $generatorClass::getName(), + 'description' => $generatorClass::getDescription(), 'commandClass' => $commandClass, 'attributes' => $attributesResult, - 'templates' => $this->parametersProvider->getTemplates($generator::getId()), + 'templates' => $this->parametersProvider->getTemplates($generatorClass::getId()), ]; } diff --git a/src/GeneratorProxy.php b/src/GeneratorProxy.php new file mode 100644 index 00000000..2ceec9ab --- /dev/null +++ b/src/GeneratorProxy.php @@ -0,0 +1,32 @@ + $class + */ + public function __construct(private readonly Closure $loader, private readonly string $class) + { + } + + /** + * @return class-string + */ + public function getClass(): string + { + return $this->class; + } + + public function loadGenerator(): GeneratorInterface + { + return $this->generator ??= ($this->loader)(); + } +} diff --git a/src/Gii.php b/src/Gii.php index 002b8a98..755feec1 100644 --- a/src/Gii.php +++ b/src/Gii.php @@ -4,40 +4,37 @@ namespace Yiisoft\Yii\Gii; -use Closure; use Yiisoft\Yii\Gii\Exception\GeneratorNotFoundException; -/** - * @psalm-import-type LazyGenerator from GiiInterface - */ final class Gii implements GiiInterface { /** - * @param array $generators + * @param array $proxies + * @param array $instances */ - public function __construct(private array $generators) - { + public function __construct( + private readonly array $proxies, + private array $instances, + ) { } public function addGenerator(GeneratorInterface $generator): void { - $this->generators[$generator::getId()] = $generator; + $this->instances[$generator::getId()] = $generator; } public function getGenerator(string $id): GeneratorInterface { - if (!isset($this->generators[$id])) { - throw new GeneratorNotFoundException('Generator "' . $id . '" not found'); - } - - return $this->generators[$id] instanceof Closure ? $this->generators[$id]() : $this->generators[$id]; + return $this->instances[$id] ?? (isset($this->proxies[$id]) + ? $this->proxies[$id]->loadGenerator() + : throw new GeneratorNotFoundException('Generator "' . $id . '" not found')); } public function getGenerators(): array { - return array_map( - fn (Closure|GeneratorInterface $generator) => $generator instanceof Closure ? $generator() : $generator, - $this->generators - ); + return [ + ...$this->instances, + ...$this->proxies, + ]; } } diff --git a/src/GiiInterface.php b/src/GiiInterface.php index 614435d3..76d6fa4e 100644 --- a/src/GiiInterface.php +++ b/src/GiiInterface.php @@ -4,12 +4,8 @@ namespace Yiisoft\Yii\Gii; -use Closure; use Yiisoft\Yii\Gii\Exception\GeneratorNotFoundException; -/** - * @psalm-type LazyGenerator = Closure(): GeneratorInterface - */ interface GiiInterface { /** @@ -23,7 +19,7 @@ public function addGenerator(GeneratorInterface $generator): void; public function getGenerator(string $id): GeneratorInterface; /** - * @return GeneratorInterface[] + * @return GeneratorInterface[]|GeneratorProxy[] */ public function getGenerators(): array; } diff --git a/src/Request/GeneratorRequest.php b/src/Request/GeneratorRequest.php index e63568a0..e6adeff2 100644 --- a/src/Request/GeneratorRequest.php +++ b/src/Request/GeneratorRequest.php @@ -4,9 +4,9 @@ namespace Yiisoft\Yii\Gii\Request; -use Yiisoft\Hydrator\Temp\RouteArgument; use Yiisoft\Input\Http\Attribute\Parameter\Body; use Yiisoft\Input\Http\RequestInputInterface; +use Yiisoft\Router\HydratorAttribute\RouteArgument; use Yiisoft\Yii\Gii\GeneratorInterface; use Yiisoft\Yii\Gii\GiiInterface; diff --git a/src/Validator/TemplateRuleHandler.php b/src/Validator/TemplateRuleHandler.php index b779f6ea..ab5ad734 100644 --- a/src/Validator/TemplateRuleHandler.php +++ b/src/Validator/TemplateRuleHandler.php @@ -12,6 +12,7 @@ use Yiisoft\Validator\ValidationContext; use Yiisoft\Yii\Gii\GeneratorCommandInterface; use Yiisoft\Yii\Gii\GeneratorInterface; +use Yiisoft\Yii\Gii\GeneratorProxy; use Yiisoft\Yii\Gii\GiiInterface; use Yiisoft\Yii\Gii\ParametersProvider; @@ -79,9 +80,12 @@ public function validate(mixed $value, object $rule, ValidationContext $context) private function getGenerator(GeneratorCommandInterface $dataSet): GeneratorInterface { foreach ($this->gii->getGenerators() as $generator) { - if ($generator::getCommandClass() === $dataSet::class) { + if ($generator instanceof GeneratorInterface && $generator::getCommandClass() === $dataSet::class) { return $generator; } + if ($generator instanceof GeneratorProxy && $generator->getClass()::getCommandClass() === $dataSet::class) { + return $generator->loadGenerator(); + } } throw new RuntimeException(sprintf('Unknown generator "%s".', $dataSet::class)); } diff --git a/tests/TestCase.php b/tests/TestCase.php index 9dfc3aa5..35019d00 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -28,6 +28,7 @@ use Yiisoft\Validator\Validator; use Yiisoft\Validator\ValidatorInterface; use Yiisoft\Yii\Gii\Generator as Generators; +use Yiisoft\Yii\Gii\GeneratorProxy; use Yiisoft\Yii\Gii\Gii; use Yiisoft\Yii\Gii\GiiInterface; @@ -54,15 +55,16 @@ protected function getContainer(array $definitions = []): ContainerInterface $config = ContainerConfig::create() ->withDefinitions([ GiiInterface::class => function (ContainerInterface $container) { - $generators = [ - Generators\Controller\Generator::getId() => Generators\Controller\Generator::class, - Generators\ActiveRecord\Generator::getId() => Generators\ActiveRecord\Generator::class, + $proxies = [ + Generators\Controller\Generator::getId() => new GeneratorProxy( + fn() => $container->get(Generators\Controller\Generator::class), + Generators\Controller\Generator::class, + ), ]; - $generatorsInstances = []; - foreach ($generators as $class) { - $generatorsInstances[] = $container->get($class); - } - return new Gii($generatorsInstances); + $instances = [ + Generators\ActiveRecord\Generator::getId() => $container->get(Generators\ActiveRecord\Generator::class), + ]; + return new Gii($proxies, $instances); }, Aliases::class => new Aliases( [