From 097ee6f874879a5bcf8dbda04c423a7453ec11c0 Mon Sep 17 00:00:00 2001 From: Tobias Munk Date: Thu, 13 Feb 2014 04:06:42 +0100 Subject: [PATCH 1/8] first draft of the extension generator --- extensions/gii/Module.php | 1 + .../gii/generators/extension/Generator.php | 230 ++++++++++++++++++ extensions/gii/generators/extension/form.php | 30 +++ .../extension/templates/AutoloadExample.php | 14 ++ .../generators/extension/templates/README.md | 35 +++ .../extension/templates/composer.json | 18 ++ 6 files changed, 328 insertions(+) create mode 100644 extensions/gii/generators/extension/Generator.php create mode 100644 extensions/gii/generators/extension/form.php create mode 100644 extensions/gii/generators/extension/templates/AutoloadExample.php create mode 100644 extensions/gii/generators/extension/templates/README.md create mode 100644 extensions/gii/generators/extension/templates/composer.json diff --git a/extensions/gii/Module.php b/extensions/gii/Module.php index 30302b5ef7..0b0f6e4d6e 100644 --- a/extensions/gii/Module.php +++ b/extensions/gii/Module.php @@ -141,6 +141,7 @@ class Module extends \yii\base\Module 'controller' => ['class' => 'yii\gii\generators\controller\Generator'], 'form' => ['class' => 'yii\gii\generators\form\Generator'], 'module' => ['class' => 'yii\gii\generators\module\Generator'], + 'extension' => ['class' => 'yii\gii\generators\extension\Generator'], ]; } } diff --git a/extensions/gii/generators/extension/Generator.php b/extensions/gii/generators/extension/Generator.php new file mode 100644 index 0000000000..133a7ed81f --- /dev/null +++ b/extensions/gii/generators/extension/Generator.php @@ -0,0 +1,230 @@ + + * @since 2.0 + */ +class Generator extends \yii\gii\Generator +{ + public $vendorName; + public $packageName; + public $namespace; + public $type; + public $keywords = "[yii2], [need array handling here]"; + public $title; + public $description; + public $outputPath = "@app/tmp"; + public $license; + public $authorName; + public $authorEmail; + + /** + * @inheritdoc + */ + public function getName() + { + return 'Extension Generator'; + } + + /** + * @inheritdoc + */ + public function getDescription() + { + return 'This generator helps you to generate the files needed by a Yii extension.'; + } + + /** + * @inheritdoc + */ + public function rules() + { + return array_merge(parent::rules(), [ + [['vendorName', 'packageName'], 'filter', 'filter' => 'trim'], + [['vendorName', 'packageName', 'namespace', 'type', 'license', 'title','description', 'authorName','authorEmail'], 'required'], + [['authorEmail'], 'email'], + [['packageName'], 'match', 'pattern' => '/^[a-z0-9-\.]+$/', 'message' => 'Only lowercase word characters, dashes and dots are allowed.'], + [['vendorName'], 'match', 'pattern' => '/^[\w\\\\]*$/', 'message' => 'Only word characters and backslashes are allowed.'], + ]); + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'vendorName' => 'Vendor Name', + 'packageName' => 'Package Name', + 'license' => 'License', + ]; + } + + /** + * @inheritdoc + */ + public function hints() + { + return [ + 'vendorName' => 'This refers to the name of the publisher, often i.e. your GitHub user name.', + 'packageName' => 'This is the name of the extension.', + 'namespace' => 'This will be added to your autoloader by composer.', + 'outputPath' => 'The temporary location of the generated files.', + 'title' => 'A more descriptive name of your application for the README file.', + 'description' => 'A sentence or subline describing the main purpose of the extension.', + ]; + } + + /** + * @inheritdoc + */ + public function stickyAttributes() + { + return ['vendorName','outputPath','authorName','authorEmail']; + } + + /** + * @inheritdoc + */ + public function successMessage() + { + #if (Yii::$app->hasModule($this->moduleID)) { + # $link = Html::a('try it now', Yii::$app->getUrlManager()->createUrl($this->moduleID), ['target' => '_blank']); + # return "The module has been generated successfully. You may $link."; + #} + + $output1 = <<The extension has been generated successfully.

+

To enable it in your application, you need to create a git repository +and require via composer.

+EOD; + $code1 = <<packageName} + +git init +git add -A +git commit +EOD; + $output2 = <<The next step is just for local testing, skip it if you directly publish the extension on e.g. packagist.org

