Commit d2c84606 by Qiang Xue

Fixes #2775: Added `yii\base\Application::bootstrap` to support running…

Fixes #2775: Added `yii\base\Application::bootstrap` to support running bootstrap classes when starting an application
parent 6b8107da
...@@ -114,9 +114,11 @@ There are several classes provided by framework: ...@@ -114,9 +114,11 @@ There are several classes provided by framework:
- FileHelper - FileHelper
- Html - Html
- HtmlPurifier - HtmlPurifier
- Image
- Inflector - Inflector
- Json - Json
- Markdown - Markdown
- Security - Security
- StringHelper - StringHelper
- Url
- VarDumper - VarDumper
...@@ -19,7 +19,7 @@ Creating URLs ...@@ -19,7 +19,7 @@ Creating URLs
------------- -------------
The most important rule for creating URLs in your site is to always do so using the URL manager. The URL manager is a built-in application component named `urlManager`. This component is accessible from both web and console applications via The most important rule for creating URLs in your site is to always do so using the URL manager. The URL manager is a built-in application component named `urlManager`. This component is accessible from both web and console applications via
`\Yii::$app->urlManager`. The component makes availabe the two following URL creation methods: `\Yii::$app->urlManager`. The component makes available the two following URL creation methods:
- `createUrl($params)` - `createUrl($params)`
- `createAbsoluteUrl($params, $schema = null)` - `createAbsoluteUrl($params, $schema = null)`
......
...@@ -148,6 +148,7 @@ Yii Framework 2 Change Log ...@@ -148,6 +148,7 @@ Yii Framework 2 Change Log
- Enh #2729: Added `FilterValidator::skipOnArray` so that filters like `trim` will not fail for array inputs (qiangxue) - Enh #2729: Added `FilterValidator::skipOnArray` so that filters like `trim` will not fail for array inputs (qiangxue)
- Enh #2735: Added support for `DateTimeInterface` in `Formatter` (ivokund) - Enh #2735: Added support for `DateTimeInterface` in `Formatter` (ivokund)
- Enh #2756: Added support for injecting custom `isEmpty` check for all validators (qiangxue) - Enh #2756: Added support for injecting custom `isEmpty` check for all validators (qiangxue)
- Enh #2775: Added `yii\base\Application::bootstrap` to support running bootstrap classes when starting an application (qiangxue)
- Enh: Added support for using arrays as option values for console commands (qiangxue) - Enh: Added support for using arrays as option values for console commands (qiangxue)
- Enh: Added `favicon.ico` and `robots.txt` to default application templates (samdark) - Enh: Added `favicon.ico` and `robots.txt` to default application templates (samdark)
- Enh: Added `Widget::autoIdPrefix` to support prefixing automatically generated widget IDs (qiangxue) - Enh: Added `Widget::autoIdPrefix` to support prefixing automatically generated widget IDs (qiangxue)
...@@ -243,6 +244,7 @@ Yii Framework 2 Change Log ...@@ -243,6 +244,7 @@ Yii Framework 2 Change Log
- Renamed `yii\web\User::returnUrlVar` to `returnUrlParam` - Renamed `yii\web\User::returnUrlVar` to `returnUrlParam`
- Chg: Added `View::viewFile` and removed `ViewEvent::viewFile` (qiangxue) - Chg: Added `View::viewFile` and removed `ViewEvent::viewFile` (qiangxue)
- Chg: Changed `Controller::afterAction()`, `Module::afterAction()` and `ActionFilter::afterAction()` to pass `$result` by value instead of reference (qiangxue) - Chg: Changed `Controller::afterAction()`, `Module::afterAction()` and `ActionFilter::afterAction()` to pass `$result` by value instead of reference (qiangxue)
- Chg: `yii\base\Extension::init()` is renamed to `bootstrap()` (qiangxue)
- New #66: [Auth client library](https://github.com/yiisoft/yii2-authclient) OpenId, OAuth1, OAuth2 clients (klimov-paul) - New #66: [Auth client library](https://github.com/yiisoft/yii2-authclient) OpenId, OAuth1, OAuth2 clients (klimov-paul)
- New #706: Added `yii\widgets\Pjax` and enhanced `GridView` to work with `Pjax` to support AJAX-update (qiangxue) - New #706: Added `yii\widgets\Pjax` and enhanced `GridView` to work with `Pjax` to support AJAX-update (qiangxue)
- New #1393: [Codeception testing framework integration](https://github.com/yiisoft/yii2-codeception) (Ragazzo) - New #1393: [Codeception testing framework integration](https://github.com/yiisoft/yii2-codeception) (Ragazzo)
......
...@@ -133,6 +133,11 @@ abstract class Application extends Module ...@@ -133,6 +133,11 @@ abstract class Application extends Module
*/ */
public $extensions = []; public $extensions = [];
/** /**
* @var array list of bootstrap classes. A bootstrap class must have a public static method named
* `bootstrap()`. The method will be called during [[init()]] for every bootstrap class.
*/
public $bootstrap = [];
/**
* @var \Exception the exception that is being handled currently. When this is not null, * @var \Exception the exception that is being handled currently. When this is not null,
* it means the application is handling some exception and extra care should be taken. * it means the application is handling some exception and extra care should be taken.
*/ */
...@@ -209,6 +214,10 @@ abstract class Application extends Module ...@@ -209,6 +214,10 @@ abstract class Application extends Module
public function init() public function init()
{ {
$this->initExtensions($this->extensions); $this->initExtensions($this->extensions);
foreach ($this->bootstrap as $class) {
/** @var Extension $class */
$class::bootstrap();
}
parent::init(); parent::init();
} }
...@@ -228,7 +237,7 @@ abstract class Application extends Module ...@@ -228,7 +237,7 @@ abstract class Application extends Module
if (isset($extension['bootstrap'])) { if (isset($extension['bootstrap'])) {
/** @var Extension $class */ /** @var Extension $class */
$class = $extension['bootstrap']; $class = $extension['bootstrap'];
$class::init(); $class::bootstrap();
} }
} }
} }
......
...@@ -11,7 +11,7 @@ namespace yii\base; ...@@ -11,7 +11,7 @@ namespace yii\base;
* Extension is the base class that may be extended by individual extensions. * Extension is the base class that may be extended by individual extensions.
* *
* Extension serves as the bootstrap class for extensions. When an extension * Extension serves as the bootstrap class for extensions. When an extension
* is installed via composer, the [[init()]] method of its Extension class (if any) * is installed via composer, the [[bootstrap()]] method of its Extension class (if any)
* will be invoked during the application initialization stage. * will be invoked during the application initialization stage.
* *
* @author Qiang Xue <qiang.xue@gmail.com> * @author Qiang Xue <qiang.xue@gmail.com>
...@@ -21,9 +21,9 @@ class Extension ...@@ -21,9 +21,9 @@ class Extension
{ {
/** /**
* Initializes the extension. * Initializes the extension.
* This method is invoked at the end of [[Application::init()]]. * This method is invoked at the beginning of [[Application::init()]].
*/ */
public static function init() public static function bootstrap()
{ {
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment