diff --git a/apps/advanced/backend/tests/_bootstrap.php b/apps/advanced/backend/tests/_bootstrap.php index ee6d24a8ba..da7a35d787 100644 --- a/apps/advanced/backend/tests/_bootstrap.php +++ b/apps/advanced/backend/tests/_bootstrap.php @@ -2,14 +2,14 @@ // the entry script URL (without host info) for functional and acceptance tests // PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL -defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/backend/web/index-test.php'); +defined('TEST_ENTRY_URL') ?: define('TEST_ENTRY_URL', '/backend/web/index-test.php'); // the entry script file path for functional and acceptance tests -defined('TEST_ENTRY_FILE') or define('TEST_ENTRY_FILE', dirname(__DIR__) . '/web/index-test.php'); +defined('TEST_ENTRY_FILE') ?: define('TEST_ENTRY_FILE', dirname(__DIR__) . '/web/index-test.php'); -defined('YII_DEBUG') or define('YII_DEBUG', true); +defined('YII_DEBUG') ?: define('YII_DEBUG', true); -defined('YII_ENV') or define('YII_ENV', 'test'); +defined('YII_ENV') ?: define('YII_ENV', 'test'); require_once(__DIR__ . '/../../vendor/autoload.php'); diff --git a/apps/advanced/backend/tests/_console.php b/apps/advanced/backend/tests/_console.php index b38c84efdb..2486123dca 100644 --- a/apps/advanced/backend/tests/_console.php +++ b/apps/advanced/backend/tests/_console.php @@ -8,12 +8,12 @@ */ // fcgi doesn't have STDIN and STDOUT defined by default -defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); -defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w')); +defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r')); +defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w')); require_once(__DIR__ . '/../../vendor/autoload.php'); require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php'); require_once(__DIR__ . '/../../common/config/aliases.php'); -defined('YII_DEBUG') or define('YII_DEBUG', true); -defined('YII_ENV') or define('YII_ENV', 'test'); +defined('YII_DEBUG') ?: define('YII_DEBUG', true); +defined('YII_ENV') ?: define('YII_ENV', 'test'); diff --git a/apps/advanced/backend/tests/acceptance/yii b/apps/advanced/backend/tests/acceptance/yii index a348a9ae7d..2c5d2801e5 100644 --- a/apps/advanced/backend/tests/acceptance/yii +++ b/apps/advanced/backend/tests/acceptance/yii @@ -9,8 +9,8 @@ */ // fcgi doesn't have STDIN and STDOUT defined by default -defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); -defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w')); +defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r')); +defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w')); require_once(__DIR__ . '/../_console.php'); diff --git a/apps/advanced/backend/tests/functional/yii b/apps/advanced/backend/tests/functional/yii index a348a9ae7d..2c5d2801e5 100644 --- a/apps/advanced/backend/tests/functional/yii +++ b/apps/advanced/backend/tests/functional/yii @@ -9,8 +9,8 @@ */ // fcgi doesn't have STDIN and STDOUT defined by default -defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); -defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w')); +defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r')); +defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w')); require_once(__DIR__ . '/../_console.php'); diff --git a/apps/advanced/backend/tests/unit/yii b/apps/advanced/backend/tests/unit/yii index a348a9ae7d..2c5d2801e5 100644 --- a/apps/advanced/backend/tests/unit/yii +++ b/apps/advanced/backend/tests/unit/yii @@ -9,8 +9,8 @@ */ // fcgi doesn't have STDIN and STDOUT defined by default -defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); -defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w')); +defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r')); +defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w')); require_once(__DIR__ . '/../_console.php'); diff --git a/apps/advanced/common/mail/layouts/html.php b/apps/advanced/common/mail/layouts/html.php index 2e6b615f58..8e2707dc5d 100644 --- a/apps/advanced/common/mail/layouts/html.php +++ b/apps/advanced/common/mail/layouts/html.php @@ -1,10 +1,9 @@ beginPage() ?> diff --git a/apps/advanced/common/tests/_bootstrap.php b/apps/advanced/common/tests/_bootstrap.php index c64ad3be72..9ffbe8f006 100644 --- a/apps/advanced/common/tests/_bootstrap.php +++ b/apps/advanced/common/tests/_bootstrap.php @@ -2,14 +2,14 @@ // the entry script URL (without host info) for functional and acceptance tests // PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL -defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/index-test.php'); +defined('TEST_ENTRY_URL') ?: define('TEST_ENTRY_URL', '/index-test.php'); // the entry script file path for functional and acceptance tests -defined('TEST_ENTRY_FILE') or define('TEST_ENTRY_FILE', dirname(__DIR__) . '/index-test.php'); +defined('TEST_ENTRY_FILE') ?: define('TEST_ENTRY_FILE', dirname(__DIR__) . '/index-test.php'); -defined('YII_DEBUG') or define('YII_DEBUG', true); +defined('YII_DEBUG') ?: define('YII_DEBUG', true); -defined('YII_ENV') or define('YII_ENV', 'test'); +defined('YII_ENV') ?: define('YII_ENV', 'test'); require_once(__DIR__ . '/../../vendor/autoload.php'); diff --git a/apps/advanced/common/tests/_console.php b/apps/advanced/common/tests/_console.php index b38c84efdb..2486123dca 100644 --- a/apps/advanced/common/tests/_console.php +++ b/apps/advanced/common/tests/_console.php @@ -8,12 +8,12 @@ */ // fcgi doesn't have STDIN and STDOUT defined by default -defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); -defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w')); +defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r')); +defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w')); require_once(__DIR__ . '/../../vendor/autoload.php'); require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php'); require_once(__DIR__ . '/../../common/config/aliases.php'); -defined('YII_DEBUG') or define('YII_DEBUG', true); -defined('YII_ENV') or define('YII_ENV', 'test'); +defined('YII_DEBUG') ?: define('YII_DEBUG', true); +defined('YII_ENV') ?: define('YII_ENV', 'test'); diff --git a/apps/advanced/common/tests/unit/yii b/apps/advanced/common/tests/unit/yii index a348a9ae7d..2c5d2801e5 100644 --- a/apps/advanced/common/tests/unit/yii +++ b/apps/advanced/common/tests/unit/yii @@ -9,8 +9,8 @@ */ // fcgi doesn't have STDIN and STDOUT defined by default -defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); -defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w')); +defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r')); +defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w')); require_once(__DIR__ . '/../_console.php'); diff --git a/apps/advanced/console/tests/_bootstrap.php b/apps/advanced/console/tests/_bootstrap.php index c64ad3be72..9ffbe8f006 100644 --- a/apps/advanced/console/tests/_bootstrap.php +++ b/apps/advanced/console/tests/_bootstrap.php @@ -2,14 +2,14 @@ // the entry script URL (without host info) for functional and acceptance tests // PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL -defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/index-test.php'); +defined('TEST_ENTRY_URL') ?: define('TEST_ENTRY_URL', '/index-test.php'); // the entry script file path for functional and acceptance tests -defined('TEST_ENTRY_FILE') or define('TEST_ENTRY_FILE', dirname(__DIR__) . '/index-test.php'); +defined('TEST_ENTRY_FILE') ?: define('TEST_ENTRY_FILE', dirname(__DIR__) . '/index-test.php'); -defined('YII_DEBUG') or define('YII_DEBUG', true); +defined('YII_DEBUG') ?: define('YII_DEBUG', true); -defined('YII_ENV') or define('YII_ENV', 'test'); +defined('YII_ENV') ?: define('YII_ENV', 'test'); require_once(__DIR__ . '/../../vendor/autoload.php'); diff --git a/apps/advanced/console/tests/_console.php b/apps/advanced/console/tests/_console.php index b38c84efdb..2486123dca 100644 --- a/apps/advanced/console/tests/_console.php +++ b/apps/advanced/console/tests/_console.php @@ -8,12 +8,12 @@ */ // fcgi doesn't have STDIN and STDOUT defined by default -defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); -defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w')); +defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r')); +defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w')); require_once(__DIR__ . '/../../vendor/autoload.php'); require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php'); require_once(__DIR__ . '/../../common/config/aliases.php'); -defined('YII_DEBUG') or define('YII_DEBUG', true); -defined('YII_ENV') or define('YII_ENV', 'test'); +defined('YII_DEBUG') ?: define('YII_DEBUG', true); +defined('YII_ENV') ?: define('YII_ENV', 'test'); diff --git a/apps/advanced/console/tests/unit/yii b/apps/advanced/console/tests/unit/yii index a348a9ae7d..2c5d2801e5 100644 --- a/apps/advanced/console/tests/unit/yii +++ b/apps/advanced/console/tests/unit/yii @@ -9,8 +9,8 @@ */ // fcgi doesn't have STDIN and STDOUT defined by default -defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); -defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w')); +defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r')); +defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w')); require_once(__DIR__ . '/../_console.php'); diff --git a/apps/advanced/environments/dev/backend/web/index-test.php b/apps/advanced/environments/dev/backend/web/index-test.php index 1cd07941dc..81009d2f1c 100644 --- a/apps/advanced/environments/dev/backend/web/index-test.php +++ b/apps/advanced/environments/dev/backend/web/index-test.php @@ -5,8 +5,8 @@ if (!in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'])) { die('You are not allowed to access this file.'); } -defined('YII_DEBUG') or define('YII_DEBUG', true); -defined('YII_ENV') or define('YII_ENV', 'test'); +defined('YII_DEBUG') ?: define('YII_DEBUG', true); +defined('YII_ENV') ?: define('YII_ENV', 'test'); require(__DIR__ . '/../../vendor/autoload.php'); require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php'); diff --git a/apps/advanced/environments/dev/backend/web/index.php b/apps/advanced/environments/dev/backend/web/index.php index ed8e69f8b9..424878727e 100644 --- a/apps/advanced/environments/dev/backend/web/index.php +++ b/apps/advanced/environments/dev/backend/web/index.php @@ -1,6 +1,6 @@ beginPage() ?> diff --git a/apps/basic/tests/_bootstrap.php b/apps/basic/tests/_bootstrap.php index 4890b3ed7a..7db3cfdb9b 100644 --- a/apps/basic/tests/_bootstrap.php +++ b/apps/basic/tests/_bootstrap.php @@ -2,14 +2,14 @@ // the entry script URL (without host info) for functional and acceptance tests // PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL -defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/basic/web/index-test.php'); +defined('TEST_ENTRY_URL') ?: define('TEST_ENTRY_URL', '/basic/web/index-test.php'); // the entry script file path for functional and acceptance tests -defined('TEST_ENTRY_FILE') or define('TEST_ENTRY_FILE', dirname(__DIR__) . '/web/index-test.php'); +defined('TEST_ENTRY_FILE') ?: define('TEST_ENTRY_FILE', dirname(__DIR__) . '/web/index-test.php'); -defined('YII_DEBUG') or define('YII_DEBUG', true); +defined('YII_DEBUG') ?: define('YII_DEBUG', true); -defined('YII_ENV') or define('YII_ENV', 'test'); +defined('YII_ENV') ?: define('YII_ENV', 'test'); require_once(__DIR__ . '/../vendor/autoload.php'); diff --git a/apps/basic/tests/_console_bootstrap.php b/apps/basic/tests/_console_bootstrap.php index 81287f3d86..1eb06446bd 100644 --- a/apps/basic/tests/_console_bootstrap.php +++ b/apps/basic/tests/_console_bootstrap.php @@ -1,12 +1,12 @@ js[] = 'language-' . Yii::$app->language . '.js'; - parent::init(); - } + public function registerAssetFiles($view) + { + $language = $this->language ? $this->language : Yii::$app->language; + $this->js[] = 'language-' . $language . '.js'; + parent::registerAssetFiles($view); + } } ``` +In order to set language use the following code when registering an asset bundle in a view: + +```php +LanguageAsset::register($this)->language = $language; +``` + Registering asset bundle ------------------------ @@ -114,6 +122,10 @@ To register an asset inside of a widget, the view instance is available as `$thi AppAsset::register($this->view); ``` +> Note: If there is a need to modify third party asset bundles it is recommended to create your own bundles depending + on third party ones and use CSS and JavaScript features to modify behavior instead of editing files directly or + copying them over. + Overriding asset bundles ------------------------ diff --git a/docs/guide/configuration.md b/docs/guide/configuration.md index 4c82ecd8a6..eca50a1a44 100644 --- a/docs/guide/configuration.md +++ b/docs/guide/configuration.md @@ -24,14 +24,14 @@ Like any resource in your Yii application, the bootstrap file can be edited to f The default bootstrap structure sets `YII_DEBUG` to `false` if not defined: ```php -defined('YII_DEBUG') or define('YII_DEBUG', false); +defined('YII_DEBUG') ?: define('YII_DEBUG', false); ``` During development, you can change this to `true`: ```php define('YII_DEBUG', true); // Development only -defined('YII_DEBUG') or define('YII_DEBUG', false); +defined('YII_DEBUG') ?: define('YII_DEBUG', false); ``` Configuring the application instance diff --git a/docs/guide/console.md b/docs/guide/console.md index 91f2616b32..8b36eda531 100644 --- a/docs/guide/console.md +++ b/docs/guide/console.md @@ -40,11 +40,11 @@ code like the following: * @license http://www.yiiframework.com/license/ */ -defined('YII_DEBUG') or define('YII_DEBUG', true); +defined('YII_DEBUG') ?: define('YII_DEBUG', true); // fcgi doesn't have STDIN and STDOUT defined by default -defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); -defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w')); +defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r')); +defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w')); require(__DIR__ . '/vendor/autoload.php'); require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); diff --git a/docs/guide/module-debug.md b/docs/guide/module-debug.md index 916101c105..0ecf347247 100644 --- a/docs/guide/module-debug.md +++ b/docs/guide/module-debug.md @@ -76,7 +76,7 @@ return [ By default it's automatically set to `3` if Yii is run in debug mode i.e. your `index.php` file contains the following: ```php -defined('YII_DEBUG') or define('YII_DEBUG', true); +defined('YII_DEBUG') ?: define('YII_DEBUG', true); ``` > Note: Make sure to disable debug mode on production since it may have significan performance effect and expose sensible diff --git a/docs/guide/performance.md b/docs/guide/performance.md index 9eb8ccfff9..40eb3802f4 100644 --- a/docs/guide/performance.md +++ b/docs/guide/performance.md @@ -28,7 +28,7 @@ is to disable debug mode. A Yii application runs in debug mode if the constant should be in your `index.php`: ```php -defined('YII_DEBUG') or define('YII_DEBUG', false); +defined('YII_DEBUG') ?: define('YII_DEBUG', false); ``` Debug mode is very useful during development stage, but it would impact performance diff --git a/docs/guide/theming.md b/docs/guide/theming.md index e627f7cb60..037e70c8f9 100644 --- a/docs/guide/theming.md +++ b/docs/guide/theming.md @@ -1,7 +1,12 @@ Theming ======= -TBD +A theme is a directory of view and layout files. Each file of the theme overrides corresponding file of an application +when rendered. A single application may use multiple themes and each may provide totally different experience. At any +time only one theme can be active. + +> Note: Themes usually do not meant to be redistributed since views are too application specific. If you want to + redistribute customized look and feel consider CSS and JavaScript files in form of [asset bundles](assets.md) instead. Configuring current theme ------------------------- @@ -18,4 +23,27 @@ be in your application config file: ], ], ], -``` \ No newline at end of file +``` + +In the above `pathMap` defines where to look for view files while `baseUrl` defines base URL for resources referenced +from these files. For example, if `pathMap` is `['/web/views' => '/web/themes/basic']`, then the themed version +for a view file `/web/views/site/index.php` will be `/web/themes/basic/site/index.php`. + +Using multiple paths +-------------------- + +It is possible to map a single path to multiple paths. For example, + +```php +'pathMap' => [ + '/web/views' => [ + '/web/themes/christmas', + '/web/themes/basic', + ], +] +``` + +In this case, the view will be searched in `/web/themes/christmas/site/index.php` then if it's not found it will check +`/web/themes/basic/site/index.php`. If there's no view there as well application view will be used. + +This ability is especially useful if you want to temporary or conditionally override some views. diff --git a/extensions/apidoc/apidoc b/extensions/apidoc/apidoc index 27a10af667..40da46b124 100755 --- a/extensions/apidoc/apidoc +++ b/extensions/apidoc/apidoc @@ -8,7 +8,7 @@ * @license http://www.yiiframework.com/license/ */ -defined('YII_DEBUG') or define('YII_DEBUG', false); +defined('YII_DEBUG') ?: define('YII_DEBUG', false); $composerAutoload = [ __DIR__ . '/vendor/autoload.php', // standalone with "composer install" run diff --git a/extensions/debug/views/default/panels/config/detail.php b/extensions/debug/views/default/panels/config/detail.php index 88e96a1594..b2cfde1950 100644 --- a/extensions/debug/views/default/panels/config/detail.php +++ b/extensions/debug/views/default/panels/config/detail.php @@ -1,6 +1,4 @@ tableName, '*')) !== false && substr($this->tableName, -1) !== '*') { + if (strpos($this->tableName, '*') !== false && substr($this->tableName, -1) !== '*') { $this->addError('tableName', 'Asterisk is only allowed as the last character.'); return; } diff --git a/extensions/gii/views/default/view/files.php b/extensions/gii/views/default/view/files.php index 947c8f87bf..04075e4946 100644 --- a/extensions/gii/views/default/view/files.php +++ b/extensions/gii/views/default/view/files.php @@ -81,7 +81,14 @@ use yii\gii\CodeFile;