+

Add the newly created repo to your composer.json.

+EOD; + $code2 = <<packageName}" + } +] +EOD; + $output3 = <<Note: Make sure to remove the above lines after testing.

+

Require the package with composer

+EOD; + $code3 = <<vendorName}/yii2-{$this->packageName}:* +EOD; + $output4 = <<And use it in your application.

+EOD; + $code4 = <<vendorName}\\{$this->packageName}\AutoloadExample::widget(); +echo \$x->run(); +EOD; + $return = $output1 . '
' . highlight_string($code1, true) . '
'; + $return .= $output2 . '
' . highlight_string($code2, true) . '
'; + $return .= $output3 . '
' . highlight_string($code3, true) . '
'; + $return .= $output4 . '
' . highlight_string($code4, true) . '
'; + return $return; + } + + /** + * @inheritdoc + */ + public function requiredTemplates() + { + return ['composer.json', 'AutoloadExample.php', 'README.md']; + } + + /** + * @inheritdoc + */ + public function generate() + { + $files = []; + $modulePath = $this->getOutputPath(); + $files[] = new CodeFile( + $modulePath . '/' . $this->packageName . '/composer.json', + $this->render("composer.json") + ); + $files[] = new CodeFile( + $modulePath . '/' . $this->packageName . '/AutoloadExample.php', + $this->render("AutoloadExample.php") + ); + $files[] = new CodeFile( + $modulePath . '/' . $this->packageName . '/README.md', + $this->render("README.md") + ); + return $files; + } + + /** + * @return boolean the directory that contains the module class + */ + public function getOutputPath() + { + return Yii::getAlias($this->outputPath); + #return Yii::getAlias('@' . str_replace('\\', '/', substr($this->moduleClass, 0, strrpos($this->moduleClass, '\\')))); + } + + /** + * @return array options for type drop-down + */ + public function optsType() + { + $licenses = [ + 'yii2-extension', + 'library', + ]; + return array_combine($licenses, $licenses); + } + + /** + * @return array options for license drop-down + */ + public function optsLicense() + { + $licenses = [ + 'Apache-2.0', + 'BSD-2-Clause', + 'BSD-3-Clause', + 'BSD-4-Clause', + 'GPL-2.0', + 'GPL-2.0+', + 'GPL-3.0', + 'GPL-3.0+', + 'LGPL-2.1', + 'LGPL-2.1+', + 'LGPL-3.0', + 'LGPL-3.0+', + 'MIT' + ]; + return array_combine($licenses, $licenses); + } +} diff --git a/extensions/gii/generators/extension/form.php b/extensions/gii/generators/extension/form.php new file mode 100644 index 0000000000..7709027871 --- /dev/null +++ b/extensions/gii/generators/extension/form.php @@ -0,0 +1,30 @@ + +
+field($generator, 'vendorName'); + echo $form->field($generator, 'packageName')->label('Package Name -- WILL BE PREFIXED WITH yii2-'); + echo $form->field($generator, 'namespace'); + echo $form->field($generator, 'type')->dropDownList($generator->optsType()); + echo $form->field($generator, 'keywords'); + echo $form->field($generator, 'license')->dropDownList($generator->optsLicense()); + echo $form->field($generator, 'title'); + echo $form->field($generator, 'description'); + echo $form->field($generator, 'authorName'); + echo $form->field($generator, 'authorEmail'); + echo $form->field($generator, 'outputPath'); +?> +
+ +registerJs($js); diff --git a/extensions/gii/generators/extension/templates/AutoloadExample.php b/extensions/gii/generators/extension/templates/AutoloadExample.php new file mode 100644 index 0000000000..a7330fb91c --- /dev/null +++ b/extensions/gii/generators/extension/templates/AutoloadExample.php @@ -0,0 +1,14 @@ + + +namespace namespace ?>; + +class AutoloadExample extends \yii\base\widget { + function run() { + return "Hello!"; + } +} diff --git a/extensions/gii/generators/extension/templates/README.md b/extensions/gii/generators/extension/templates/README.md new file mode 100644 index 0000000000..99de991924 --- /dev/null +++ b/extensions/gii/generators/extension/templates/README.md @@ -0,0 +1,35 @@ +title ?> +=== + +description ?> + + +Installation +------------ + +The preferred way to install this extension is through [composer](http://getcomposer.org/download/). + +Either run + +``` +php composer.phar require --prefer-dist vendorName ?>/yii2-packageName ?> "*" +``` + +or add + +``` +"vendorName ?>/yii2-packageName ?>": "*" +``` + +to the require section of your `composer.json` file. + + +Usage +----- + +Once the extension is installed, simply use it in your code by : + +```php +namespace}\\AutoloadExample::wiget(); ?>" ?> +]; +``` \ No newline at end of file diff --git a/extensions/gii/generators/extension/templates/composer.json b/extensions/gii/generators/extension/templates/composer.json new file mode 100644 index 0000000000..4cd3c2cfe8 --- /dev/null +++ b/extensions/gii/generators/extension/templates/composer.json @@ -0,0 +1,18 @@ +{ + "name": "vendorName ?>/yii2-packageName ?>", + "description": "description ?>", + "type": "type ?>", + "keywords": ["TODO","ARRAY INPUT"], + "license": "license ?>", + "authors": [ + { + "name": "authorName ?>", + "email": "authorEmail ?>" + } + ], + "autoload": { + "psr-4": { + "namespace ?>": "" + } + } +} From 4192c72256a67e2848762e41788a94ef7a8c6b66 Mon Sep 17 00:00:00 2001 From: Tobias Munk Date: Mon, 24 Feb 2014 18:33:50 +0100 Subject: [PATCH 2/8] minor docs update (still WIP) --- extensions/gii/generators/extension/Generator.php | 8 ++++---- extensions/gii/generators/extension/form.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/extensions/gii/generators/extension/Generator.php b/extensions/gii/generators/extension/Generator.php index 133a7ed81f..c77035f00c 100644 --- a/extensions/gii/generators/extension/Generator.php +++ b/extensions/gii/generators/extension/Generator.php @@ -23,10 +23,10 @@ use yii\helpers\StringHelper; class Generator extends \yii\gii\Generator { public $vendorName; - public $packageName; + public $packageName = "yii2-"; public $namespace; - public $type; - public $keywords = "[yii2], [need array handling here]"; + public $type = "yii2-extension"; + public $keywords = "yii2,"; public $title; public $description; public $outputPath = "@app/tmp"; @@ -84,7 +84,7 @@ class Generator extends \yii\gii\Generator return [ 'vendorName' => 'This refers to the name of the publisher, often i.e. your GitHub user name.', 'packageName' => 'This is the name of the extension.', - 'namespace' => 'This will be added to your autoloader by composer.', + 'namespace' => 'This will be added to your autoloader by composer. Do not use yii or yii2 in the namespace', 'outputPath' => 'The temporary location of the generated files.', 'title' => 'A more descriptive name of your application for the README file.', 'description' => 'A sentence or subline describing the main purpose of the extension.', diff --git a/extensions/gii/generators/extension/form.php b/extensions/gii/generators/extension/form.php index 7709027871..4f72ffcc12 100644 --- a/extensions/gii/generators/extension/form.php +++ b/extensions/gii/generators/extension/form.php @@ -8,7 +8,7 @@
field($generator, 'vendorName'); - echo $form->field($generator, 'packageName')->label('Package Name -- WILL BE PREFIXED WITH yii2-'); + echo $form->field($generator, 'packageName'); echo $form->field($generator, 'namespace'); echo $form->field($generator, 'type')->dropDownList($generator->optsType()); echo $form->field($generator, 'keywords'); From be54f24b47703ade6cdb6541d7558ca302f23006 Mon Sep 17 00:00:00 2001 From: Tobias Munk Date: Tue, 25 Feb 2014 01:11:42 +0100 Subject: [PATCH 3/8] updated defaults, UI, validation and templates --- .../gii/generators/extension/Generator.php | 114 ++++++++++++------ extensions/gii/generators/extension/form.php | 15 +-- .../extension/templates/AutoloadExample.php | 2 +- .../extension/templates/composer.json | 6 +- 4 files changed, 84 insertions(+), 53 deletions(-) diff --git a/extensions/gii/generators/extension/Generator.php b/extensions/gii/generators/extension/Generator.php index c77035f00c..c4c7ee65f3 100644 --- a/extensions/gii/generators/extension/Generator.php +++ b/extensions/gii/generators/extension/Generator.php @@ -1,8 +1,8 @@ - * @since 2.0 + * @since 2.0 */ class Generator extends \yii\gii\Generator { @@ -26,10 +24,10 @@ class Generator extends \yii\gii\Generator public $packageName = "yii2-"; public $namespace; public $type = "yii2-extension"; - public $keywords = "yii2,"; + public $keywords = "yii2,extension"; public $title; public $description; - public $outputPath = "@app/tmp"; + public $outputPath = "@app/runtime/tmp-extensions"; public $license; public $authorName; public $authorEmail; @@ -55,13 +53,40 @@ class Generator extends \yii\gii\Generator */ public function rules() { - return array_merge(parent::rules(), [ - [['vendorName', 'packageName'], 'filter', 'filter' => 'trim'], - [['vendorName', 'packageName', 'namespace', 'type', 'license', 'title','description', 'authorName','authorEmail'], 'required'], - [['authorEmail'], 'email'], - [['packageName'], 'match', 'pattern' => '/^[a-z0-9-\.]+$/', 'message' => 'Only lowercase word characters, dashes and dots are allowed.'], - [['vendorName'], 'match', 'pattern' => '/^[\w\\\\]*$/', 'message' => 'Only word characters and backslashes are allowed.'], - ]); + return array_merge( + parent::rules(), + [ + [['vendorName', 'packageName'], 'filter', 'filter' => 'trim'], + [ + [ + 'vendorName', + 'packageName', + 'namespace', + 'type', + 'license', + 'title', + 'description', + 'authorName', + 'authorEmail', + 'outputPath' + ], + 'required' + ], + [['authorEmail'], 'email'], + [ + ['vendorName', 'packageName'], + 'match', + 'pattern' => '/^[a-z0-9\-\.]+$/', + 'message' => 'Only lowercase word characters, dashes and dots are allowed.' + ], + [ + ['namespace'], + 'match', + 'pattern' => '/^[a-zA-Z0-9\\\]+\\\$/', + 'message' => 'Only letters, numbers and backslashes are allowed. PSR-4 namespaces must end with a namespace separator.' + ], + ] + ); } /** @@ -70,9 +95,9 @@ class Generator extends \yii\gii\Generator public function attributeLabels() { return [ - 'vendorName' => 'Vendor Name', + 'vendorName' => 'Vendor Name', 'packageName' => 'Package Name', - 'license' => 'License', + 'license' => 'License', ]; } @@ -82,11 +107,12 @@ class Generator extends \yii\gii\Generator public function hints() { return [ - 'vendorName' => 'This refers to the name of the publisher, often i.e. your GitHub user name.', - 'packageName' => 'This is the name of the extension.', - 'namespace' => 'This will be added to your autoloader by composer. Do not use yii or yii2 in the namespace', - 'outputPath' => 'The temporary location of the generated files.', - 'title' => 'A more descriptive name of your application for the README file.', + 'vendorName' => 'This refers to the name of the publisher, your GitHub user name is usually a good choice, eg. myself', + 'packageName' => 'This is the name of the extension on packagist, eg. yii2-foobar', + 'namespace' => 'PSR-4, eg. myself\foobar This will be added to your autoloading by composer. Do not use yii or yii2 in the namespace.', + 'keywords' => 'Comma separated keywords for this extension.', + 'outputPath' => 'The temporary location of the generated files.', + 'title' => 'A more descriptive name of your application for the README file.', 'description' => 'A sentence or subline describing the main purpose of the extension.', ]; } @@ -96,7 +122,7 @@ class Generator extends \yii\gii\Generator */ public function stickyAttributes() { - return ['vendorName','outputPath','authorName','authorEmail']; + return ['vendorName', 'outputPath', 'authorName', 'authorEmail']; } /** @@ -108,46 +134,47 @@ class Generator extends \yii\gii\Generator # $link = Html::a('try it now', Yii::$app->getUrlManager()->createUrl($this->moduleID), ['target' => '_blank']); # return "The module has been generated successfully. You may $link."; #} - - $output1 = <<The extension has been generated successfully.

+ $outputPath = realpath(\Yii::getAlias($this->outputPath)); + $output1 = <<The extension has been generated successfully.

To enable it in your application, you need to create a git repository and require via composer.

EOD; - $code1 = <<packageName} + $code1 = <<packageName} git init git add -A git commit +git remote add origin https://path.to/your/repo +git push -u origin master EOD; - $output2 = <<The next step is just for local testing, skip it if you directly publish the extension on e.g. packagist.org

Add the newly created repo to your composer.json.

EOD; - $code2 = <<packageName}" + "url": "https://path.to/your/repo" } ] EOD; - $output3 = <<Note: Make sure to remove the above lines after testing.

+ $output3 = <<Note: You may use the url file://{$outputPath}/{$this->packageName} for testing.

Require the package with composer

EOD; - $code3 = <<vendorName}/yii2-{$this->packageName}:* + $code3 = <<vendorName}/{$this->packageName}:dev-master EOD; - $output4 = <<And use it in your application.

EOD; - $code4 = <<vendorName}\\{$this->packageName}\AutoloadExample::widget(); -echo \$x->run(); + $code4 = <<namespace}AutoloadExample::widget(); EOD; - $return = $output1 . '
' . highlight_string($code1, true) . '
'; + $return = $output1 . '
' . highlight_string($code1, true) . '
'; $return .= $output2 . '
' . highlight_string($code2, true) . '
'; $return .= $output3 . '
' . highlight_string($code3, true) . '
'; $return .= $output4 . '
' . highlight_string($code4, true) . '
'; @@ -190,7 +217,14 @@ EOD; public function getOutputPath() { return Yii::getAlias($this->outputPath); - #return Yii::getAlias('@' . str_replace('\\', '/', substr($this->moduleClass, 0, strrpos($this->moduleClass, '\\')))); + } + + /** + * @return a json encoded array with the given keywords + */ + public function getKeywordsArrayJson() + { + return json_encode(explode(',', $this->keywords)); } /** diff --git a/extensions/gii/generators/extension/form.php b/extensions/gii/generators/extension/form.php index 4f72ffcc12..98a250cafc 100644 --- a/extensions/gii/generators/extension/form.php +++ b/extensions/gii/generators/extension/form.php @@ -5,6 +5,11 @@ * @var yii\gii\generators\module\Generator $generator */ ?> +
+ Please read the + 'new']) ?> + before creating an extension. +
field($generator, 'vendorName'); @@ -12,7 +17,7 @@ echo $form->field($generator, 'namespace'); echo $form->field($generator, 'type')->dropDownList($generator->optsType()); echo $form->field($generator, 'keywords'); - echo $form->field($generator, 'license')->dropDownList($generator->optsLicense()); + echo $form->field($generator, 'license')->dropDownList($generator->optsLicense(), ['prompt'=>'Choose...']); echo $form->field($generator, 'title'); echo $form->field($generator, 'description'); echo $form->field($generator, 'authorName'); @@ -20,11 +25,3 @@ echo $form->field($generator, 'outputPath'); ?>
- -registerJs($js); diff --git a/extensions/gii/generators/extension/templates/AutoloadExample.php b/extensions/gii/generators/extension/templates/AutoloadExample.php index a7330fb91c..b66b1d1f63 100644 --- a/extensions/gii/generators/extension/templates/AutoloadExample.php +++ b/extensions/gii/generators/extension/templates/AutoloadExample.php @@ -5,7 +5,7 @@ echo " -namespace namespace ?>; +namespace namespace, 0, -1) ?>; class AutoloadExample extends \yii\base\widget { function run() { diff --git a/extensions/gii/generators/extension/templates/composer.json b/extensions/gii/generators/extension/templates/composer.json index 4cd3c2cfe8..941a9a5d70 100644 --- a/extensions/gii/generators/extension/templates/composer.json +++ b/extensions/gii/generators/extension/templates/composer.json @@ -1,8 +1,8 @@ { - "name": "vendorName ?>/yii2-packageName ?>", + "name": "vendorName ?>/packageName ?>", "description": "description ?>", "type": "type ?>", - "keywords": ["TODO","ARRAY INPUT"], + "keywords": keywordsArrayJson ?>, "license": "license ?>", "authors": [ { @@ -12,7 +12,7 @@ ], "autoload": { "psr-4": { - "namespace ?>": "" + "namespace) ?>": "" } } } From 9ad28d90889438ae1798f95536370a8dfd2cffb6 Mon Sep 17 00:00:00 2001 From: Tobias Munk Date: Wed, 26 Feb 2014 00:37:26 +0100 Subject: [PATCH 4/8] added safe validator for keywords --- extensions/gii/generators/extension/Generator.php | 1 + 1 file changed, 1 insertion(+) diff --git a/extensions/gii/generators/extension/Generator.php b/extensions/gii/generators/extension/Generator.php index c4c7ee65f3..6c9e9f736b 100644 --- a/extensions/gii/generators/extension/Generator.php +++ b/extensions/gii/generators/extension/Generator.php @@ -72,6 +72,7 @@ class Generator extends \yii\gii\Generator ], 'required' ], + [['keywords'], 'safe'], [['authorEmail'], 'email'], [ ['vendorName', 'packageName'], From d32b3a0e8f005e38cffa706babcb4b51d0205d30 Mon Sep 17 00:00:00 2001 From: Tobias Munk Date: Wed, 26 Feb 2014 00:37:57 +0100 Subject: [PATCH 5/8] updated docs and hints --- extensions/gii/generators/extension/Generator.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/extensions/gii/generators/extension/Generator.php b/extensions/gii/generators/extension/Generator.php index 6c9e9f736b..b508d54c45 100644 --- a/extensions/gii/generators/extension/Generator.php +++ b/extensions/gii/generators/extension/Generator.php @@ -108,9 +108,9 @@ class Generator extends \yii\gii\Generator public function hints() { return [ - 'vendorName' => 'This refers to the name of the publisher, your GitHub user name is usually a good choice, eg. myself', - 'packageName' => 'This is the name of the extension on packagist, eg. yii2-foobar', - 'namespace' => 'PSR-4, eg. myself\foobar This will be added to your autoloading by composer. Do not use yii or yii2 in the namespace.', + 'vendorName' => 'This refers to the name of the publisher, your GitHub user name is usually a good choice, eg. myself.', + 'packageName' => 'This is the name of the extension on packagist, eg. yii2-foobar.', + 'namespace' => 'PSR-4, eg. myself\foobar\ This will be added to your autoloading by composer. Do not use yii or yii2 in the namespace.', 'keywords' => 'Comma separated keywords for this extension.', 'outputPath' => 'The temporary location of the generated files.', 'title' => 'A more descriptive name of your application for the README file.', @@ -151,7 +151,7 @@ git remote add origin https://path.to/your/repo git push -u origin master EOD; $output2 = <<The next step is just for local testing, skip it if you directly publish the extension on e.g. packagist.org

+

The next step is just for initial development, skip it if you directly publish the extension on packagist.org

Add the newly created repo to your composer.json.

EOD; $code2 = <<namespace}AutoloadExample::widget(); EOD; + $output5 = <<When you have finished development register your extension at packagist.org.

+EOD; + $return = $output1 . '
' . highlight_string($code1, true) . '
'; $return .= $output2 . '
' . highlight_string($code2, true) . '
'; $return .= $output3 . '
' . highlight_string($code3, true) . '
'; $return .= $output4 . '
' . highlight_string($code4, true) . '
'; + $return .= $output5; return $return; } From c624f91dc354c36345fc952da47a87cad81090af Mon Sep 17 00:00:00 2001 From: Tobias Munk Date: Wed, 26 Feb 2014 00:38:46 +0100 Subject: [PATCH 6/8] fixed typos --- extensions/gii/generators/extension/Generator.php | 10 +++------- .../gii/generators/extension/templates/README.md | 4 ++-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/extensions/gii/generators/extension/Generator.php b/extensions/gii/generators/extension/Generator.php index b508d54c45..96a60adfa1 100644 --- a/extensions/gii/generators/extension/Generator.php +++ b/extensions/gii/generators/extension/Generator.php @@ -14,7 +14,7 @@ use yii\helpers\StringHelper; /** * This generator will generate the skeleton files needed by an extension. - * @property tbd + * * @author Tobias Munk * @since 2.0 */ @@ -131,15 +131,11 @@ class Generator extends \yii\gii\Generator */ public function successMessage() { - #if (Yii::$app->hasModule($this->moduleID)) { - # $link = Html::a('try it now', Yii::$app->getUrlManager()->createUrl($this->moduleID), ['target' => '_blank']); - # return "The module has been generated successfully. You may $link."; - #} $outputPath = realpath(\Yii::getAlias($this->outputPath)); $output1 = <<The extension has been generated successfully.

To enable it in your application, you need to create a git repository -and require via composer.

+and require it via composer.

EOD; $code1 = <<packageName} @@ -179,7 +175,7 @@ EOD;

When you have finished development register your extension at packagist.org.

EOD; - $return = $output1 . '
' . highlight_string($code1, true) . '
'; + $return = $output1 . '
' . highlight_string($code1, true) . '
'; $return .= $output2 . '
' . highlight_string($code2, true) . '
'; $return .= $output3 . '
' . highlight_string($code3, true) . '
'; $return .= $output4 . '
' . highlight_string($code4, true) . '
'; diff --git a/extensions/gii/generators/extension/templates/README.md b/extensions/gii/generators/extension/templates/README.md index 99de991924..c2934943fe 100644 --- a/extensions/gii/generators/extension/templates/README.md +++ b/extensions/gii/generators/extension/templates/README.md @@ -12,13 +12,13 @@ The preferred way to install this extension is through [composer](http://getcomp Either run ``` -php composer.phar require --prefer-dist vendorName ?>/yii2-packageName ?> "*" +php composer.phar require --prefer-dist vendorName ?>/packageName ?> "*" ``` or add ``` -"vendorName ?>/yii2-packageName ?>": "*" +"vendorName ?>/packageName ?>": "*" ``` to the require section of your `composer.json` file. From 3bd6c1ac27c59fe5a8acca2911b8ea35f57e8a67 Mon Sep 17 00:00:00 2001 From: Tobias Munk Date: Wed, 26 Feb 2014 00:49:28 +0100 Subject: [PATCH 7/8] updated CHANGELOG --- framework/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index 68ab2d8310..4e960dbf3b 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -116,6 +116,7 @@ Yii Framework 2 Change Log - Enh #2364: Take into account current error reporting level in error handler (gureedo) - Enh #2387: Added support for fetching data from database in batches (nineinchnick, qiangxue) - Enh #2392: Added `addCssStyle()`, `removeCssStyle()`, `cssStyleFromArray()` and `cssStyleToArray()` to `Html` (qiangxue, kartik-v, Alex-Code) +- Enh #2411: Added Gii extension generator (schmunk42) - Enh #2417: Added possibility to set `dataType` for `$.ajax` call in yii.activeForm.js (Borales) - Enh #2436: Label of the attribute, which looks like `relatedModel.attribute`, will be received from the related model if it available (djagya) - Enh #2415: Added support for inverse relations (qiangxue) From 1d835e8aa6e6cb18f23760bcc4ab214b8b1020a5 Mon Sep 17 00:00:00 2001 From: Tobias Munk Date: Wed, 26 Feb 2014 00:50:34 +0100 Subject: [PATCH 8/8] fixed order --- framework/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index 4e960dbf3b..5cb5aac052 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -117,9 +117,9 @@ Yii Framework 2 Change Log - Enh #2387: Added support for fetching data from database in batches (nineinchnick, qiangxue) - Enh #2392: Added `addCssStyle()`, `removeCssStyle()`, `cssStyleFromArray()` and `cssStyleToArray()` to `Html` (qiangxue, kartik-v, Alex-Code) - Enh #2411: Added Gii extension generator (schmunk42) +- Enh #2415: Added support for inverse relations (qiangxue) - Enh #2417: Added possibility to set `dataType` for `$.ajax` call in yii.activeForm.js (Borales) - Enh #2436: Label of the attribute, which looks like `relatedModel.attribute`, will be received from the related model if it available (djagya) -- Enh #2415: Added support for inverse relations (qiangxue) - Enh #2490: `yii\db\Query::count()` and other query scalar methods now properly handle queries with GROUP BY clause (qiangxue) - Enh #2491: Added support for using the same base class name of search model and data model in Gii (qiangxue) - Enh #2499: Added ability to downgrade migrations by their absolute apply time (resurtm, gorcer)