Browse Source

Merged master

tags/3.0.0-alpha1
Alexander Makarov 7 years ago
parent
commit
66095fb89a
No known key found for this signature in database
GPG Key ID: 3617B79C6A325E4A
  1. 27
      .php_cs
  2. 153
      .travis.yml
  3. 4
      build/build
  4. 65
      build/controllers/PhpDocController.php
  5. 104
      build/controllers/ReleaseController.php
  6. 2
      build/controllers/TranslationController.php
  7. 36
      build/controllers/Utf8Controller.php
  8. 10
      composer.json
  9. 1377
      composer.lock
  10. 1
      cs/TODO.md
  11. 174
      cs/src/YiiConfig.php
  12. 39
      cs/src/YiisoftConfig.php
  13. 4
      docs/guide-es/concept-autoloading.md
  14. 2
      docs/guide-es/concept-behaviors.md
  15. 14
      docs/guide-es/concept-components.md
  16. 10
      docs/guide-es/concept-configurations.md
  17. 10
      docs/guide-es/concept-di-container.md
  18. 2
      docs/guide-es/concept-events.md
  19. 10
      docs/guide-es/concept-properties.md
  20. 16
      docs/guide-es/intro-upgrade-from-v1.md
  21. 2
      docs/guide-es/runtime-responses.md
  22. 4
      docs/guide-es/runtime-routing.md
  23. 6
      docs/guide-es/structure-applications.md
  24. 2
      docs/guide-es/structure-assets.md
  25. 12
      docs/guide-es/structure-entry-scripts.md
  26. 2
      docs/guide-es/structure-extensions.md
  27. 2
      docs/guide-es/structure-modules.md
  28. 18
      docs/guide-es/tutorial-yii-integration.md
  29. 4
      docs/guide-fr/concept-autoloading.md
  30. 2
      docs/guide-fr/concept-behaviors.md
  31. 14
      docs/guide-fr/concept-components.md
  32. 8
      docs/guide-fr/concept-configurations.md
  33. 12
      docs/guide-fr/concept-di-container.md
  34. 2
      docs/guide-fr/concept-events.md
  35. 10
      docs/guide-fr/concept-properties.md
  36. 16
      docs/guide-fr/intro-upgrade-from-v1.md
  37. 2
      docs/guide-fr/runtime-responses.md
  38. 4
      docs/guide-fr/runtime-routing.md
  39. 6
      docs/guide-fr/structure-applications.md
  40. 2
      docs/guide-fr/structure-assets.md
  41. 12
      docs/guide-fr/structure-entry-scripts.md
  42. 2
      docs/guide-fr/structure-extensions.md
  43. 2
      docs/guide-fr/structure-modules.md
  44. 16
      docs/guide-id/intro-upgrade-from-v1.md
  45. 6
      docs/guide-id/structure-applications.md
  46. 12
      docs/guide-id/structure-entry-scripts.md
  47. 16
      docs/guide-it/intro-upgrade-from-v1.md
  48. 4
      docs/guide-ja/concept-autoloading.md
  49. 2
      docs/guide-ja/concept-behaviors.md
  50. 14
      docs/guide-ja/concept-components.md
  51. 12
      docs/guide-ja/concept-configurations.md
  52. 12
      docs/guide-ja/concept-di-container.md
  53. 2
      docs/guide-ja/concept-events.md
  54. 12
      docs/guide-ja/concept-properties.md
  55. 16
      docs/guide-ja/intro-upgrade-from-v1.md
  56. 2
      docs/guide-ja/runtime-responses.md
  57. 4
      docs/guide-ja/runtime-routing.md
  58. 6
      docs/guide-ja/structure-applications.md
  59. 2
      docs/guide-ja/structure-assets.md
  60. 12
      docs/guide-ja/structure-entry-scripts.md
  61. 2
      docs/guide-ja/structure-extensions.md
  62. 2
      docs/guide-ja/structure-modules.md
  63. 6
      docs/guide-ja/tutorial-console.md
  64. 18
      docs/guide-ja/tutorial-yii-integration.md
  65. 4
      docs/guide-pl/concept-autoloading.md
  66. 14
      docs/guide-pl/concept-components.md
  67. 14
      docs/guide-pl/intro-upgrade-from-v1.md
  68. 12
      docs/guide-pl/structure-entry-scripts.md
  69. 4
      docs/guide-pt-BR/concept-autoloading.md
  70. 2
      docs/guide-pt-BR/concept-behaviors.md
  71. 14
      docs/guide-pt-BR/concept-components.md
  72. 8
      docs/guide-pt-BR/concept-configurations.md
  73. 12
      docs/guide-pt-BR/concept-di-container.md
  74. 2
      docs/guide-pt-BR/concept-events.md
  75. 8
      docs/guide-pt-BR/concept-properties.md
  76. 16
      docs/guide-pt-BR/intro-upgrade-from-v1.md
  77. 4
      docs/guide-pt-BR/runtime-routing.md
  78. 6
      docs/guide-pt-BR/structure-applications.md
  79. 2
      docs/guide-pt-BR/structure-assets.md
  80. 12
      docs/guide-pt-BR/structure-entry-scripts.md
  81. 2
      docs/guide-pt-BR/structure-extensions.md
  82. 2
      docs/guide-pt-BR/structure-modules.md
  83. 18
      docs/guide-pt-BR/tutorial-yii-integration.md
  84. 2
      docs/guide-ru/README.md
  85. 4
      docs/guide-ru/concept-autoloading.md
  86. 4
      docs/guide-ru/concept-behaviors.md
  87. 14
      docs/guide-ru/concept-components.md
  88. 10
      docs/guide-ru/concept-configurations.md
  89. 14
      docs/guide-ru/concept-di-container.md
  90. 2
      docs/guide-ru/concept-events.md
  91. 12
      docs/guide-ru/concept-properties.md
  92. 53
      docs/guide-ru/helper-array.md
  93. 4
      docs/guide-ru/input-validation.md
  94. 16
      docs/guide-ru/intro-upgrade-from-v1.md
  95. 2
      docs/guide-ru/runtime-responses.md
  96. 4
      docs/guide-ru/runtime-routing.md
  97. 10
      docs/guide-ru/start-installation.md
  98. 6
      docs/guide-ru/structure-applications.md
  99. 79
      docs/guide-ru/structure-assets.md
  100. 12
      docs/guide-ru/structure-entry-scripts.md
  101. Some files were not shown because too many files have changed in this diff Show More

27
.php_cs

@ -0,0 +1,27 @@
<?php
if (!class_exists('yii\cs\YiisoftConfig', true)) {
// @todo change error message
fwrite(STDERR, "Your php-cs-version is outdated: please upgrade it.\n");
die(16);
}
return yii\cs\YiisoftConfig::create()
->setCacheFile(__DIR__ . '/tests/runtime/php_cs.cache')
->mergeRules([
'braces' => [
'allow_single_line_closure' => true,
],
])
->setFinder(
PhpCsFixer\Finder::create()
->in(__DIR__)
->exclude('docs')
->exclude('apps')
->exclude('extensions')
// requirement checker should work even on PHP 4.3, so it needs special treatment
->exclude('framework/requirements')
->notPath('framework/classes.php')
->notPath('framework/helpers/mimeTypes.php')
->notPath('framework/views/messageConfig.php')
);

153
.travis.yml

@ -23,37 +23,12 @@ sudo: false
language: php language: php
php: env:
- 7.1 global:
- nightly - DEFAULT_COMPOSER_FLAGS="--prefer-dist --no-interaction --no-progress --optimize-autoloader"
- TASK_TESTS_PHP=1
matrix: - TASK_TESTS_JS=0
fast_finish: true - TASK_TESTS_COVERAGE=0
include:
# have a separate branch for javascript tests
- language: node_js
node_js: 6
dist: trusty
# overwrite php related settings
php:
services:
addons:
install:
- travis_retry npm install
# disable xdebug for performance in composer
- phpenv config-rm xdebug.ini || echo "xdebug is not installed"
- travis_retry composer self-update && composer --version
- travis_retry composer install --prefer-dist --no-interaction
before_script:
- node --version
- npm --version
- php --version
- composer --version
script: npm test
after_script:
allow_failures:
- php: nightly
services: services:
@ -74,44 +49,108 @@ addons:
code_climate: code_climate:
repo_token: 2935307212620b0e2228ab67eadd92c9f5501ddb60549d0d86007a354d56915b repo_token: 2935307212620b0e2228ab67eadd92c9f5501ddb60549d0d86007a354d56915b
matrix:
fast_finish: true
include:
# run tests coverage on PHP 7.1
- php: 7.1
env: TASK_TESTS_COVERAGE=1
- php: nightly
# have a separate branch for javascript tests
- language: node_js
node_js: 6
env: TASK_TESTS_PHP=0 TASK_TESTS_JS=1
dist: trusty
# overwrite services used for PHP tests
services:
allow_failures:
- php: nightly
install: install:
- travis_retry composer self-update && composer --version - |
if [[ $TASK_TESTS_COVERAGE != 1 && $TRAVIS_PHP_VERSION != hhv* ]]; then
# disable xdebug for performance reasons when code coverage is not needed. note: xdebug on hhvm is disabled by default
phpenv config-rm xdebug.ini || echo "xdebug is not installed"
fi
# install composer dependencies
- travis_retry composer self-update
- export PATH="$HOME/.composer/vendor/bin:$PATH" - export PATH="$HOME/.composer/vendor/bin:$PATH"
# core framework: - |
- travis_retry composer install --prefer-dist --no-interaction if [[ $TRAVIS_PHP_VERSION == "hhvm-3.12" ]]; then
- tests/data/travis/apc-setup.sh # remove php-cs-fixer from composer dependencies on hhvm-3.12 - php-cs-fixer requires at least hhvm-3.18
- tests/data/travis/memcache-setup.sh composer remove friendsofphp/php-cs-fixer --dev
- tests/data/travis/imagick-setup.sh fi
- travis_retry composer install $DEFAULT_COMPOSER_FLAGS
# setup PHP extension
- |
if [ $TASK_TESTS_PHP == 1 ]; then
tests/data/travis/apc-setup.sh
tests/data/travis/memcache-setup.sh
tests/data/travis/imagick-setup.sh
fi
# setup JS test
- |
if [ $TASK_TESTS_JS == 1 ]; then
travis_retry npm install
fi
before_script: before_script:
# Disable the HHVM JIT for faster Unit Testing
- if [[ $TRAVIS_PHP_VERSION = hhv* ]]; then echo 'hhvm.jit = 0' >> /etc/hhvm/php.ini; fi
# show some versions and env information # show some versions and env information
- php -r "echo INTL_ICU_VERSION . \"\n\";" - php --version
- php -r "echo INTL_ICU_DATA_VERSION . \"\n\";" - composer --version
- mysql --version - |
- psql --version if [ $TASK_TESTS_PHP == 1 ]; then
php -r "echo INTL_ICU_VERSION . \"\n\";"
php -r "echo INTL_ICU_DATA_VERSION . \"\n\";"
psql --version
mysql --version
fi
- |
if [ $TASK_TESTS_JS == 1 ]; then
node --version
npm --version
fi
# initialize databases # initialize databases
- travis_retry mysql -e 'CREATE DATABASE `yiitest`;';
- mysql -e "CREATE USER 'travis'@'localhost' IDENTIFIED WITH mysql_native_password;";
- mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'travis'@'localhost' WITH GRANT OPTION;";
- psql -U postgres -c 'CREATE DATABASE yiitest;';
# enable code coverage on PHP 7.1, only one PHP version needs to generate coverage data
- | - |
if [ $TRAVIS_PHP_VERSION = '7.1' ]; then if [ $TASK_TESTS_PHP == 1 ]; then
PHPUNIT_FLAGS="--coverage-clover=coverage.clover" travis_retry mysql -e 'CREATE DATABASE `yiitest`;';
fi mysql -e "CREATE USER 'travis'@'localhost' IDENTIFIED WITH mysql_native_password;";
mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'travis'@'localhost' WITH GRANT OPTION;";
psql -U postgres -c 'CREATE DATABASE yiitest;';
fi
# enable code coverage
- |
if [ $TASK_TESTS_COVERAGE == 1 ]; then
PHPUNIT_FLAGS="--coverage-clover=coverage.clover"
fi
script: script:
# ensure no files contain UTF-8 byte order mark # PHP tests
- if ! grep -rlI $'\xEF\xBB\xBF' framework/ ; then echo "no utf8 BOM found"; else echo "found utf8 BOM in some files. See above."; exit 1; fi - |
# validate composer.json if [ $TASK_TESTS_PHP == 1 ]; then
- composer validate --no-check-lock vendor/bin/phpunit --verbose $PHPUNIT_FLAGS --exclude-group mssql,oci,wincache,xcache,zenddata,cubrid
- cd framework && composer validate --no-check-lock && cd .. fi
# run PHPUnit
- vendor/bin/phpunit --verbose $PHPUNIT_FLAGS --exclude-group mssql,oci,wincache,xcache,zenddata,cubrid # JS tests
- |
if [ $TASK_TESTS_JS == 1 ]; then
npm test
fi
after_script: after_script:
- | - |
if [ $TASK_TESTS_COVERAGE == 1 ]; then
travis_retry wget https://scrutinizer-ci.com/ocular.phar travis_retry wget https://scrutinizer-ci.com/ocular.phar
php ocular.phar code-coverage:upload --format=php-clover coverage.clover php ocular.phar code-coverage:upload --format=php-clover coverage.clover
fi

4
build/build

@ -17,7 +17,7 @@ $composerAutoload = [
foreach ($composerAutoload as $autoload) { foreach ($composerAutoload as $autoload) {
if (file_exists($autoload)) { if (file_exists($autoload)) {
require($autoload); require $autoload;
$vendorPath = dirname($autoload); $vendorPath = dirname($autoload);
break; break;
} }
@ -27,7 +27,7 @@ if (!isset($vendorPath)) {
echo "composer autoloader could not be found.\nYou should run `composer install` in repo root directory.\n"; echo "composer autoloader could not be found.\nYou should run `composer install` in repo root directory.\n";
exit(1); exit(1);
} }
require(__DIR__ . '/../framework/Yii.php'); require __DIR__ . '/../framework/Yii.php';
Yii::setAlias('@yii/build', __DIR__); Yii::setAlias('@yii/build', __DIR__);

65
build/controllers/PhpDocController.php

@ -103,7 +103,6 @@ class PhpDocController extends Controller
$this->stdout("\nParsed $nFilesTotal files.\n"); $this->stdout("\nParsed $nFilesTotal files.\n");
$this->stdout("Updated $nFilesUpdated files.\n"); $this->stdout("Updated $nFilesUpdated files.\n");
} }
/** /**
@ -173,14 +172,13 @@ class PhpDocController extends Controller
} }
} }
} elseif (preg_match('~extensions/([\w-]+)[\\\\/]?$~', $root, $matches)) { } elseif (preg_match('~extensions/([\w-]+)[\\\\/]?$~', $root, $matches)) {
$extensionPath = dirname(rtrim($root, '\\/')); $extensionPath = dirname(rtrim($root, '\\/'));
$this->setUpExtensionAliases($extensionPath); $this->setUpExtensionAliases($extensionPath);
$extension = $matches[1]; $extension = $matches[1];
Yii::setAlias("@yii/$extension", "$root"); Yii::setAlias("@yii/$extension", "$root");
if (is_file($autoloadFile = Yii::getAlias("@yii/$extension/vendor/autoload.php"))) { if (is_file($autoloadFile = Yii::getAlias("@yii/$extension/vendor/autoload.php"))) {
include($autoloadFile); include $autoloadFile;
} }
if (isset($extensionExcept[$extension])) { if (isset($extensionExcept[$extension])) {
@ -197,34 +195,32 @@ class PhpDocController extends Controller
// return []; // return [];
// } // }
} elseif (preg_match('~apps/([\w-]+)[\\\\/]?$~', $root, $matches)) { } elseif (preg_match('~apps/([\w-]+)[\\\\/]?$~', $root, $matches)) {
$extensionPath = dirname(dirname(rtrim($root, '\\/'))) . '/extensions'; $extensionPath = dirname(dirname(rtrim($root, '\\/'))) . '/extensions';
$this->setUpExtensionAliases($extensionPath); $this->setUpExtensionAliases($extensionPath);
$appName = $matches[1]; $appName = $matches[1];
Yii::setAlias("@app-$appName", "$root"); Yii::setAlias("@app-$appName", "$root");
if (is_file($autoloadFile = Yii::getAlias("@app-$appName/vendor/autoload.php"))) { if (is_file($autoloadFile = Yii::getAlias("@app-$appName/vendor/autoload.php"))) {
include($autoloadFile); include $autoloadFile;
} }
$except[] = '/runtime/'; $except[] = '/runtime/';
$except[] = '/vendor/'; $except[] = '/vendor/';
$except[] = '/tests/'; $except[] = '/tests/';
$except[] = '/docs/'; $except[] = '/docs/';
} }
$root = FileHelper::normalizePath($root); $root = FileHelper::normalizePath($root);
$options = [ $options = [
'filter' => function ($path) { 'filter' => function ($path) {
if (is_file($path)) { if (is_file($path)) {
$file = basename($path); $file = basename($path);
if ($file[0] < 'A' || $file[0] > 'Z') { if ($file[0] < 'A' || $file[0] > 'Z') {
return false; return false;
}
} }
}
return null; return null;
}, },
'only' => ['*.php'], 'only' => ['*.php'],
'except' => array_merge($except, [ 'except' => array_merge($except, [
'.git/', '.git/',
@ -274,15 +270,15 @@ class PhpDocController extends Controller
$contentAfterNamespace--; $contentAfterNamespace--;
} }
$lines = array_merge([ $lines = array_merge([
"<?php", '<?php',
"/**", '/**',
" * @link http://www.yiiframework.com/", ' * @link http://www.yiiframework.com/',
" * @copyright Copyright (c) 2008 Yii Software LLC", ' * @copyright Copyright (c) 2008 Yii Software LLC',
" * @license http://www.yiiframework.com/license/", ' * @license http://www.yiiframework.com/license/',
" */", ' */',
"", '',
$namespaceLine, $namespaceLine,
"" '',
], $lines); ], $lines);
} }
} }
@ -346,7 +342,7 @@ class PhpDocController extends Controller
protected function fixParamTypes($line) protected function fixParamTypes($line)
{ {
return preg_replace_callback('~@(param|return) ([\w\\|]+)~i', function($matches) { return preg_replace_callback('~@(param|return) ([\w\\|]+)~i', function ($matches) {
$types = explode('|', $matches[2]); $types = explode('|', $matches[2]);
foreach ($types as $i => $type) { foreach ($types as $i => $type) {
switch ($type) { switch ($type) {
@ -412,7 +408,7 @@ class PhpDocController extends Controller
// check for multi line array // check for multi line array
if ($level > 0) { if ($level > 0) {
${'endof'.$property} = $i; ${'endof' . $property} = $i;
} }
$line = trim($line); $line = trim($line);
@ -448,8 +444,8 @@ class PhpDocController extends Controller
$endofAll = false; $endofAll = false;
foreach (['Private', 'Protected', 'Public', 'Const', 'Use'] as $var) { foreach (['Private', 'Protected', 'Public', 'Const', 'Use'] as $var) {
if (${'endof'.$var} !== false) { if (${'endof' . $var} !== false) {
$endofAll = ${'endof'.$var}; $endofAll = ${'endof' . $var};
break; break;
} }
} }
@ -490,8 +486,8 @@ class PhpDocController extends Controller
return false; return false;
} }
if (!$ref->isSubclassOf('yii\base\Object') && $className != 'yii\base\Object') { if (!$ref->isSubclassOf('yii\base\Object') && $className != 'yii\base\Object' && !$ref->isSubclassOf('yii\base\BaseObject') && $className != 'yii\base\BaseObject') {
$this->stderr("[INFO] Skipping class $className as it is not a subclass of yii\\base\\Object.\n", Console::FG_BLUE, Console::BOLD); $this->stderr("[INFO] Skipping class $className as it is not a subclass of yii\\base\\BaseObject.\n", Console::FG_BLUE, Console::BOLD);
return false; return false;
} }
@ -531,7 +527,6 @@ class PhpDocController extends Controller
} }
if (trim($oldDoc) != trim($newDoc)) { if (trim($oldDoc) != trim($newDoc)) {
$fileContent = explode("\n", file_get_contents($file)); $fileContent = explode("\n", file_get_contents($file));
$start = $ref->getStartLine() - 2; $start = $ref->getStartLine() - 2;
$docStart = $start - count(explode("\n", $oldDoc)) + 1; $docStart = $start - count(explode("\n", $oldDoc)) + 1;
@ -621,8 +616,8 @@ class PhpDocController extends Controller
protected function generateClassPropertyDocs($fileName) protected function generateClassPropertyDocs($fileName)
{ {
$phpdoc = ""; $phpdoc = '';
$file = str_replace("\r", "", str_replace("\t", " ", file_get_contents($fileName, true))); $file = str_replace("\r", '', str_replace("\t", ' ', file_get_contents($fileName, true)));
$ns = $this->match('#\nnamespace (?<name>[\w\\\\]+);\n#', $file); $ns = $this->match('#\nnamespace (?<name>[\w\\\\]+);\n#', $file);
$namespace = reset($ns); $namespace = reset($ns);
$namespace = $namespace['name']; $namespace = $namespace['name'];
@ -655,7 +650,6 @@ class PhpDocController extends Controller
$className = null; $className = null;
foreach ($classes as &$class) { foreach ($classes as &$class) {
$className = $namespace . '\\' . $class['name']; $className = $namespace . '\\' . $class['name'];
$gets = $this->match( $gets = $this->match(
@ -756,9 +750,11 @@ class PhpDocController extends Controller
foreach ($parts as $part) { foreach ($parts as $part) {
preg_match_all($pattern . 'suU', $part, $matches, PREG_SET_ORDER); preg_match_all($pattern . 'suU', $part, $matches, PREG_SET_ORDER);
foreach ($matches as &$set) { foreach ($matches as &$set) {
foreach ($set as $i => $match) foreach ($set as $i => $match) {
if (is_numeric($i) /*&& $i != 0*/) if (is_numeric($i) /*&& $i != 0*/) {
unset($set[$i]); unset($set[$i]);
}
}
$sets[] = $set; $sets[] = $set;
} }
@ -769,8 +765,9 @@ class PhpDocController extends Controller
protected function fixSentence($str) protected function fixSentence($str)
{ {
// TODO fix word wrap // TODO fix word wrap
if ($str == '') if ($str == '') {
return ''; return '';
}
return strtoupper(substr($str, 0, 1)) . substr($str, 1) . ($str[strlen($str) - 1] != '.' ? '.' : ''); return strtoupper(substr($str, 0, 1)) . substr($str, 1) . ($str[strlen($str) - 1] != '.' ? '.' : '');
} }

104
build/controllers/ReleaseController.php

@ -127,10 +127,9 @@ class ReleaseController extends Controller
$w = $this->minWidth(array_keys($versions)); $w = $this->minWidth(array_keys($versions));
$this->stdout(str_repeat(' ', $w + 2) . "Current Version Next Version\n", Console::BOLD); $this->stdout(str_repeat(' ', $w + 2) . "Current Version Next Version\n", Console::BOLD);
foreach ($versions as $ext => $version) { foreach ($versions as $ext => $version) {
$this->stdout($ext . str_repeat(' ', $w + 3 - mb_strlen($ext)) . $version . ""); $this->stdout($ext . str_repeat(' ', $w + 3 - mb_strlen($ext)) . $version . '');
$this->stdout(str_repeat(' ', 17 - mb_strlen($version)) . $nextVersions[$ext] . "\n"); $this->stdout(str_repeat(' ', 17 - mb_strlen($version)) . $nextVersions[$ext] . "\n");
} }
} }
private function minWidth($a) private function minWidth($a)
@ -219,7 +218,7 @@ class ReleaseController extends Controller
$this->stdout("- are all new `@since` tags for this release version?\n"); $this->stdout("- are all new `@since` tags for this release version?\n");
} }
$this->stdout("- other issues with code changes?\n\n git diff -w $gitVersion.. ${gitDir}\n\n"); $this->stdout("- other issues with code changes?\n\n git diff -w $gitVersion.. ${gitDir}\n\n");
$travisUrl = reset($what) === 'framework' ? '' : '-'.reset($what); $travisUrl = reset($what) === 'framework' ? '' : '-' . reset($what);
$this->stdout("- are unit tests passing on travis? https://travis-ci.org/yiisoft/yii2$travisUrl/builds\n"); $this->stdout("- are unit tests passing on travis? https://travis-ci.org/yiisoft/yii2$travisUrl/builds\n");
$this->stdout("- also make sure the milestone on github is complete and no issues or PRs are left open.\n\n"); $this->stdout("- also make sure the milestone on github is complete and no issues or PRs are left open.\n\n");
$this->printWhatUrls($what, $versions); $this->printWhatUrls($what, $versions);
@ -266,15 +265,15 @@ class ReleaseController extends Controller
$this->stdout("You are about to generate packages for the following things:\n\n"); $this->stdout("You are about to generate packages for the following things:\n\n");
foreach ($what as $ext) { foreach ($what as $ext) {
if (strncmp('app-', $ext, 4) === 0) { if (strncmp('app-', $ext, 4) === 0) {
$this->stdout(" - "); $this->stdout(' - ');
$this->stdout(substr($ext, 4), Console::FG_RED); $this->stdout(substr($ext, 4), Console::FG_RED);
$this->stdout(" application version "); $this->stdout(' application version ');
} elseif ($ext === 'framework') { } elseif ($ext === 'framework') {
$this->stdout(" - Yii Framework version "); $this->stdout(' - Yii Framework version ');
} else { } else {
$this->stdout(" - "); $this->stdout(' - ');
$this->stdout($ext, Console::FG_RED); $this->stdout($ext, Console::FG_RED);
$this->stdout(" extension version "); $this->stdout(' extension version ');
} }
$this->stdout($versions[$ext], Console::BOLD); $this->stdout($versions[$ext], Console::BOLD);
$this->stdout("\n"); $this->stdout("\n");
@ -323,9 +322,9 @@ class ReleaseController extends Controller
$version = array_values($this->getNextVersions($this->getCurrentVersions($what), self::PATCH))[0]; $version = array_values($this->getNextVersions($this->getCurrentVersions($what), self::PATCH))[0];
$this->stdout('sorting CHANGELOG of '); $this->stdout('sorting CHANGELOG of ');
$this->stdout(reset($what), Console::BOLD); $this->stdout(reset($what), Console::BOLD);
$this->stdout(" for version "); $this->stdout(' for version ');
$this->stdout($version, Console::BOLD); $this->stdout($version, Console::BOLD);
$this->stdout("..."); $this->stdout('...');
$this->resortChangelogs($what, $version); $this->resortChangelogs($what, $version);
@ -336,15 +335,15 @@ class ReleaseController extends Controller
{ {
foreach ($what as $ext) { foreach ($what as $ext) {
if (strncmp('app-', $ext, 4) === 0) { if (strncmp('app-', $ext, 4) === 0) {
$this->stdout(" - "); $this->stdout(' - ');
$this->stdout(substr($ext, 4), Console::FG_RED); $this->stdout(substr($ext, 4), Console::FG_RED);
$this->stdout(" application version "); $this->stdout(' application version ');
} elseif ($ext === 'framework') { } elseif ($ext === 'framework') {
$this->stdout(" - Yii Framework version "); $this->stdout(' - Yii Framework version ');
} else { } else {
$this->stdout(" - "); $this->stdout(' - ');
$this->stdout($ext, Console::FG_RED); $this->stdout($ext, Console::FG_RED);
$this->stdout(" extension version "); $this->stdout(' extension version ');
} }
$this->stdout($newVersions[$ext], Console::BOLD); $this->stdout($newVersions[$ext], Console::BOLD);
$this->stdout(", last release was {$versions[$ext]}\n"); $this->stdout(", last release was {$versions[$ext]}\n");
@ -375,7 +374,7 @@ class ReleaseController extends Controller
foreach ($what as $w) { foreach ($what as $w) {
if (strncmp('app-', $w, 4) === 0) { if (strncmp('app-', $w, 4) === 0) {
if (!empty($limit) && !in_array('app', $limit)) { if (!empty($limit) && !in_array('app', $limit)) {
throw new Exception("Only the following types are allowed: ".implode(', ', $limit)."\n"); throw new Exception('Only the following types are allowed: ' . implode(', ', $limit) . "\n");
} }
if (!is_dir($appPath = "{$this->basePath}/apps/" . substr($w, 4))) { if (!is_dir($appPath = "{$this->basePath}/apps/" . substr($w, 4))) {
throw new Exception("Application path does not exist: \"{$appPath}\"\n"); throw new Exception("Application path does not exist: \"{$appPath}\"\n");
@ -385,7 +384,7 @@ class ReleaseController extends Controller
} }
} elseif ($w === 'framework') { } elseif ($w === 'framework') {
if (!empty($limit) && !in_array('framework', $limit)) { if (!empty($limit) && !in_array('framework', $limit)) {
throw new Exception("Only the following types are allowed: ".implode(', ', $limit)."\n"); throw new Exception('Only the following types are allowed: ' . implode(', ', $limit) . "\n");
} }
if (!is_dir($fwPath = "{$this->basePath}/framework")) { if (!is_dir($fwPath = "{$this->basePath}/framework")) {
throw new Exception("Framework path does not exist: \"{$this->basePath}/framework\"\n"); throw new Exception("Framework path does not exist: \"{$this->basePath}/framework\"\n");
@ -395,7 +394,7 @@ class ReleaseController extends Controller
} }
} else { } else {
if (!empty($limit) && !in_array('ext', $limit)) { if (!empty($limit) && !in_array('ext', $limit)) {
throw new Exception("Only the following types are allowed: ".implode(', ', $limit)."\n"); throw new Exception('Only the following types are allowed: ' . implode(', ', $limit) . "\n");
} }
if (!is_dir($extPath = "{$this->basePath}/extensions/$w")) { if (!is_dir($extPath = "{$this->basePath}/extensions/$w")) {
throw new Exception("Extension path for \"$w\" does not exist: \"{$this->basePath}/extensions/$w\"\n"); throw new Exception("Extension path for \"$w\" does not exist: \"{$this->basePath}/extensions/$w\"\n");
@ -457,10 +456,10 @@ class ReleaseController extends Controller
$this->stdout("\nIn the following you can check the above changes using git diff.\n\n"); $this->stdout("\nIn the following you can check the above changes using git diff.\n\n");
do { do {
$this->runGit("git diff --color", $frameworkPath); $this->runGit('git diff --color', $frameworkPath);
$this->stdout("\n\n\nCheck whether the above diff is okay, if not you may change things as needed before continuing.\n"); $this->stdout("\n\n\nCheck whether the above diff is okay, if not you may change things as needed before continuing.\n");
$this->stdout("You may abort the program with Ctrl + C and reset the changes by running `git checkout -- .` in the repo.\n\n"); $this->stdout("You may abort the program with Ctrl + C and reset the changes by running `git checkout -- .` in the repo.\n\n");
} while (!$this->confirm("Type `yes` to continue, `no` to view git diff again. Continue?")); } while (!$this->confirm('Type `yes` to continue, `no` to view git diff again. Continue?'));
$this->stdout("\n\n"); $this->stdout("\n\n");
$this->stdout(" **** RELEASE TIME! ****\n", Console::FG_YELLOW, Console::BOLD); $this->stdout(" **** RELEASE TIME! ****\n", Console::FG_YELLOW, Console::BOLD);
@ -471,13 +470,13 @@ class ReleaseController extends Controller
$this->runGit("git commit -S -a -m \"release version $version\"", $frameworkPath); $this->runGit("git commit -S -a -m \"release version $version\"", $frameworkPath);
$this->runGit("git tag -s $version -m \"version $version\"", $frameworkPath); $this->runGit("git tag -s $version -m \"version $version\"", $frameworkPath);
$this->runGit("git push", $frameworkPath); $this->runGit('git push', $frameworkPath);
$this->runGit("git push --tags", $frameworkPath); $this->runGit('git push --tags', $frameworkPath);
$this->stdout("\n\n"); $this->stdout("\n\n");
$this->stdout("CONGRATULATIONS! You have just released ", Console::FG_YELLOW, Console::BOLD); $this->stdout('CONGRATULATIONS! You have just released ', Console::FG_YELLOW, Console::BOLD);
$this->stdout('framework', Console::FG_RED, Console::BOLD); $this->stdout('framework', Console::FG_RED, Console::BOLD);
$this->stdout(" version ", Console::FG_YELLOW, Console::BOLD); $this->stdout(' version ', Console::FG_YELLOW, Console::BOLD);
$this->stdout($version, Console::BOLD); $this->stdout($version, Console::BOLD);
$this->stdout("!\n\n", Console::FG_YELLOW, Console::BOLD); $this->stdout("!\n\n", Console::FG_YELLOW, Console::BOLD);
@ -519,10 +518,10 @@ class ReleaseController extends Controller
$this->stdout("\n"); $this->stdout("\n");
$this->runGit("git diff --color", $frameworkPath); $this->runGit('git diff --color', $frameworkPath);
$this->stdout("\n\n"); $this->stdout("\n\n");
$this->runGit("git commit -a -m \"prepare for next release\"", $frameworkPath); $this->runGit('git commit -a -m "prepare for next release"', $frameworkPath);
$this->runGit("git push", $frameworkPath); $this->runGit('git push', $frameworkPath);
$this->stdout("\n\nDONE!", Console::FG_YELLOW, Console::BOLD); $this->stdout("\n\nDONE!", Console::FG_YELLOW, Console::BOLD);
@ -544,7 +543,6 @@ class ReleaseController extends Controller
$this->stdout("- release applications: ./build/build release app-advanced\n"); $this->stdout("- release applications: ./build/build release app-advanced\n");
$this->stdout("\n"); $this->stdout("\n");
} }
protected function releaseApplication($name, $path, $version) protected function releaseApplication($name, $path, $version)
@ -578,10 +576,10 @@ class ReleaseController extends Controller
$this->stdout("\nIn the following you can check the above changes using git diff.\n\n"); $this->stdout("\nIn the following you can check the above changes using git diff.\n\n");
do { do {
$this->runGit("git diff --color", $path); $this->runGit('git diff --color', $path);
$this->stdout("\n\n\nCheck whether the above diff is okay, if not you may change things as needed before continuing.\n"); $this->stdout("\n\n\nCheck whether the above diff is okay, if not you may change things as needed before continuing.\n");
$this->stdout("You may abort the program with Ctrl + C and reset the changes by running `git checkout -- .` in the repo.\n\n"); $this->stdout("You may abort the program with Ctrl + C and reset the changes by running `git checkout -- .` in the repo.\n\n");
} while (!$this->confirm("Type `yes` to continue, `no` to view git diff again. Continue?")); } while (!$this->confirm('Type `yes` to continue, `no` to view git diff again. Continue?'));
$this->stdout("\n\n"); $this->stdout("\n\n");
$this->stdout(" **** RELEASE TIME! ****\n", Console::FG_YELLOW, Console::BOLD); $this->stdout(" **** RELEASE TIME! ****\n", Console::FG_YELLOW, Console::BOLD);
@ -592,13 +590,13 @@ class ReleaseController extends Controller
$this->runGit("git commit -S -a -m \"release version $version\"", $path); $this->runGit("git commit -S -a -m \"release version $version\"", $path);
$this->runGit("git tag -s $version -m \"version $version\"", $path); $this->runGit("git tag -s $version -m \"version $version\"", $path);
$this->runGit("git push", $path); $this->runGit('git push', $path);
$this->runGit("git push --tags", $path); $this->runGit('git push --tags', $path);
$this->stdout("\n\n"); $this->stdout("\n\n");
$this->stdout("CONGRATULATIONS! You have just released application ", Console::FG_YELLOW, Console::BOLD); $this->stdout('CONGRATULATIONS! You have just released application ', Console::FG_YELLOW, Console::BOLD);
$this->stdout($name, Console::FG_RED, Console::BOLD); $this->stdout($name, Console::FG_RED, Console::BOLD);
$this->stdout(" version ", Console::FG_YELLOW, Console::BOLD); $this->stdout(' version ', Console::FG_YELLOW, Console::BOLD);
$this->stdout($version, Console::BOLD); $this->stdout($version, Console::BOLD);
$this->stdout("!\n\n", Console::FG_YELLOW, Console::BOLD); $this->stdout("!\n\n", Console::FG_YELLOW, Console::BOLD);
@ -613,10 +611,10 @@ class ReleaseController extends Controller
$nextVersion = $this->getNextVersions(["app-$name" => $version], self::PATCH); // TODO support other versions $nextVersion = $this->getNextVersions(["app-$name" => $version], self::PATCH); // TODO support other versions
$this->stdout("\n"); $this->stdout("\n");
$this->runGit("git diff --color", $path); $this->runGit('git diff --color', $path);
$this->stdout("\n\n"); $this->stdout("\n\n");
$this->runGit("git commit -a -m \"prepare for next release\"", $path); $this->runGit('git commit -a -m "prepare for next release"', $path);
$this->runGit("git push", $path); $this->runGit('git push', $path);
$this->stdout("\n\nDONE!", Console::FG_YELLOW, Console::BOLD); $this->stdout("\n\nDONE!", Console::FG_YELLOW, Console::BOLD);
@ -639,7 +637,7 @@ class ReleaseController extends Controller
break; break;
case 'advanced': case 'advanced':
// setup @frontend, @backend etc... // setup @frontend, @backend etc...
require("$path/common/config/bootstrap.php"); require "$path/common/config/bootstrap.php";
break; break;
} }
} }
@ -696,10 +694,10 @@ class ReleaseController extends Controller
$this->stdout("\nIn the following you can check the above changes using git diff.\n\n"); $this->stdout("\nIn the following you can check the above changes using git diff.\n\n");
do { do {
$this->runGit("git diff --color", $path); $this->runGit('git diff --color', $path);
$this->stdout("\n\n\nCheck whether the above diff is okay, if not you may change things as needed before continuing.\n"); $this->stdout("\n\n\nCheck whether the above diff is okay, if not you may change things as needed before continuing.\n");
$this->stdout("You may abort the program with Ctrl + C and reset the changes by running `git checkout -- .` in the repo.\n\n"); $this->stdout("You may abort the program with Ctrl + C and reset the changes by running `git checkout -- .` in the repo.\n\n");
} while (!$this->confirm("Type `yes` to continue, `no` to view git diff again. Continue?")); } while (!$this->confirm('Type `yes` to continue, `no` to view git diff again. Continue?'));
$this->stdout("\n\n"); $this->stdout("\n\n");
$this->stdout(" **** RELEASE TIME! ****\n", Console::FG_YELLOW, Console::BOLD); $this->stdout(" **** RELEASE TIME! ****\n", Console::FG_YELLOW, Console::BOLD);
@ -710,13 +708,13 @@ class ReleaseController extends Controller
$this->runGit("git commit -S -a -m \"release version $version\"", $path); $this->runGit("git commit -S -a -m \"release version $version\"", $path);
$this->runGit("git tag -s $version -m \"version $version\"", $path); $this->runGit("git tag -s $version -m \"version $version\"", $path);
$this->runGit("git push", $path); $this->runGit('git push', $path);
$this->runGit("git push --tags", $path); $this->runGit('git push --tags', $path);
$this->stdout("\n\n"); $this->stdout("\n\n");
$this->stdout("CONGRATULATIONS! You have just released extension ", Console::FG_YELLOW, Console::BOLD); $this->stdout('CONGRATULATIONS! You have just released extension ', Console::FG_YELLOW, Console::BOLD);
$this->stdout($name, Console::FG_RED, Console::BOLD); $this->stdout($name, Console::FG_RED, Console::BOLD);
$this->stdout(" version ", Console::FG_YELLOW, Console::BOLD); $this->stdout(' version ', Console::FG_YELLOW, Console::BOLD);
$this->stdout($version, Console::BOLD); $this->stdout($version, Console::BOLD);
$this->stdout("!\n\n", Console::FG_YELLOW, Console::BOLD); $this->stdout("!\n\n", Console::FG_YELLOW, Console::BOLD);
@ -730,10 +728,10 @@ class ReleaseController extends Controller
$this->stdout("done.\n", Console::FG_GREEN, Console::BOLD); $this->stdout("done.\n", Console::FG_GREEN, Console::BOLD);
$this->stdout("\n"); $this->stdout("\n");
$this->runGit("git diff --color", $path); $this->runGit('git diff --color', $path);
$this->stdout("\n\n"); $this->stdout("\n\n");
$this->runGit("git commit -a -m \"prepare for next release\"", $path); $this->runGit('git commit -a -m "prepare for next release"', $path);
$this->runGit("git push", $path); $this->runGit('git push', $path);
$this->stdout("\n\nDONE!", Console::FG_YELLOW, Console::BOLD); $this->stdout("\n\nDONE!", Console::FG_YELLOW, Console::BOLD);
@ -815,7 +813,7 @@ class ReleaseController extends Controller
$v = str_replace('\\-', '[\\- ]', preg_quote($version, '/')); $v = str_replace('\\-', '[\\- ]', preg_quote($version, '/'));
$headline = $version . ' ' . date('F d, Y'); $headline = $version . ' ' . date('F d, Y');
$this->sed( $this->sed(
'/'.$v.' under development\n(-+?)\n/', '/' . $v . ' under development\n(-+?)\n/',
$headline . "\n" . str_repeat('-', strlen($headline)) . "\n", $headline . "\n" . str_repeat('-', strlen($headline)) . "\n",
$this->getChangelogs($what) $this->getChangelogs($what)
); );
@ -862,11 +860,11 @@ class ReleaseController extends Controller
$state = 'start'; $state = 'start';
foreach ($lines as $l => $line) { foreach ($lines as $l => $line) {
// starting from the changelogs headline // starting from the changelogs headline
if (isset($lines[$l-2]) && strpos($lines[$l-2], $version) !== false && if (isset($lines[$l - 2]) && strpos($lines[$l - 2], $version) !== false &&
isset($lines[$l-1]) && strncmp($lines[$l-1], '---', 3) === 0) { isset($lines[$l - 1]) && strncmp($lines[$l - 1], '---', 3) === 0) {
$state = 'changelog'; $state = 'changelog';
} }
if ($state === 'changelog' && isset($lines[$l+1]) && strncmp($lines[$l+1], '---', 3) === 0) { if ($state === 'changelog' && isset($lines[$l + 1]) && strncmp($lines[$l + 1], '---', 3) === 0) {
$state = 'end'; $state = 'end';
} }
// add continued lines to the last item to keep them together // add continued lines to the last item to keep them together
@ -892,7 +890,7 @@ class ReleaseController extends Controller
$changelog = array_filter($changelog); $changelog = array_filter($changelog);
$i = 0; $i = 0;
ArrayHelper::multisort($changelog, function($line) use (&$i) { ArrayHelper::multisort($changelog, function ($line) use (&$i) {
if (preg_match('/^- (Chg|Enh|Bug|New)( #\d+(, #\d+)*)?: .+/', $line, $m)) { if (preg_match('/^- (Chg|Enh|Bug|New)( #\d+(, #\d+)*)?: .+/', $line, $m)) {
$o = ['Bug' => 'C', 'Enh' => 'D', 'Chg' => 'E', 'New' => 'F']; $o = ['Bug' => 'C', 'Enh' => 'D', 'Chg' => 'E', 'New' => 'F'];
return $o[$m[1]] . ' ' . (!empty($m[2]) ? $m[2] : 'AAAA' . $i++); return $o[$m[1]] . ' ' . (!empty($m[2]) ? $m[2] : 'AAAA' . $i++);
@ -925,7 +923,7 @@ class ReleaseController extends Controller
protected function getExtensionChangelogs($what) protected function getExtensionChangelogs($what)
{ {
return array_filter(glob($this->basePath . '/extensions/*/CHANGELOG.md'), function($elem) use ($what) { return array_filter(glob($this->basePath . '/extensions/*/CHANGELOG.md'), function ($elem) use ($what) {
foreach ($what as $ext) { foreach ($what as $ext) {
if (strpos($elem, "extensions/$ext/CHANGELOG.md") !== false) { if (strpos($elem, "extensions/$ext/CHANGELOG.md") !== false) {
return true; return true;

2
build/controllers/TranslationController.php

@ -113,7 +113,7 @@ class TranslationController extends Controller
protected function getDiff($translatedFilePath, $sourceFilePath) protected function getDiff($translatedFilePath, $sourceFilePath)
{ {
$lastTranslationHash = shell_exec('git log -1 --format=format:"%H" -- ' . $translatedFilePath); $lastTranslationHash = shell_exec('git log -1 --format=format:"%H" -- ' . $translatedFilePath);
return shell_exec('git diff ' . $lastTranslationHash.'..HEAD -- ' . $sourceFilePath); return shell_exec('git diff ' . $lastTranslationHash . '..HEAD -- ' . $sourceFilePath);
} }
/** /**

36
build/controllers/Utf8Controller.php

@ -40,14 +40,12 @@ class Utf8Controller extends Controller
} }
foreach ($files as $file) { foreach ($files as $file) {
$content = file_get_contents($file); $content = file_get_contents($file);
$chars = preg_split('//u', $content, null, PREG_SPLIT_NO_EMPTY); $chars = preg_split('//u', $content, null, PREG_SPLIT_NO_EMPTY);
$line = 1; $line = 1;
$pos = 0; $pos = 0;
foreach ($chars as $c) { foreach ($chars as $c) {
$ord = $this->unicodeOrd($c); $ord = $this->unicodeOrd($c);
$pos++; $pos++;
@ -57,7 +55,7 @@ class Utf8Controller extends Controller
} }
if ($ord === false) { if ($ord === false) {
$this->found("BROKEN UTF8", $c, $line, $pos, $file); $this->found('BROKEN UTF8', $c, $line, $pos, $file);
continue; continue;
} }
@ -66,22 +64,20 @@ class Utf8Controller extends Controller
|| 0x2028 <= $ord && $ord <= 0x202E || 0x2028 <= $ord && $ord <= 0x202E
|| 0x205f <= $ord && $ord <= 0x206F || 0x205f <= $ord && $ord <= 0x206F
) { ) {
$this->found("UNSUPPORTED SPACE CHARACTER", $c, $line, $pos, $file); $this->found('UNSUPPORTED SPACE CHARACTER', $c, $line, $pos, $file);
continue; continue;
} }
if ($ord < 0x0020 && $ord != 0x000A && $ord != 0x0009 || if ($ord < 0x0020 && $ord != 0x000A && $ord != 0x0009 ||
0x0080 <= $ord && $ord < 0x009F) { 0x0080 <= $ord && $ord < 0x009F) {
$this->found("CONTROL CHARARCTER", $c, $line, $pos, $file); $this->found('CONTROL CHARARCTER', $c, $line, $pos, $file);
continue; continue;
} }
// if ($ord > 0x009F) { // if ($ord > 0x009F) {
// $this->found("NON ASCII CHARARCTER", $c, $line, $pos, $file); // $this->found("NON ASCII CHARARCTER", $c, $line, $pos, $file);
// continue; // continue;
// } // }
} }
} }
} }
private $_foundFiles = []; private $_foundFiles = [];
@ -109,22 +105,22 @@ class Utf8Controller extends Controller
*/ */
private function unicodeOrd($c) private function unicodeOrd($c)
{ {
$h = ord($c{0}); $h = ord($c[0]);
if ($h <= 0x7F) { if ($h <= 0x7F) {
return $h; return $h;
} else if ($h < 0xC2) { } elseif ($h < 0xC2) {
return false;
} else if ($h <= 0xDF) {
return ($h & 0x1F) << 6 | (ord($c{1}) & 0x3F);
} else if ($h <= 0xEF) {
return ($h & 0x0F) << 12 | (ord($c{1}) & 0x3F) << 6
| (ord($c{2}) & 0x3F);
} else if ($h <= 0xF4) {
return ($h & 0x0F) << 18 | (ord($c{1}) & 0x3F) << 12
| (ord($c{2}) & 0x3F) << 6
| (ord($c{3}) & 0x3F);
} else {
return false; return false;
} elseif ($h <= 0xDF) {
return ($h & 0x1F) << 6 | (ord($c[1]) & 0x3F);
} elseif ($h <= 0xEF) {
return ($h & 0x0F) << 12 | (ord($c[1]) & 0x3F) << 6
| (ord($c[2]) & 0x3F);
} elseif ($h <= 0xF4) {
return ($h & 0x0F) << 18 | (ord($c[1]) & 0x3F) << 12
| (ord($c[2]) & 0x3F) << 6
| (ord($c[3]) & 0x3F);
} }
return false;
} }
} }

10
composer.json

@ -76,13 +76,14 @@
"ezyang/htmlpurifier": "~4.6", "ezyang/htmlpurifier": "~4.6",
"cebe/markdown": "~1.0.0 | ~1.1.0", "cebe/markdown": "~1.0.0 | ~1.1.0",
"bower-asset/jquery": "2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", "bower-asset/jquery": "2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable",
"bower-asset/jquery.inputmask": "~3.2.2 | ~3.3.5", "bower-asset/inputmask": "~3.2.2 | ~3.3.5",
"bower-asset/punycode": "1.3.*", "bower-asset/punycode": "1.3.*",
"bower-asset/yii2-pjax": "~2.0.1" "bower-asset/yii2-pjax": "~2.0.1"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "~4.4", "phpunit/phpunit": "4.8.34",
"cebe/indent": "~1.0.2" "cebe/indent": "~1.0.2",
"friendsofphp/php-cs-fixer": "~2.2.3"
}, },
"repositories": [ "repositories": [
{ {
@ -95,7 +96,8 @@
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"yii\\": "framework/" "yii\\": "framework/",
"yii\\cs\\": "cs/src/"
} }
}, },
"config": { "config": {

1377
composer.lock generated

File diff suppressed because it is too large Load Diff

1
cs/TODO.md

@ -0,0 +1 @@
This should be moved to separate package, like `yii\yii2-cs`.

174
cs/src/YiiConfig.php

@ -0,0 +1,174 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\cs;
use PhpCsFixer\Config;
use yii\helpers\ArrayHelper;
/**
* Basic rules used by Yii 2 ecosystem.
*
* @author Robert Korulczyk <robert@korulczyk.pl>
* @since 2.0.0
*/
class YiiConfig extends Config
{
/**
* {@inheritdoc}
*/
public function __construct($name = 'yii-cs-config')
{
parent::__construct($name);
$this->setRiskyAllowed(true);
$this->setRules([
'@PSR2' => true,
'array_syntax' => [
'syntax' => 'short',
],
'binary_operator_spaces' => [
'align_double_arrow' => false,
'align_equals' => false,
],
'blank_line_after_opening_tag' => true,
'cast_spaces' => true,
'concat_space' => [
'spacing' => 'one',
],
'dir_constant' => true,
'ereg_to_preg' => true,
'function_typehint_space' => true,
'hash_to_slash_comment' => true,
'include' => true,
'heredoc_to_nowdoc' => true,
'is_null' => [
'use_yoda_style' => false,
],
'linebreak_after_opening_tag' => true,
'lowercase_cast' => true,
'magic_constant_casing' => true,
// 'mb_str_functions' => true, // needs more discussion
// 'method_separation' => true, // conflicts with current Yii style with double line between properties and methods
'modernize_types_casting' => true,
'native_function_casing' => true,
'new_with_braces' => true,
'no_alias_functions' => true,
'no_blank_lines_after_class_opening' => true,
'no_blank_lines_after_phpdoc' => true,
'no_empty_comment' => true,
'no_empty_phpdoc' => true,
'no_empty_statement' => true,
'no_extra_consecutive_blank_lines' => [
'tokens' => [
'break',
'continue',
// 'extra', // conflicts with current Yii style with double line between properties and methods
'return',
'throw',
'use',
'use_trait',
// 'curly_brace_block', // breaks namespaces blocks
'parenthesis_brace_block',
'square_brace_block',
],
],
'no_leading_import_slash' => true,
'no_leading_namespace_whitespace' => true,
'no_mixed_echo_print' => true,
'no_multiline_whitespace_around_double_arrow' => true,
'no_multiline_whitespace_before_semicolons' => true,
'no_php4_constructor' => true,
'no_short_bool_cast' => true,
'no_singleline_whitespace_before_semicolons' => true,
'no_spaces_around_offset' => true,
'no_trailing_comma_in_list_call' => true,
'no_trailing_comma_in_singleline_array' => true,
'no_unneeded_control_parentheses' => true,
'no_unused_imports' => true,
'no_useless_else' => true,
'no_useless_return' => true,
'no_whitespace_before_comma_in_array' => true,
'no_whitespace_in_blank_line' => true,
// 'non_printable_character' => true, // breaks Formatter::asCurrency() tests
'normalize_index_brace' => true,
'object_operator_without_whitespace' => true,
// 'ordered_class_elements' => [ // needs more discussion
// 'order' => [
// 'use_trait',
// 'constant_public',
// 'constant_protected',
// 'constant_private',
// 'property_public',
// 'property_protected',
// 'property_private',
// 'construct',
// 'destruct',
// 'magic',
// ],
// ],
'ordered_imports' => [
'sortAlgorithm' => 'alpha',
'importsOrder' => [
'const',
'function',
'class',
],
],
'php_unit_construct' => true,
'php_unit_dedicate_assert' => true,
'php_unit_fqcn_annotation' => true,
// 'php_unit_strict' => true, // needs more attention
// 'phpdoc_add_missing_param_annotation' => [ // needs more attention
// 'only_untyped' => false,
// ],
'phpdoc_indent' => true,
// 'phpdoc_inline_tag' => true, // see https://github.com/yiisoft/yii2/issues/11635
'phpdoc_no_access' => true,
'phpdoc_no_empty_return' => true,
'phpdoc_no_package' => true,
'phpdoc_no_useless_inheritdoc' => true,
// 'phpdoc_order', // may be useful, but should be configurable: https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues/1602
'phpdoc_return_self_reference' => true,
'phpdoc_scalar' => true,
'phpdoc_single_line_var_spacing' => true,
// 'phpdoc_summary' => true, // needs more attention (summary should be separated by blank line from description)
// 'phpdoc_to_comment' => true, // breaks phpdoc for define('CONSTANT', $value);
'phpdoc_trim' => true,
// 'phpdoc_types' => true, // conflicts with yii\base\Object typehits https://github.com/yiisoft/yii2/pull/12699
'phpdoc_var_without_name' => true,
'protected_to_private' => true,
'psr4' => true,
'self_accessor' => true,
'short_scalar_cast' => true,
'single_blank_line_before_namespace' => true,
'single_quote' => true,
'standardize_not_equals' => true,
'ternary_operator_spaces' => true,
'trailing_comma_in_multiline_array' => true,
'trim_array_spaces' => true,
'unary_operator_spaces' => true,
'whitespace_after_comma_in_array' => true,
]);
}
/**
* Merge current rules config with provided list of rules.
*
* @param array $rules
* @return $this
* @see setRules()
* @see ArrayHelper::merge()
*/
public function mergeRules(array $rules)
{
$this->setRules(ArrayHelper::merge($this->getRules(), $rules));
return $this;
}
}

39
cs/src/YiisoftConfig.php

@ -0,0 +1,39 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\cs;
/**
* Basic rules used by Yii 2 official packages.
*
* @author Robert Korulczyk <robert@korulczyk.pl>
* @since 2.0.0
*/
final class YiisoftConfig extends YiiConfig
{
/**
* {@inheritdoc}
*/
public function __construct()
{
parent::__construct('yiisoft-cs-config');
$header = <<<'HEADER'
@link http://www.yiiframework.com/
@copyright Copyright (c) 2008 Yii Software LLC
@license http://www.yiiframework.com/license/
HEADER;
$this->mergeRules([
'header_comment' => [
'header' => $header,
'commentType' => 'PHPDoc',
'separate' => 'bottom',
],
]);
}
}

4
docs/guide-es/concept-autoloading.md

@ -73,8 +73,8 @@ sido extraido del [script de entrada](structure-entry-scripts.md) de la [Plantil
La primera línea instala el autocargador de Composer, mientras que la segunda línea instala el autocargador de Yii. La primera línea instala el autocargador de Composer, mientras que la segunda línea instala el autocargador de Yii.
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
``` ```
Puedes usar el autocargador de Composer sin el autocargador de Yii. Sin embargo, al hacerlo, la eficacia de la carga de Puedes usar el autocargador de Composer sin el autocargador de Yii. Sin embargo, al hacerlo, la eficacia de la carga de

2
docs/guide-es/concept-behaviors.md

@ -44,7 +44,7 @@ class MyBehavior extends Behavior
``` ```
El código anterior define la clase de comportamiento (behavior) app\components\MyBehavior`, con dos propiedades -- El código anterior define la clase de comportamiento (behavior) app\components\MyBehavior`, con dos propiedades --
`prop1` y `prop2`--y un método `foo()`. Tenga en cuenta que la propiedad `prop2` `prop1` y `prop2`--y un método `foo()`. Tenga en cuenta que la propiedad `prop2`
se define a través de la getter `getProp2()` y el setter `setProp2()`. Este caso es porque [[yii\base\Behavior]] extiende [[yii\base\Object]] y por lo tanto se apoya en la definición de [propiedades](concept-properties.md) via getters y setters. se define a través de la getter `getProp2()` y el setter `setProp2()`. Este caso es porque [[yii\base\Behavior]] extiende [[yii\base\BaseObject]] y por lo tanto se apoya en la definición de [propiedades](concept-properties.md) via getters y setters.
Debido a que esta clase es un comportamiento, cuando está unido a un componente, el componente también tienen la propiedad `prop1` y `prop2` y el método `foo()`. Debido a que esta clase es un comportamiento, cuando está unido a un componente, el componente también tienen la propiedad `prop1` y `prop2` y el método `foo()`.

14
docs/guide-es/concept-components.md

@ -25,22 +25,22 @@ echo DatePicker::widget([
Las propiedades del widget son fácilmente modificables porque la clase se extiende de [[yii\base\Component]]. Las propiedades del widget son fácilmente modificables porque la clase se extiende de [[yii\base\Component]].
Mientras que los componentes son muy potentes, son un poco más pesados que los objetos normales, debido al hecho de que necesitan más memoria y tiempo de CPU para poder soportar [eventos](concept-events.md) y [comportamientos](concept-behaviors.md) en particular. Mientras que los componentes son muy potentes, son un poco más pesados que los objetos normales, debido al hecho de que necesitan más memoria y tiempo de CPU para poder soportar [eventos](concept-events.md) y [comportamientos](concept-behaviors.md) en particular.
Si tus componentes no necesitan estas dos características, deberías considerar extender tu componente directamente de [[yii\base\Object]] en vez de [[yii\base\Component]]. De esta manera harás que tus componentes sean mucho más eficientes que objetos PHP normales, pero con el añadido soporte para [propiedades](concept-properties.md). Si tus componentes no necesitan estas dos características, deberías considerar extender tu componente directamente de [[yii\base\BaseObject]] en vez de [[yii\base\Component]]. De esta manera harás que tus componentes sean mucho más eficientes que objetos PHP normales, pero con el añadido soporte para [propiedades](concept-properties.md).
Cuando extiendes tu clase de [[yii\base\Component]] o [[yii\base\Object]], se recomienda que sigas las siguientes convenciones: Cuando extiendes tu clase de [[yii\base\Component]] o [[yii\base\BaseObject]], se recomienda que sigas las siguientes convenciones:
- Si sobrescribes el constructor, especifica un parámetro `$config` como el *último* parámetro del constructor, y después pasa este parámetro al constructor padre. - Si sobrescribes el constructor, especifica un parámetro `$config` como el *último* parámetro del constructor, y después pasa este parámetro al constructor padre.
- Siempre llama al constructor padre al *final* de su propio constructor. - Siempre llama al constructor padre al *final* de su propio constructor.
- Si sobrescribes el método [[yii\base\Object::init()]], asegúrese de llamar la implementación padre de `init` * al principio * de su método` init`. - Si sobrescribes el método [[yii\base\BaseObject::init()]], asegúrese de llamar la implementación padre de `init` * al principio * de su método` init`.
Por ejemplo: Por ejemplo:
```php ```php
namespace yii\components\MyClass; namespace yii\components\MyClass;
use yii\base\Object; use yii\base\BaseObject;
class MyClass extends Object class MyClass extends BaseObject
{ {
public $prop1; public $prop1;
public $prop2; public $prop2;
@ -76,11 +76,11 @@ $component = \Yii::createObject([
> Info: Mientras que el enfoque de llamar [[Yii::createObject()]] parece mucho más complicado, es mucho más potente debido al hecho de que se implementa en la parte superior de un [contenedor de inyección de dependencia](concept-di-container.md). > Info: Mientras que el enfoque de llamar [[Yii::createObject()]] parece mucho más complicado, es mucho más potente debido al hecho de que se implementa en la parte superior de un [contenedor de inyección de dependencia](concept-di-container.md).
La clase [[yii\base\Object]] hace cumplir el siguiente ciclo de vida del objeto: La clase [[yii\base\BaseObject]] hace cumplir el siguiente ciclo de vida del objeto:
1. Pre-inicialización en el constructor. Puedes establecer los valores predeterminados de propiedades aquí. 1. Pre-inicialización en el constructor. Puedes establecer los valores predeterminados de propiedades aquí.
2. Configuración del objeto a través de `$config`. La configuración puede sobrescribir los valores prdeterminados dentro del constructor. 2. Configuración del objeto a través de `$config`. La configuración puede sobrescribir los valores prdeterminados dentro del constructor.
3. Post-inicialización dentro de [[yii\base\Object::init()|init()]]. Puedes sobrescribir este método para realizar comprobaciones de validez y normalización de las propiedades. 3. Post-inicialización dentro de [[yii\base\BaseObject::init()|init()]]. Puedes sobrescribir este método para realizar comprobaciones de validez y normalización de las propiedades.
4. Llamadas a métodos del objeto. 4. Llamadas a métodos del objeto.
Los tres primeros pasos ocurren dentro del constructor del objeto. Esto significa que una vez obtengas la instancia de un objeto, ésta ha sido inicializada para que puedas utilizarla adecuadamente. Los tres primeros pasos ocurren dentro del constructor del objeto. Esto significa que una vez obtengas la instancia de un objeto, ésta ha sido inicializada para que puedas utilizarla adecuadamente.

10
docs/guide-es/concept-configurations.md

@ -65,7 +65,7 @@ A continuación se muestra un ejemplo de una configuración con los valores de p
## Usando Configuraciones <span id="using-configurations"></span> ## Usando Configuraciones <span id="using-configurations"></span>
Las configuraciones se utilizan en muchos lugares en Yii. Al comienzo de esta sección, hemos demostrado cómo crear un objeto según una configuración mediante el uso de [[Yii::CreateObject()]]. En este apartado, vamos a describir configuraciones de aplicaciones y configuraciones widget - dos principales usos de configuraciones. Las configuraciones se utilizan en muchos lugares en Yii. Al comienzo de esta sección, hemos demostrado cómo crear un objeto según una configuración mediante el uso de [[Yii::createObject()]]. En este apartado, vamos a describir configuraciones de aplicaciones y configuraciones widget - dos principales usos de configuraciones.
### Configuraciones de aplicación <span id="application-configurations"></span> ### Configuraciones de aplicación <span id="application-configurations"></span>
@ -76,7 +76,7 @@ Configuración para una [aplicación](structure-applications.md) es probablement
$config = [ $config = [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => [ 'components' => [
'cache' => [ 'cache' => [
'class' => 'yii\caching\FileCache', 'class' => 'yii\caching\FileCache',
@ -143,8 +143,8 @@ Cuando una configuración es muy compleja, una práctica común es almacenarla e
return [ return [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => require(__DIR__ . '/components.php'), 'components' => require __DIR__ . '/components.php',
]; ];
``` ```
@ -180,7 +180,7 @@ return [
Para obtener una configuración almacenada en un archivo de configuración, simplemente "requerir" este, como el siguiente: Para obtener una configuración almacenada en un archivo de configuración, simplemente "requerir" este, como el siguiente:
```php ```php
$config = require('path/to/web.php'); $config = require 'path/to/web.php';
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();
``` ```

10
docs/guide-es/concept-di-container.md

@ -44,9 +44,9 @@ registra una dependencia o se crea un nuevo objeto, se puede proporcionar una co
para inyectar las dependencias a través de sus correspondientes setters y propiedades. Por ejemplo, para inyectar las dependencias a través de sus correspondientes setters y propiedades. Por ejemplo,
```php ```php
use yii\base\Object; use yii\base\BaseObject;
class Foo extends Object class Foo extends BaseObject
{ {
public $bar; public $bar;
@ -185,7 +185,7 @@ una nueva instancia de `UserLister` con una simple llamada a `get('userLister')`
```php ```php
namespace app\models; namespace app\models;
use yii\base\Object; use yii\base\BaseObject;
use yii\db\Connection; use yii\db\Connection;
use yii\di\Container; use yii\di\Container;
@ -194,7 +194,7 @@ interface UserFinderInterface
function findUser(); function findUser();
} }
class UserFinder extends Object implements UserFinderInterface class UserFinder extends BaseObject implements UserFinderInterface
{ {
public $db; public $db;
@ -209,7 +209,7 @@ class UserFinder extends Object implements UserFinderInterface
} }
} }
class UserLister extends Object class UserLister extends BaseObject
{ {
public $finder; public $finder;

2
docs/guide-es/concept-events.md

@ -248,7 +248,7 @@ lugar de a la instancia del objeto.
> Note: Debido a que los gestores a nivel de clase responderán a los eventos lanzados por cualquier instancia de la > Note: Debido a que los gestores a nivel de clase responderán a los eventos lanzados por cualquier instancia de la
clase, o cualquier clase hija, se debe usar con cuidado, especialmente en las clases de bajo nivel (low-level), tales clase, o cualquier clase hija, se debe usar con cuidado, especialmente en las clases de bajo nivel (low-level), tales
como [[yii\base\Object]]. como [[yii\base\BaseObject]].
Para desadjuntar un gestor de eventos a nivel de clase, se tiene que llamar a [[yii\base\Event::off()]]. Por ejemplo: Para desadjuntar un gestor de eventos a nivel de clase, se tiene que llamar a [[yii\base\Event::off()]]. Por ejemplo:

10
docs/guide-es/concept-properties.md

@ -17,11 +17,11 @@ ejemplo que la primera letra tiene que estar en mayúsculas, se tendrán que mod
asignen el valor a la propiedad `label`. La repetición de código conlleva a bugs, y es una practica que se tiene que asignen el valor a la propiedad `label`. La repetición de código conlleva a bugs, y es una practica que se tiene que
evitar en la medida de lo posible. evitar en la medida de lo posible.
Para solventar este problema, Yii introduce la clase base llamada [[yii\base\Object]] que da soporte a la definición Para solventar este problema, Yii introduce la clase base llamada [[yii\base\BaseObject]] que da soporte a la definición
de propiedades basada en los métodos de clase *getter* y *setter*. Si una clase necesita más funcionalidad, debe de propiedades basada en los métodos de clase *getter* y *setter*. Si una clase necesita más funcionalidad, debe
extender a la clase [[yii\base\Object]] o a alguna de sus hijas. extender a la clase [[yii\base\BaseObject]] o a alguna de sus hijas.
> Info: Casi todas las clases del núcleo (core) en el framework Yii extienden a [[yii\base\Object]] o a una de > Info: Casi todas las clases del núcleo (core) en el framework Yii extienden a [[yii\base\BaseObject]] o a una de
sus clases hijas. Esto significa que siempre que se encuentre un getter o un setter en una clase del núcleo, se sus clases hijas. Esto significa que siempre que se encuentre un getter o un setter en una clase del núcleo, se
puede utilizar como una propiedad. puede utilizar como una propiedad.
@ -32,9 +32,9 @@ setter `setLabel()` definen la propiedad `label`, como se muestra a continuació
```php ```php
namespace app\components; namespace app\components;
use yii\base\Object; use yii\base\BaseObject;
class Foo extends Object class Foo extends BaseObject
{ {
private $_label; private $_label;

16
docs/guide-es/intro-upgrade-from-v1.md

@ -56,25 +56,25 @@ al autoloader de Yii.)
Componentes y Objetos Componentes y Objetos
---------------------- ----------------------
Yii 2.0 parte la clase `CComponent` de 1.1 en dos clases: [[yii\base\Object]] y [[yii\base\Component]]. Yii 2.0 parte la clase `CComponent` de 1.1 en dos clases: [[yii\base\BaseObject]] y [[yii\base\Component]].
La clase [[yii\base\Object|Object]] es una clase base que permite definir [propiedades de object](concept-properties.md) La clase [[yii\base\BaseObject|BaseObject]] es una clase base que permite definir [propiedades de object](concept-properties.md)
a través de getters y setters. La clase [[yii\base\Component|Component]] extiende de [[yii\base\Object|Object]] y soporta a través de getters y setters. La clase [[yii\base\Component|Component]] extiende de [[yii\base\BaseObject|BaseObject]] y soporta
[eventos](concept-events.md) y [comportamientos](concept-behaviors.md). [eventos](concept-events.md) y [comportamientos](concept-behaviors.md).
Si tu clase no necesita utilizar las características de eventos o comportamientos, puedes considerar usar Si tu clase no necesita utilizar las características de eventos o comportamientos, puedes considerar usar
[[yii\base\Object|Object]] como clase base. Esto es frecuente en el caso de que las clases que representan sean [[yii\base\BaseObject|BaseObject]] como clase base. Esto es frecuente en el caso de que las clases que representan sean
estructuras de datos básicas. estructuras de datos básicas.
Configuración de objetos Configuración de objetos
------------------------ ------------------------
La clase [[yii\base\Object|Object]] introduce una manera uniforme de configurar objetos. Cualquier clase descendiente La clase [[yii\base\BaseObject|BaseObject]] introduce una manera uniforme de configurar objetos. Cualquier clase descendiente
de [[yii\base\Object|Object]] debería declarar su constructor (si fuera necesario) de la siguiente manera para que de [[yii\base\BaseObject|BaseObject]] debería declarar su constructor (si fuera necesario) de la siguiente manera para que
puede ser adecuadamente configurado: puede ser adecuadamente configurado:
```php ```php
class MyClass extends \yii\base\Object class MyClass extends \yii\base\BaseObject
{ {
public function __construct($param1, $param2, $config = []) public function __construct($param1, $param2, $config = [])
{ {
@ -94,7 +94,7 @@ class MyClass extends \yii\base\Object
En el ejemplo de arriba, el último parámetro del constructor debe tomar un array de configuración que En el ejemplo de arriba, el último parámetro del constructor debe tomar un array de configuración que
contiene pares clave-valor para la inicialización de las propiedades al final del mismo. contiene pares clave-valor para la inicialización de las propiedades al final del mismo.
Puedes sobrescribir el método [[yii\base\Object::init()|init()]] para realizar el trabajo de inicialización Puedes sobrescribir el método [[yii\base\BaseObject::init()|init()]] para realizar el trabajo de inicialización
que debe ser hecho después de que la configuración haya sido aplicada. que debe ser hecho después de que la configuración haya sido aplicada.
Siguiendo esa convención, podrás crear y configurar nuevos objetos utilizando Siguiendo esa convención, podrás crear y configurar nuevos objetos utilizando

2
docs/guide-es/runtime-responses.md

@ -18,7 +18,7 @@ En esta sección, se describirá como generar y enviar respuestas a usuarios fin
Una de las primeras cosas que debería hacerse cuando se genera una respuesta es indicar si la petición se ha Una de las primeras cosas que debería hacerse cuando se genera una respuesta es indicar si la petición se ha
gestionado correctamente. Esto se indica asignando la propiedad [[yii\web\Response::statusCode]] a la que se le puede gestionado correctamente. Esto se indica asignando la propiedad [[yii\web\Response::statusCode]] a la que se le puede
asignar cualquier valor válido dentro de los asignar cualquier valor válido dentro de los
[códigos de estado HTTP](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Por ejemplo, para indicar que la [códigos de estado HTTP](https://tools.ietf.org/html/rfc2616#section-10). Por ejemplo, para indicar que la
petición se ha gestionado correctamente, se puede asignar el código de estado a 200, como en el siguiente ejemplo: petición se ha gestionado correctamente, se puede asignar el código de estado a 200, como en el siguiente ejemplo:
```php ```php

4
docs/guide-es/runtime-routing.md

@ -598,9 +598,9 @@ Podemos crear la siguiente clase de reglas de URL para solucionar el problema.
namespace app\components; namespace app\components;
use yii\web\UrlRuleInterface; use yii\web\UrlRuleInterface;
use yii\base\Object; use yii\base\BaseObject;
class CarUrlRule extends Object implements UrlRuleInterface class CarUrlRule extends BaseObject implements UrlRuleInterface
{ {
public function createUrl($manager, $route, $params) public function createUrl($manager, $route, $params)

6
docs/guide-es/structure-applications.md

@ -20,11 +20,11 @@ Cuando un [script de entrada](structure-entry-scripts.md) crea una aplicación,
una [configuración](concept-configurations.md) y la aplicará a la aplicación, como se muestra a continuación: una [configuración](concept-configurations.md) y la aplicará a la aplicación, como se muestra a continuación:
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// carga la configuración de la aplicación // carga la configuración de la aplicación
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// instancia y configura la aplicación // instancia y configura la aplicación
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();

2
docs/guide-es/structure-assets.md

@ -557,7 +557,7 @@ se incluya condicionalmente este archivo en la configuración de la aplicación.
return [ return [
'components' => [ 'components' => [
'assetManager' => [ 'assetManager' => [
'bundles' => require(__DIR__ . '/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php')), 'bundles' => require __DIR__ . '/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php'),
], ],
], ],
]; ];

12
docs/guide-es/structure-entry-scripts.md

@ -34,13 +34,13 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev'); defined('YII_ENV') or define('YII_ENV', 'dev');
// registrar el cargador automático de Composer // registrar el cargador automático de Composer
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
// incluir el fichero de clase Yii // incluir el fichero de clase Yii
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// cargar la configuración de la aplicación // cargar la configuración de la aplicación
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// crear, configurar y ejecutar la aplicación // crear, configurar y ejecutar la aplicación
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();
@ -64,13 +64,13 @@ De la misma manera, el siguiente código es el script de entrada para la [aplica
defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_DEBUG') or define('YII_DEBUG', true);
// registrar el cargador automático de Composer // registrar el cargador automático de Composer
require(__DIR__ . '/vendor/autoload.php'); require __DIR__ . '/vendor/autoload.php';
// incluir el fichero de clase Yii // incluir el fichero de clase Yii
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
// cargar la configuración de la aplicación // cargar la configuración de la aplicación
$config = require(__DIR__ . '/config/console.php'); $config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config); $application = new yii\console\Application($config);
$exitCode = $application->run(); $exitCode = $application->run();

2
docs/guide-es/structure-extensions.md

@ -385,7 +385,7 @@ mencionados a continuación para facilitar a otra gente el uso de nuestra extens
características que no pueden ser detalladas completamente en el archivo `readme`. características que no pueden ser detalladas completamente en el archivo `readme`.
* Documentación de API: el código debe documentarse debidamente para que otras personas puedan leerlo y entenderlo * Documentación de API: el código debe documentarse debidamente para que otras personas puedan leerlo y entenderlo
fácilmente. Más información acerca de documentación de código en fácilmente. Más información acerca de documentación de código en
[archivo de Objetos de clase](https://github.com/yiisoft/yii2/blob/master/framework/base/Object.php) [archivo de Objetos de clase](https://github.com/yiisoft/yii2/blob/master/framework/base/BaseObject.php)
> Info: Los comentarios de código pueden ser escritos en formato Markdown. La extensión `yiisoft/yii2-apidoc` > Info: Los comentarios de código pueden ser escritos en formato Markdown. La extensión `yiisoft/yii2-apidoc`
proporciona una herramienta para generar buena documentación de API basándose en los comentarios del código. proporciona una herramienta para generar buena documentación de API basándose en los comentarios del código.

2
docs/guide-es/structure-modules.md

@ -59,7 +59,7 @@ public function init()
{ {
parent::init(); parent::init();
// inicializa el módulo con la configuración cargada desde config.php // inicializa el módulo con la configuración cargada desde config.php
\Yii::configure($this, require(__DIR__ . '/config.php')); \Yii::configure($this, require __DIR__ . '/config.php');
} }
``` ```

18
docs/guide-es/tutorial-yii-integration.md

@ -25,10 +25,10 @@ para instalar el cargador automático de Composer:
```php ```php
// instalar el cargador automático de Composer // instalar el cargador automático de Composer
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
// incluir rl fichero de la clase Yii // incluir rl fichero de la clase Yii
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
``` ```
### Usando librerías Descargadas <span id="using-downloaded-libs"></span> ### Usando librerías Descargadas <span id="using-downloaded-libs"></span>
@ -114,9 +114,9 @@ y desempaquetarla en el directorio `BasePath/vendor`.
Después, debes de modificar el script de entrada de sistema de terceros para incluir el siguiente código al principio: Después, debes de modificar el script de entrada de sistema de terceros para incluir el siguiente código al principio:
```php ```php
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
$yiiConfig = require(__DIR__ . '/../config/yii/web.php'); $yiiConfig = require __DIR__ . '/../config/yii/web.php';
new yii\web\Application($yiiConfig); // No ejecutes run() aquí new yii\web\Application($yiiConfig); // No ejecutes run() aquí
``` ```
@ -149,14 +149,14 @@ Segundo, modifica el script de entrada de la aplicación como sigue,
```php ```php
// incluir la clase Yii personalizada descrita debajo // incluir la clase Yii personalizada descrita debajo
require(__DIR__ . '/../components/Yii.php'); require __DIR__ . '/../components/Yii.php';
// configuración para la aplicación Yii 2 // configuración para la aplicación Yii 2
$yii2Config = require(__DIR__ . '/../config/yii2/web.php'); $yii2Config = require __DIR__ . '/../config/yii2/web.php';
new yii\web\Application($yii2Config); // No llamar a run() new yii\web\Application($yii2Config); // No llamar a run()
// configuración para la aplicación Yii 1 // configuración para la aplicación Yii 1
$yii1Config = require(__DIR__ . '/../config/yii1/main.php'); $yii1Config = require __DIR__ . '/../config/yii1/main.php';
Yii::createWebApplication($yii1Config)->run(); Yii::createWebApplication($yii1Config)->run();
``` ```
@ -165,10 +165,10 @@ El código anterior incluye el fichero con la clase `Yii` personalizada, que tie
```php ```php
$yii2path = '/path/to/yii2'; $yii2path = '/path/to/yii2';
require($yii2path . '/BaseYii.php'); // Yii 2.x require $yii2path . '/BaseYii.php'; // Yii 2.x
$yii1path = '/path/to/yii1'; $yii1path = '/path/to/yii1';
require($yii1path . '/YiiBase.php'); // Yii 1.x require $yii1path . '/YiiBase.php'; // Yii 1.x
class Yii extends \yii\BaseYii class Yii extends \yii\BaseYii
{ {

4
docs/guide-fr/concept-autoloading.md

@ -47,8 +47,8 @@ Comme Yii utilise Composer comme gestionnaire de dépendances de paquets, il est
Lors de l'utilisation conjointe du chargeur automatique de Yii et d'autres chargeurs automatiques, vous devez inclure le fichier `Yii.php` *après* que tous les autres chargeurs automatiques sont installés. Cela fait du chargeur automatique de Yii le premier à répondre à une requête de chargement automatique de classe. Par exemple, le code suivant est extrait du [script d'entrée](structure-entry-scripts.md) du [modèle de projet *basic*](start-installation.md). La première ligne installe le chargeur automatique de Composer, tandis que la seconde installe le chargeur automatique de Yii : Lors de l'utilisation conjointe du chargeur automatique de Yii et d'autres chargeurs automatiques, vous devez inclure le fichier `Yii.php` *après* que tous les autres chargeurs automatiques sont installés. Cela fait du chargeur automatique de Yii le premier à répondre à une requête de chargement automatique de classe. Par exemple, le code suivant est extrait du [script d'entrée](structure-entry-scripts.md) du [modèle de projet *basic*](start-installation.md). La première ligne installe le chargeur automatique de Composer, tandis que la seconde installe le chargeur automatique de Yii :
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
``` ```
Vous pouvez utiliser le chargeur automatique de Composer seul sans celui de Yii. Néanmoins, en faisant de cette manière, la performance de chargement de vos classes est dégradée et vous devez appliquer les règles de Composer pour que vos classes puissent être chargées automatiquement. Vous pouvez utiliser le chargeur automatique de Composer seul sans celui de Yii. Néanmoins, en faisant de cette manière, la performance de chargement de vos classes est dégradée et vous devez appliquer les règles de Composer pour que vos classes puissent être chargées automatiquement.

2
docs/guide-fr/concept-behaviors.md

@ -37,7 +37,7 @@ class MyBehavior extends Behavior
} }
``` ```
Le code ci-dessus définit la classe de comportement `app\components\MyBehavior` avec deux propriété — `prop1` et `prop2` — et une méthode `foo()`. Notez que la propriété `prop2` est définie via la méthode d'obtention `getProp2` et la méthode d'assignation `setProp2`. Cela est le cas parce que la classe [[yii\base\Behavior]] étend la classe [[yii\base\Object]] et, par conséquent, prend en charge la définition des [propriétés](concept-properties.md) via les méthodes d'obtention et d'assignation. Le code ci-dessus définit la classe de comportement `app\components\MyBehavior` avec deux propriété — `prop1` et `prop2` — et une méthode `foo()`. Notez que la propriété `prop2` est définie via la méthode d'obtention `getProp2` et la méthode d'assignation `setProp2`. Cela est le cas parce que la classe [[yii\base\Behavior]] étend la classe [[yii\base\BaseObject]] et, par conséquent, prend en charge la définition des [propriétés](concept-properties.md) via les méthodes d'obtention et d'assignation.
Comme cette classe est un comportement, lorsqu'elle est attachée à un composant, ce composant acquiert alors les propriétés `prop1` et `prop2`, ainsi que la méthode `foo()`. Comme cette classe est un comportement, lorsqu'elle est attachée à un composant, ce composant acquiert alors les propriétés `prop1` et `prop2`, ainsi que la méthode `foo()`.

14
docs/guide-fr/concept-components.md

@ -23,13 +23,13 @@ echo DatePicker::widget([
``` ```
Les propriétés de l'objet graphique sont faciles à écrire car la classe étend [[yii\base\Component]]. Les propriétés de l'objet graphique sont faciles à écrire car la classe étend [[yii\base\Component]].
Tandis que les composants sont très puissants, ils sont un peu plus lourds que les objets normaux. Cela est dû au fait que, en particulier, la prise en charge des fonctionnalités [event](concept-events.md) et [behavior](concept-behaviors.md) requiert un peu plus de mémoire et de temps du processeur. Si vos composants n'ont pas besoin de ces deux fonctionnalités, vous devriez envisager d'étendre la classe [[yii\base\Object]] au lieu de la classe [[yii\base\Component]]. Ce faisant, votre composant sera aussi efficace que les objets PHP normaux, mais avec la prise en charge des [propriétés](concept-properties.md). Tandis que les composants sont très puissants, ils sont un peu plus lourds que les objets normaux. Cela est dû au fait que, en particulier, la prise en charge des fonctionnalités [event](concept-events.md) et [behavior](concept-behaviors.md) requiert un peu plus de mémoire et de temps du processeur. Si vos composants n'ont pas besoin de ces deux fonctionnalités, vous devriez envisager d'étendre la classe [[yii\base\BaseObject]] au lieu de la classe [[yii\base\Component]]. Ce faisant, votre composant sera aussi efficace que les objets PHP normaux, mais avec la prise en charge des [propriétés](concept-properties.md).
Lorsque votre classe étend la classe [[yii\base\Component]] ou [[yii\base\Object]], il est recommandé que suiviez ces conventions : Lorsque votre classe étend la classe [[yii\base\Component]] ou [[yii\base\BaseObject]], il est recommandé que suiviez ces conventions :
- Si vous redéfinissez le constructeur, spécifiez un paramètre `$config` en tant que *dernier* paramètre du constructeur est passez le au constructeur du parent. - Si vous redéfinissez le constructeur, spécifiez un paramètre `$config` en tant que *dernier* paramètre du constructeur est passez le au constructeur du parent.
- Appelez toujours le constructeur du parent *à la fin* de votre constructeur redéfini. - Appelez toujours le constructeur du parent *à la fin* de votre constructeur redéfini.
- Si vous redéfinissez la méthode [[yii\base\Object::init()]], assurez-vous que vous appelez la méthode `init()` mise en œuvre par le parent *au début* de votre méthodes `init()`. - Si vous redéfinissez la méthode [[yii\base\BaseObject::init()]], assurez-vous que vous appelez la méthode `init()` mise en œuvre par le parent *au début* de votre méthodes `init()`.
Par exemple : Par exemple :
@ -38,9 +38,9 @@ Par exemple :
namespace yii\components\MyClass; namespace yii\components\MyClass;
use yii\base\Object; use yii\base\BaseObject;
class MyClass extends Object class MyClass extends BaseObject
{ {
public $prop1; public $prop1;
public $prop2; public $prop2;
@ -76,11 +76,11 @@ $component = \Yii::createObject([
> Info: bien que l'approche qui consiste à appeler la méthode [[Yii::createObject()]] semble plus compliquée, elle est plus puissante car elle est mise en œuvre sur un [conteneur d'injection de dépendances](concept-di-container.md). > Info: bien que l'approche qui consiste à appeler la méthode [[Yii::createObject()]] semble plus compliquée, elle est plus puissante car elle est mise en œuvre sur un [conteneur d'injection de dépendances](concept-di-container.md).
La classe [[yii\base\Object]] fait appliquer le cycle de vie suivant de l'objet : La classe [[yii\base\BaseObject]] fait appliquer le cycle de vie suivant de l'objet :
1. Pré-initialisation dans le constructeur. Vous pouvez définir les propriétés par défaut à cet endroit. 1. Pré-initialisation dans le constructeur. Vous pouvez définir les propriétés par défaut à cet endroit.
2. Configuration de l'objet via `$config`. La configuration peut écraser les valeurs par défaut définies dans le constructeur. 2. Configuration de l'objet via `$config`. La configuration peut écraser les valeurs par défaut définies dans le constructeur.
3. Post-initialisation dans la méthode [[yii\base\Object::init()|init()]]. Vous pouvez redéfinir cette méthode pour effectuer des tests sanitaires et normaliser les propriétés. 3. Post-initialisation dans la méthode [[yii\base\BaseObject::init()|init()]]. Vous pouvez redéfinir cette méthode pour effectuer des tests sanitaires et normaliser les propriétés.
4. Appel des méthodes de l'objet. 4. Appel des méthodes de l'objet.
Les trois premières étapes arrivent toutes durant la construction de l'objet. Cela signifie qu'une fois que vous avez obtenu une instance de la classe (c.-à-d. un objet), cet objet a déjà été initialisé dans un état propre et fiable. Les trois premières étapes arrivent toutes durant la construction de l'objet. Cela signifie qu'une fois que vous avez obtenu une instance de la classe (c.-à-d. un objet), cet objet a déjà été initialisé dans un état propre et fiable.

8
docs/guide-fr/concept-configurations.md

@ -78,7 +78,7 @@ La configuration d'une [application](structure-applications.md) est probablement
$config = [ $config = [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => [ 'components' => [
'cache' => [ 'cache' => [
'class' => 'yii\caching\FileCache', 'class' => 'yii\caching\FileCache',
@ -144,8 +144,8 @@ Lorsqu'une configuration est très complexe, une pratique courante est de la sto
return [ return [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => require(__DIR__ . '/components.php'), 'components' => require __DIR__ . '/components.php',
]; ];
``` ```
@ -181,7 +181,7 @@ return [
Pour obtenir une configuration stockée dans un fichier de configuration, il vous suffit requérir ce fichier avec "require", comme ceci : Pour obtenir une configuration stockée dans un fichier de configuration, il vous suffit requérir ce fichier avec "require", comme ceci :
```php ```php
$config = require('path/to/web.php'); $config = require 'path/to/web.php';
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();
``` ```

12
docs/guide-fr/concept-di-container.md

@ -67,9 +67,9 @@ Yii::$container->invoke([$obj, 'doSomething'], ['param1' => 42]); // $something
L'injection par les méthodes d'assignation et les propriétés est prise en charge via les [configurations](concept-configurations.md). Lors de l'enregistrement d'une dépendance ou lors de la création d'un nouvel objet, vous pouvez fournir une configuration qui est utilisée par le conteneur pour injecter les dépendances via les méthodes d'assignation ou les propriétés correspondantes. Par exemple : L'injection par les méthodes d'assignation et les propriétés est prise en charge via les [configurations](concept-configurations.md). Lors de l'enregistrement d'une dépendance ou lors de la création d'un nouvel objet, vous pouvez fournir une configuration qui est utilisée par le conteneur pour injecter les dépendances via les méthodes d'assignation ou les propriétés correspondantes. Par exemple :
```php ```php
use yii\base\Object; use yii\base\BaseObject;
class Foo extends Object class Foo extends BaseObject
{ {
public $bar; public $bar;
@ -92,7 +92,7 @@ $container->get('Foo', [], [
]); ]);
``` ```
> Info: la méthode [[yii\di\Container::get()]] accepte un tableau de configuration qui peut être appliqué à l'objet en création comme troisième paramètre. Si la classe implémente l'interface [[yii\base\Configurable]] (p. ex. [[yii\base\Object]]), le tableau de configuration est passé en tant que dernier paramètre du constructeur de la classe; autrement le tableau de configuration serait appliqué *après* la création de l'objet. > Info: la méthode [[yii\di\Container::get()]] accepte un tableau de configuration qui peut être appliqué à l'objet en création comme troisième paramètre. Si la classe implémente l'interface [[yii\base\Configurable]] (p. ex. [[yii\base\BaseObject]]), le tableau de configuration est passé en tant que dernier paramètre du constructeur de la classe; autrement le tableau de configuration serait appliqué *après* la création de l'objet.
### Injection par une méthode de rappel PHP <span id="php-callable-injection"></span> ### Injection par une méthode de rappel PHP <span id="php-callable-injection"></span>
@ -215,7 +215,7 @@ Le code suivant montre un exemple plus sophistiqué. La classe `UserLister` dép
```php ```php
namespace app\models; namespace app\models;
use yii\base\Object; use yii\base\BaseObject;
use yii\db\Connection; use yii\db\Connection;
use yii\di\Container; use yii\di\Container;
@ -224,7 +224,7 @@ interface UserFinderInterface
function findUser(); function findUser();
} }
class UserFinder extends Object implements UserFinderInterface class UserFinder extends BaseObject implements UserFinderInterface
{ {
public $db; public $db;
@ -239,7 +239,7 @@ class UserFinder extends Object implements UserFinderInterface
} }
} }
class UserLister extends Object class UserLister extends BaseObject
{ {
public $finder; public $finder;

2
docs/guide-fr/concept-events.md

@ -208,7 +208,7 @@ Event::trigger(Foo::class, Foo::EVENT_HELLO);
Notez que, dans ce cas, `$event->sender` fait référence au nom de la classe qui a déclenché l'événement plutôt qu'à une instance de classe. Notez que, dans ce cas, `$event->sender` fait référence au nom de la classe qui a déclenché l'événement plutôt qu'à une instance de classe.
> Note: comme les gestionnaires attachés au niveau de la classe répondent aux événements déclenchés par n'importe quelle instance de cette classe, ou de ses classes filles, vous devez utiliser cette fonctionnalité avec précaution, en particulier si la classe est une classe de bas niveau comme la classe [[yii\base\Object]]. > Note: comme les gestionnaires attachés au niveau de la classe répondent aux événements déclenchés par n'importe quelle instance de cette classe, ou de ses classes filles, vous devez utiliser cette fonctionnalité avec précaution, en particulier si la classe est une classe de bas niveau comme la classe [[yii\base\BaseObject]].
Pour détacher un gestionnaire attaché au niveau de la classe, appelez [[yii\base\Event::off()]]. Par exemple : Pour détacher un gestionnaire attaché au niveau de la classe, appelez [[yii\base\Event::off()]]. Par exemple :

10
docs/guide-fr/concept-properties.md

@ -9,18 +9,18 @@ $object->label = trim($label);
Le revers du code ci-dessus est que vous devez appeler `trim()` partout ou vous voulez définir la propriété `label`. Si, plus tard, la propriété `label` devient sujette à de nouvelles exigences, telles que la première lettre doit être une capitale, vous auriez à modifier toutes les parties de code qui assigne une valeur à la propriété `label`. La répétition de code conduit à des bogues, et c'est une pratique courant de l'éviter autant que faire se peut. Le revers du code ci-dessus est que vous devez appeler `trim()` partout ou vous voulez définir la propriété `label`. Si, plus tard, la propriété `label` devient sujette à de nouvelles exigences, telles que la première lettre doit être une capitale, vous auriez à modifier toutes les parties de code qui assigne une valeur à la propriété `label`. La répétition de code conduit à des bogues, et c'est une pratique courant de l'éviter autant que faire se peut.
Pour résoudre ce problème, Yii introduit une classe de base nommée [[yii\base\Object]] qui prend en charge la définition de propriétés sur la base de méthodes d'obtention (*getter*) et de méthode d'assignation (*setters*). Si une classe a besoin de cette fonctionnalité, il suffit qu'elle étende la classe[[yii\base\Object]], ou une de ses classes filles. Pour résoudre ce problème, Yii introduit une classe de base nommée [[yii\base\BaseObject]] qui prend en charge la définition de propriétés sur la base de méthodes d'obtention (*getter*) et de méthode d'assignation (*setters*). Si une classe a besoin de cette fonctionnalité, il suffit qu'elle étende la classe[[yii\base\BaseObject]], ou une de ses classes filles.
> Info: presque toutes les classes du noyau du framework Yii étendent la classe [[yii\base\Object]] ou une de ses classes filles. Cela veut dire, que chaque fois que vous trouvez une méthode d'obtention ou d'assignation dans une classe du noyau, vous pouvez l'utiliser comme une propriété. > Info: presque toutes les classes du noyau du framework Yii étendent la classe [[yii\base\BaseObject]] ou une de ses classes filles. Cela veut dire, que chaque fois que vous trouvez une méthode d'obtention ou d'assignation dans une classe du noyau, vous pouvez l'utiliser comme une propriété.
Une méthode d'obtention est une méthode dont le nom commence par le mot `get` (obtenir) et une méthode d'assignation est une méthode dont le nom commence par le mot `set` (assigner, définir). Le nom après les mots préfixes `get` ou `set` définit le nom d'une propriété. Par exemple, une méthode d'obtention `getLabel` et/ou une méthode d'assignation `setLabel` obtient et assigne, respectivement, une propriété nommée `label`, comme le montre le code suivant : Une méthode d'obtention est une méthode dont le nom commence par le mot `get` (obtenir) et une méthode d'assignation est une méthode dont le nom commence par le mot `set` (assigner, définir). Le nom après les mots préfixes `get` ou `set` définit le nom d'une propriété. Par exemple, une méthode d'obtention `getLabel` et/ou une méthode d'assignation `setLabel` obtient et assigne, respectivement, une propriété nommée `label`, comme le montre le code suivant :
```php ```php
namespace app\components; namespace app\components;
use yii\base\Object; use yii\base\BaseObject;
class Foo extends Object class Foo extends BaseObject
{ {
private $_label; private $_label;
@ -56,6 +56,6 @@ Il existe plusieurs règles spéciales pour les propriétés définies via des m
* Si le nom d'uen telle propriété est identique à celui d'une variable membre de la classe, la dernier prévaut. Par exemple, si la classe ci-dessus `Foo` possède une variable mommée `label`, alors l'assignation `$object->label = 'abc'` affecte la *variable membre* `label` ; cette ligne ne fait pas appel à la méthode d'assignation `setLabel()`. * Si le nom d'uen telle propriété est identique à celui d'une variable membre de la classe, la dernier prévaut. Par exemple, si la classe ci-dessus `Foo` possède une variable mommée `label`, alors l'assignation `$object->label = 'abc'` affecte la *variable membre* `label` ; cette ligne ne fait pas appel à la méthode d'assignation `setLabel()`.
* Ces propriétés en prennent pas en charge la visibilité. Cela ne fait aucune différence pour les méthodes d'obtention et d'assignation qui définissent une propriété, que cette propriété soit publique, protégée ou privée. * Ces propriétés en prennent pas en charge la visibilité. Cela ne fait aucune différence pour les méthodes d'obtention et d'assignation qui définissent une propriété, que cette propriété soit publique, protégée ou privée.
* Les propriétés peuvent uniquement être définies par des méthodes d'obtention et d'assignation *non-statiques*. Les méthodes statiques ne sont pas traitées de la même manière. * Les propriétés peuvent uniquement être définies par des méthodes d'obtention et d'assignation *non-statiques*. Les méthodes statiques ne sont pas traitées de la même manière.
* Un appel normal à la méthode `property_exists()` ne fonctionne pas pour déterminer des propriétés magiques. Vous devez appeler [[yii\base\Object::canGetProperty()|canGetProperty()]] ou [[yii\base\Object::canSetProperty()|canSetProperty()]] respectivement. * Un appel normal à la méthode `property_exists()` ne fonctionne pas pour déterminer des propriétés magiques. Vous devez appeler [[yii\base\BaseObject::canGetProperty()|canGetProperty()]] ou [[yii\base\BaseObject::canSetProperty()|canSetProperty()]] respectivement.
En revenant au problème évoqué au début de ce guide, au lieu d'appeler `trim()` partout où une valeur est assignée à `label`, vous pouvez vous contenter d'appeler `trim()` dans la méthode d'assignation `setLabel()`. Et si une nouvelle exigence apparaît – comme celle de mettre la première lettre en capitale – la méthode `setLabel()` peut être rapidement modifiée sans avoir à toucher à d'autres parties du code. Cet unique modification affecte l'ensemble des assignation de `label`. En revenant au problème évoqué au début de ce guide, au lieu d'appeler `trim()` partout où une valeur est assignée à `label`, vous pouvez vous contenter d'appeler `trim()` dans la méthode d'assignation `setLabel()`. Et si une nouvelle exigence apparaît – comme celle de mettre la première lettre en capitale – la méthode `setLabel()` peut être rapidement modifiée sans avoir à toucher à d'autres parties du code. Cet unique modification affecte l'ensemble des assignation de `label`.

16
docs/guide-fr/intro-upgrade-from-v1.md

@ -58,26 +58,26 @@ chargeur de classe de Yii.)
Composants et objets Composants et objets
-------------------- --------------------
Yii 2.0 décompose la classe `CComponent` 1.1 en deux classes: [[yii\base\Object]] et [[yii\base\Component]]. Yii 2.0 décompose la classe `CComponent` 1.1 en deux classes: [[yii\base\BaseObject]] et [[yii\base\Component]].
Le classe [[yii\base\Object|Object]] est une classe de base légère qui permet de définir les Le classe [[yii\base\BaseObject|BaseObject]] est une classe de base légère qui permet de définir les
[Propriétés de l'objet](concept-properties.md) via des accesseurs. La classe [[yii\base\Component|Component]] est une [Propriétés de l'objet](concept-properties.md) via des accesseurs. La classe [[yii\base\Component|Component]] est une
sous classe de [[yii\base\Object|Object]] et prend en charge les [Evénements](concept events.md) et les sous classe de [[yii\base\BaseObject|BaseObject]] et prend en charge les [Evénements](concept events.md) et les
[Comportements](concept-behaviors.md). [Comportements](concept-behaviors.md).
Si votre classe n'a pas besoin des événements et des comportements, vous devriez envisager d'utiliser Si votre classe n'a pas besoin des événements et des comportements, vous devriez envisager d'utiliser
[[yii\base\Object|Object]] comme classe de base. C'est généralement le cas pour les classes qui représentent [[yii\base\BaseObject|BaseObject]] comme classe de base. C'est généralement le cas pour les classes qui représentent
une structure de données basique. une structure de données basique.
Configuration d'objets Configuration d'objets
--------------------- ---------------------
La classe [[yii\base\Object|Object]] introduit une manière uniforme de configurer les objets. Toute sous-classe La classe [[yii\base\BaseObject|BaseObject]] introduit une manière uniforme de configurer les objets. Toute sous-classe
de [[yii\base\Object|Object]] doit déclarer son constructeur (si besoin) de la manière suivante afin qu'elle de [[yii\base\BaseObject|BaseObject]] doit déclarer son constructeur (si besoin) de la manière suivante afin qu'elle
puisse être configurée correctement : puisse être configurée correctement :
```php ```php
class MyClass extends \yii\base\Object class MyClass extends \yii\base\BaseObject
{ {
public function __construct($param1, $param2, $config = []) public function __construct($param1, $param2, $config = [])
{ {
@ -97,7 +97,7 @@ class MyClass extends \yii\base\Object
Dans ce qui précède, le dernier paramètre du constructeur doit être un tableau de configuration Dans ce qui précède, le dernier paramètre du constructeur doit être un tableau de configuration
qui contient des entrées nom-valeur pour initialiser les propriétés à la fin du constructeur. qui contient des entrées nom-valeur pour initialiser les propriétés à la fin du constructeur.
Vous pouvez remplacer la méthode [[yii\base\Object::init()|init()]] pour le travail d'initialisation qui doit être fait Vous pouvez remplacer la méthode [[yii\base\BaseObject::init()|init()]] pour le travail d'initialisation qui doit être fait
après que la configuration a été appliquée. après que la configuration a été appliquée.
En suivant cette convention, vous serez en mesure de créer et de configurer de nouveaux objets en utilisant un tableau En suivant cette convention, vous serez en mesure de créer et de configurer de nouveaux objets en utilisant un tableau

2
docs/guide-fr/runtime-responses.md

@ -10,7 +10,7 @@ Dans cette section, nous décrivons comment composer et enovoyer des réponses
## Code d'état <span id="status-code"></span> ## Code d'état <span id="status-code"></span>
Une de première chose que vous devez faire lorsque vous construisez une réponse est de déclarer si la requête a été correctement prise en charge ou pas. Cela se fait en définissant la propriété [[yii\web\Response::statusCode (code d'état)]] qui peut prendre un des [code d'état HTTP](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) valides. Par exemple, pour indiquer que la requête a été prise en charge avec succès, vous pouvez définir le code à 200, comme ceci : Une de première chose que vous devez faire lorsque vous construisez une réponse est de déclarer si la requête a été correctement prise en charge ou pas. Cela se fait en définissant la propriété [[yii\web\Response::statusCode (code d'état)]] qui peut prendre un des [code d'état HTTP](https://tools.ietf.org/html/rfc2616#section-10) valides. Par exemple, pour indiquer que la requête a été prise en charge avec succès, vous pouvez définir le code à 200, comme ceci :
```php ```php
Yii::$app->response->statusCode = 200; Yii::$app->response->statusCode = 200;

4
docs/guide-fr/runtime-routing.md

@ -452,9 +452,9 @@ Vous pouvez créer les classes de règle d'URL suivantes pour résoudre ce probl
namespace app\components; namespace app\components;
use yii\web\UrlRuleInterface; use yii\web\UrlRuleInterface;
use yii\base\Object; use yii\base\BaseObject;
class CarUrlRule extends Object implements UrlRuleInterface class CarUrlRule extends BaseObject implements UrlRuleInterface
{ {
public function createUrl($manager, $route, $params) public function createUrl($manager, $route, $params)

6
docs/guide-fr/structure-applications.md

@ -16,11 +16,11 @@ Il existe deux types d'application : [[yii\web\Application|les applications We
Losqu'un [script d'entrée](structure-entry-scripts.md) crée une application, il charge une [configuration](concept-configurations.md) et l'applique à cette application de la manière suivante : Losqu'un [script d'entrée](structure-entry-scripts.md) crée une application, il charge une [configuration](concept-configurations.md) et l'applique à cette application de la manière suivante :
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// charger la configuration de l'application // charger la configuration de l'application
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// instancier et configurer l'application // instancier et configurer l'application
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();

2
docs/guide-fr/structure-assets.md

@ -421,7 +421,7 @@ Il y a un truc final pour rendre l'approche ci-dessus plus lisse. Au lieu de mod
return [ return [
'components' => [ 'components' => [
'assetManager' => [ 'assetManager' => [
'bundles' => require(__DIR__ . '/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php')), 'bundles' => require __DIR__ . '/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php'),
], ],
], ],
]; ];

12
docs/guide-fr/structure-entry-scripts.md

@ -34,13 +34,13 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev'); defined('YII_ENV') or define('YII_ENV', 'dev');
// register Composer autoloader // register Composer autoloader
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
// include Yii class file // include Yii class file
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// load application configuration // load application configuration
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// create, configure and run application // create, configure and run application
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();
@ -65,13 +65,13 @@ De même, le code qui suit est le code du script de démarrage d'une application
defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_DEBUG') or define('YII_DEBUG', true);
// register Composer autoloader // register Composer autoloader
require(__DIR__ . '/vendor/autoload.php'); require __DIR__ . '/vendor/autoload.php';
// include Yii class file // include Yii class file
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
// load application configuration // load application configuration
$config = require(__DIR__ . '/config/console.php'); $config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config); $application = new yii\console\Application($config);
$exitCode = $application->run(); $exitCode = $application->run();

2
docs/guide-fr/structure-extensions.md

@ -290,7 +290,7 @@ Dans les versions de votre extension, en plus des fichiers de code, vous devez e
* Un fichier *changelog* (journal des modifications) dans le dossier racine du paquet : il liste les changements apportés dans chacune des versions. Ce fichier peut être écrit dans le format Markdown et nommé `changelog.md`. * Un fichier *changelog* (journal des modifications) dans le dossier racine du paquet : il liste les changements apportés dans chacune des versions. Ce fichier peut être écrit dans le format Markdown et nommé `changelog.md`.
* Un fichier *upgrade* (mise à jour) dans le dossier racine du paquet : il donne les instructions sur la manière de mettre l'extension à jour en partant d'une version précédente. Ce fichier peut être écrit dans le format Markdown et nommé `upgrade.md`. * Un fichier *upgrade* (mise à jour) dans le dossier racine du paquet : il donne les instructions sur la manière de mettre l'extension à jour en partant d'une version précédente. Ce fichier peut être écrit dans le format Markdown et nommé `upgrade.md`.
* Tutorials, demos, screenshots, etc.: ces derniers sont nécessaires si votre extension fournit de nombreuses fonctionnalités qui ne peuvent être couvertes dans le fichier readme. * Tutorials, demos, screenshots, etc.: ces derniers sont nécessaires si votre extension fournit de nombreuses fonctionnalités qui ne peuvent être couvertes dans le fichier readme.
* Une documentation de l'API : votre code doit être bien documenté pour permettre aux autres personnes de le lire plus facilement et de le comprendre. Vous pouvez faire référence au [fichier de la classe Object](https://github.com/yiisoft/yii2/blob/master/framework/base/Object.php) pour savoir comment documenter votre code. * Une documentation de l'API : votre code doit être bien documenté pour permettre aux autres personnes de le lire plus facilement et de le comprendre. Vous pouvez faire référence au [fichier de la classe BaseObject](https://github.com/yiisoft/yii2/blob/master/framework/base/BaseObject.php) pour savoir comment documenter votre code.
> Info: les commentaires de votre code peuvent être écrits dans le format Markdown. L'extension `yiisoft/yii2-apidoc` vous fournit un outil pour générer une documentation d'API agréable et basée sur les commentaires de votre code. > Info: les commentaires de votre code peuvent être écrits dans le format Markdown. L'extension `yiisoft/yii2-apidoc` vous fournit un outil pour générer une documentation d'API agréable et basée sur les commentaires de votre code.

2
docs/guide-fr/structure-modules.md

@ -49,7 +49,7 @@ public function init()
{ {
parent::init(); parent::init();
// initialise le module à partir de la configuration chargée depuis config.php // initialise le module à partir de la configuration chargée depuis config.php
\Yii::configure($this, require(__DIR__ . '/config.php')); \Yii::configure($this, require __DIR__ . '/config.php');
} }
``` ```

16
docs/guide-id/intro-upgrade-from-v1.md

@ -55,25 +55,25 @@ menunjukkan bahwa file kelas yang sesuai adalah `web/Request.php` bawah folder f
Komponen dan Object Komponen dan Object
-------------------- --------------------
Yii 2.0 membagi kelas `CComponent` di 1.1 menjadi dua kelas: [[yii\base\Object]] dan [[yii\base\Component]]. Yii 2.0 membagi kelas `CComponent` di 1.1 menjadi dua kelas: [[yii\base\BaseObject]] dan [[yii\base\Component]].
Class [[yii\base\Object|Object]] adalah class dasar ringan yang memungkinkan mendefinisikan [objek properti](concept-properties.md) Class [[yii\base\BaseObject|BaseObject]] adalah class dasar ringan yang memungkinkan mendefinisikan [objek properti](concept-properties.md)
melalui getter dan setter. Class [[yii\base\Component|Component]] adalah perluasan dari [[yii\base\Object|Object]] dengan dukungan melalui getter dan setter. Class [[yii\base\Component|Component]] adalah perluasan dari [[yii\base\BaseObject|BaseObject]] dengan dukungan
[Event](concept-events.md) dan [behavior](concept-behaviors.md). [Event](concept-events.md) dan [behavior](concept-behaviors.md).
Jika class Anda tidak perlu fitur event atau behavior, Anda harus mempertimbangkan menggunakan Jika class Anda tidak perlu fitur event atau behavior, Anda harus mempertimbangkan menggunakan
[[yii\base\Object|Object]] sebagai class dasar. Hal ini biasanya terjadi untuk class yang mewakili [[yii\base\BaseObject|BaseObject]] sebagai class dasar. Hal ini biasanya terjadi untuk class yang mewakili
struktur data dasar. struktur data dasar.
Konfigurasi objek Konfigurasi objek
-------------------- --------------------
Class [[yii\base\Object|Object]] memperkenalkan cara seragam untuk mengkonfigurasi objek. Setiap class turunan Class [[yii\base\BaseObject|BaseObject]] memperkenalkan cara seragam untuk mengkonfigurasi objek. Setiap class turunan
dari [[yii\base\Object|Object]] harus menyatakan konstruktor (jika diperlukan) dengan cara berikut agar dari [[yii\base\BaseObject|BaseObject]] harus menyatakan konstruktor (jika diperlukan) dengan cara berikut agar
dapat dikonfigurasi dengan benar: dapat dikonfigurasi dengan benar:
```php ```php
class MyClass extends \yii\base\Object class MyClass extends \yii\base\BaseObject
{ {
public function __construct($param1, $param2, $config = []) public function __construct($param1, $param2, $config = [])
{ {
@ -93,7 +93,7 @@ class MyClass extends \yii\base\Object
Dalam contoh di atas, parameter terakhir dari konstruktor harus mengambil array konfigurasi Dalam contoh di atas, parameter terakhir dari konstruktor harus mengambil array konfigurasi
yang berisi pasangan nama-nilai untuk menginisialisasi properti pada akhir konstruktor. yang berisi pasangan nama-nilai untuk menginisialisasi properti pada akhir konstruktor.
Anda dapat menimpa method [[yii\base\Object::init()|init()]] untuk melakukan pekerjaan inisialisasi yang harus dilakukan setelah Anda dapat menimpa method [[yii\base\BaseObject::init()|init()]] untuk melakukan pekerjaan inisialisasi yang harus dilakukan setelah
konfigurasi telah diterapkan. konfigurasi telah diterapkan.
Dengan mengikuti konvensi ini, Anda akan dapat membuat dan mengkonfigurasi objek baru menggunakan array konfigurasi: Dengan mengikuti konvensi ini, Anda akan dapat membuat dan mengkonfigurasi objek baru menggunakan array konfigurasi:

6
docs/guide-id/structure-applications.md

@ -19,11 +19,11 @@ Ketika [skrip masuk](structure-entry-scripts.md) membuat objek aplikasi, objek i
sebuah [array konfigurasi](concept-configurations.md) dan menerapkannya pada objek aplikasi seperti berikut ini: sebuah [array konfigurasi](concept-configurations.md) dan menerapkannya pada objek aplikasi seperti berikut ini:
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// memuat konfigurasi aplikasi // memuat konfigurasi aplikasi
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// membuat objek aplikasi & menerapkan konfigurasi // membuat objek aplikasi & menerapkan konfigurasi
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();

12
docs/guide-id/structure-entry-scripts.md

@ -34,13 +34,13 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev'); defined('YII_ENV') or define('YII_ENV', 'dev');
// mendaftarkan autoloader Composer // mendaftarkan autoloader Composer
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
// memasukkan file class Yii // memasukkan file class Yii
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// Mengambil konfigurasi aplikasi // Mengambil konfigurasi aplikasi
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// Membuat, mengkonfigurasi, dan menjalankan aplikasi // Membuat, mengkonfigurasi, dan menjalankan aplikasi
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();
@ -66,13 +66,13 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev'); defined('YII_ENV') or define('YII_ENV', 'dev');
// mendaftarkan autoloader composer // mendaftarkan autoloader composer
require(__DIR__ . '/vendor/autoload.php'); require __DIR__ . '/vendor/autoload.php';
// memasukkan file class Yii // memasukkan file class Yii
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
// Mengambil konfigurasi aplikasi // Mengambil konfigurasi aplikasi
$config = require(__DIR__ . '/config/console.php'); $config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config); $application = new yii\console\Application($config);
$exitCode = $application->run(); $exitCode = $application->run();

16
docs/guide-it/intro-upgrade-from-v1.md

@ -54,24 +54,24 @@ classe si trova in `web/Request.php` nella directory principale del framework Yi
Componenti ed oggetti Componenti ed oggetti
--------------------- ---------------------
Yii 2 divide la classe `CComponent` della versione 1.1 in due classi: [[yii\base\Object]] and [[yii\base\Component]]. Yii 2 divide la classe `CComponent` della versione 1.1 in due classi: [[yii\base\BaseObject]] and [[yii\base\Component]].
La classe [[yii\base\Object|Object]] è una classe leggera da usare come base, che consente la definizione di La classe [[yii\base\BaseObject|BaseObject]] è una classe leggera da usare come base, che consente la definizione di
[proprietà dell'oggetto](concept-properties.md) tramite *geters* e *setters*. La classe [[yii\base\Component|Component]] estende [proprietà dell'oggetto](concept-properties.md) tramite *geters* e *setters*. La classe [[yii\base\Component|Component]] estende
[[yii\base\Object|Object]] e supporta [eventi](concept-events.md) e [behavior](concept-behaviors.md). [[yii\base\BaseObject|BaseObject]] e supporta [eventi](concept-events.md) e [behavior](concept-behaviors.md).
Se la tua classe non ha necessità di usare eventi o behavior conviene usare [[yii\base\Object|Object]] come classe base. Se la tua classe non ha necessità di usare eventi o behavior conviene usare [[yii\base\BaseObject|BaseObject]] come classe base.
Di solito viene impiegata per classi che rappresentano strutture di dati semplici. Di solito viene impiegata per classi che rappresentano strutture di dati semplici.
Configurazione oggetti Configurazione oggetti
---------------------- ----------------------
La classe [[yii\base\Object|Object]] introduce un metodo uniforme per la configurazione degli oggetti. La classe [[yii\base\BaseObject|BaseObject]] introduce un metodo uniforme per la configurazione degli oggetti.
Ogni classe figlia di [[yii\base\Object|Object]] dovrebbe dichiarare il suo costruttore (se necessario) in questo modo, così da essere Ogni classe figlia di [[yii\base\BaseObject|BaseObject]] dovrebbe dichiarare il suo costruttore (se necessario) in questo modo, così da essere
configurato correttamente: configurato correttamente:
```php ```php
class MyClass extends \yii\base\Object class MyClass extends \yii\base\BaseObject
{ {
public function __construct($param1, $param2, $config = []) public function __construct($param1, $param2, $config = [])
{ {
@ -91,7 +91,7 @@ class MyClass extends \yii\base\Object
Nell'esempio sopra, l'ultimo parametro del costruttore riceve l'array di configurazione che contiene coppie di nome-valore per Nell'esempio sopra, l'ultimo parametro del costruttore riceve l'array di configurazione che contiene coppie di nome-valore per
inizializzare le proprietà alla fine del costruttore. inizializzare le proprietà alla fine del costruttore.
Puoi sovrascrivere il metodo [[yii\base\Object::init()|init()]] per eseguire operazioni dopo che la configurazione è stata applicata. Puoi sovrascrivere il metodo [[yii\base\BaseObject::init()|init()]] per eseguire operazioni dopo che la configurazione è stata applicata.
Seguendo questa convenzione potrai creare e configurare nuovi oggetti usando un array di configurazione: Seguendo questa convenzione potrai creare e configurare nuovi oggetti usando un array di configurazione:

4
docs/guide-ja/concept-autoloading.md

@ -66,8 +66,8 @@ Yii オートローダーを他のオートローダーと一緒に使うとき
最初の行は、Composer のオートローダーをインストールしており、二行目は Yii のオートローダーをインストールしています。 最初の行は、Composer のオートローダーをインストールしており、二行目は Yii のオートローダーをインストールしています。
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
``` ```
あなたは Yii のオートローダーを使わず、Composer のオートローダーだけを単独で使用することもできます。しかし、そうすることによって、 あなたは Yii のオートローダーを使わず、Composer のオートローダーだけを単独で使用することもできます。しかし、そうすることによって、

2
docs/guide-ja/concept-behaviors.md

@ -45,7 +45,7 @@ class MyBehavior extends Behavior
上のコードは、 `app\components\MyBehavior` という、2つのプロパティ -- `prop1``prop2` -- と 上のコードは、 `app\components\MyBehavior` という、2つのプロパティ -- `prop1``prop2` -- と
`foo()` メソッドを持つビヘイビアクラスを定義します。`prop2` プロパティは、 `getProp2()` getter メソッドと `setProp2()` setter メソッドで定義されることに着目してください。 `foo()` メソッドを持つビヘイビアクラスを定義します。`prop2` プロパティは、 `getProp2()` getter メソッドと `setProp2()` setter メソッドで定義されることに着目してください。
[[yii\base\Behavior]] は [[yii\base\Object]] を継承しているので、getter と setter による [プロパティ](concept-properties.md) 定義をサポートします。 [[yii\base\Behavior]] は [[yii\base\BaseObject]] を継承しているので、getter と setter による [プロパティ](concept-properties.md) 定義をサポートします。
このクラスはビヘイビアなので、コンポーネントにアタッチされると、そのコンポーネントは `prop1``prop2` プロパティ、それと `foo()` メソッドを持つようになります。 このクラスはビヘイビアなので、コンポーネントにアタッチされると、そのコンポーネントは `prop1``prop2` プロパティ、それと `foo()` メソッドを持つようになります。

14
docs/guide-ja/concept-components.md

@ -27,14 +27,14 @@ echo DatePicker::widget([
コンポーネントは非常に強力ですが、 [イベント](concept-events.md) と [ビヘイビア](concept-behaviors.md) をサポートするため、 コンポーネントは非常に強力ですが、 [イベント](concept-events.md) と [ビヘイビア](concept-behaviors.md) をサポートするため、
余分にメモリとCPU時間を要し、通常のオブジェクトよりも少し重くなります。 余分にメモリとCPU時間を要し、通常のオブジェクトよりも少し重くなります。
あなたのコンポーネントがこれら2つの機能を必要としない場合、[[yii\base\Component]] の代わりに、 [[yii\base\Object]] からコンポーネントクラスを派生することを検討してもよいでしょう。 あなたのコンポーネントがこれら2つの機能を必要としない場合、[[yii\base\Component]] の代わりに、 [[yii\base\BaseObject]] からコンポーネントクラスを派生することを検討してもよいでしょう。
そうすることで、あなたのコンポーネントは、 [プロパティ](concept-properties.md) のサポートが維持されたまま、通常のPHPオブジェクトのように効率的になります。 そうすることで、あなたのコンポーネントは、 [プロパティ](concept-properties.md) のサポートが維持されたまま、通常のPHPオブジェクトのように効率的になります。
[[yii\base\Component]] または [[yii\base\Object]] からクラスを派生するときは、次の規約に従うことが推奨されます: [[yii\base\Component]] または [[yii\base\BaseObject]] からクラスを派生するときは、次の規約に従うことが推奨されます:
- コンストラクタをオーバーライドする場合は、コンストラクタの *最後の* パラメータとして `$config` パラメータを指定し、親のコンストラクタにこのパラメータを渡すこと。 - コンストラクタをオーバーライドする場合は、コンストラクタの *最後の* パラメータとして `$config` パラメータを指定し、親のコンストラクタにこのパラメータを渡すこと。
- 自分がオーバーライドしたコンストラクタの *最後で* 、必ず親クラスのコンストラクタを呼び出すこと。 - 自分がオーバーライドしたコンストラクタの *最後で* 、必ず親クラスのコンストラクタを呼び出すこと。
- [[yii\base\Object::init()]] メソッドをオーバーライドする場合は、自分の `init()` メソッドの *最初に* 、必ず `init()` の親実装を呼び出すようにすること。 - [[yii\base\BaseObject::init()]] メソッドをオーバーライドする場合は、自分の `init()` メソッドの *最初に* 、必ず `init()` の親実装を呼び出すようにすること。
例: 例:
@ -43,9 +43,9 @@ echo DatePicker::widget([
namespace yii\components\MyClass; namespace yii\components\MyClass;
use yii\base\Object; use yii\base\BaseObject;
class MyClass extends Object class MyClass extends BaseObject
{ {
public $prop1; public $prop1;
public $prop2; public $prop2;
@ -80,11 +80,11 @@ $component = \Yii::createObject([
> Note: [[Yii::createObject()]] を呼び出すアプローチは複雑に見えますが、より強力です。というのも、それが [依存性注入コンテナ](concept-di-container.md) 上に実装されているからです。 > Note: [[Yii::createObject()]] を呼び出すアプローチは複雑に見えますが、より強力です。というのも、それが [依存性注入コンテナ](concept-di-container.md) 上に実装されているからです。
[[yii\base\Object]] クラスには、次のオブジェクトライフサイクルが適用されます: [[yii\base\BaseObject]] クラスには、次のオブジェクトライフサイクルが適用されます:
1. コンストラクタ内の事前初期化。ここでデフォルトのプロパティ値を設定することができます。 1. コンストラクタ内の事前初期化。ここでデフォルトのプロパティ値を設定することができます。
2. `$config` によるオブジェクトの構成。構成情報は、コンストラクタ内で設定されたデフォルト値を上書きすることがあります。 2. `$config` によるオブジェクトの構成。構成情報は、コンストラクタ内で設定されたデフォルト値を上書きすることがあります。
3. [[yii\base\Object::init()|init()]] 内の事後初期化。サニティ・チェックやプロパティの正規化を行いたいときは、このメソッドをオーバーライドします。 3. [[yii\base\BaseObject::init()|init()]] 内の事後初期化。サニティ・チェックやプロパティの正規化を行いたいときは、このメソッドをオーバーライドします。
4. オブジェクトのメソッド呼び出し。 4. オブジェクトのメソッド呼び出し。
最初の 3 つのステップは、すべて、オブジェクトのコンストラクタ内で発生します。これは、あなたがクラスインスタンス (つまり、オブジェクト) を得たときには、 最初の 3 つのステップは、すべて、オブジェクトのコンストラクタ内で発生します。これは、あなたがクラスインスタンス (つまり、オブジェクト) を得たときには、

12
docs/guide-ja/concept-configurations.md

@ -19,7 +19,7 @@ $config = [
$db = Yii::createObject($config); $db = Yii::createObject($config);
``` ```
[[Yiiの::CreateObject()]] メソッドは引数に構成情報の配列を受け取り、構成情報で名前指定されたクラスをインスタンス化してオブジェクトを作成します。 [[Yii::createObject()]] メソッドは引数に構成情報の配列を受け取り、構成情報で名前指定されたクラスをインスタンス化してオブジェクトを作成します。
オブジェクトがインスタンス化されるとき、その他の設定は、 オブジェクトがインスタンス化されるとき、その他の設定は、
オブジェクトのプロパティ、イベントハンドラ、およびビヘイビアを初期化するのに使われます。 オブジェクトのプロパティ、イベントハンドラ、およびビヘイビアを初期化するのに使われます。
@ -93,7 +93,7 @@ Yii::configure($object, $config);
$config = [ $config = [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => [ 'components' => [
'cache' => [ 'cache' => [
'class' => 'yii\caching\FileCache', 'class' => 'yii\caching\FileCache',
@ -136,7 +136,7 @@ $config = [
$config = [ $config = [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'container' => [ 'container' => [
'definitions' => [ 'definitions' => [
'yii\widgets\LinkPager' => ['maxButtonCount' => 5] 'yii\widgets\LinkPager' => ['maxButtonCount' => 5]
@ -185,8 +185,8 @@ echo Menu::widget([
return [ return [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => require(__DIR__ . '/components.php'), 'components' => require __DIR__ . '/components.php',
]; ];
``` ```
`components` の構成もまた複雑になるため、上記のように、 `components.php` と呼ぶ別のファイルにそれを格納し `web.php` でそのファイルを "require" しています。 `components` の構成もまた複雑になるため、上記のように、 `components.php` と呼ぶ別のファイルにそれを格納し `web.php` でそのファイルを "require" しています。
@ -222,7 +222,7 @@ return [
構成情報ファイルに格納されている構成情報を取得するには、以下のように、それを "require" するだけです: 構成情報ファイルに格納されている構成情報を取得するには、以下のように、それを "require" するだけです:
```php ```php
$config = require('path/to/web.php'); $config = require 'path/to/web.php';
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();
``` ```

12
docs/guide-ja/concept-di-container.md

@ -77,9 +77,9 @@ Yii::$container->invoke([$obj, 'doSomething'], ['param1' => 42]); // $something
たとえば たとえば
```php ```php
use yii\base\Object; use yii\base\BaseObject;
class Foo extends Object class Foo extends BaseObject
{ {
public $bar; public $bar;
@ -103,7 +103,7 @@ $container->get('Foo', [], [
``` ```
> Info: [[yii\di\Container::get()]] メソッドは三番目のパラメータを、生成されるオブジェクトに適用されるべき構成情報配列として受け取ります。 > Info: [[yii\di\Container::get()]] メソッドは三番目のパラメータを、生成されるオブジェクトに適用されるべき構成情報配列として受け取ります。
クラスが [[yii\base\Configurable]] インタフェイスを実装している場合 (例えば、クラスが [[yii\base\Object]] である場合) には、この構成情報配列がクラスのコンストラクタの最後のパラメータとして渡されます。 クラスが [[yii\base\Configurable]] インタフェイスを実装している場合 (例えば、クラスが [[yii\base\BaseObject]] である場合) には、この構成情報配列がクラスのコンストラクタの最後のパラメータとして渡されます。
そうでない場合は、構成情報はオブジェクトが生成された *後で* 適用されることになります。 そうでない場合は、構成情報はオブジェクトが生成された *後で* 適用されることになります。
### PHP コーラブル・インジェクション <span id="php-callable-injection"></span> ### PHP コーラブル・インジェクション <span id="php-callable-injection"></span>
@ -249,7 +249,7 @@ $engine = $container->get('app\components\SearchEngine', [$apiKey, $apiSecret],
```php ```php
namespace app\models; namespace app\models;
use yii\base\Object; use yii\base\BaseObject;
use yii\db\Connection; use yii\db\Connection;
use yii\di\Container; use yii\di\Container;
@ -258,7 +258,7 @@ interface UserFinderInterface
function findUser(); function findUser();
} }
class UserFinder extends Object implements UserFinderInterface class UserFinder extends BaseObject implements UserFinderInterface
{ {
public $db; public $db;
@ -273,7 +273,7 @@ class UserFinder extends Object implements UserFinderInterface
} }
} }
class UserLister extends Object class UserLister extends BaseObject
{ {
public $finder; public $finder;

2
docs/guide-ja/concept-events.md

@ -236,7 +236,7 @@ Event::trigger(Foo::class, Foo::EVENT_HELLO);
この場合、`$event->sender` は、オブジェクトインスタンスではなく、イベントをトリガするクラスの名前を指すことに注意してください。 この場合、`$event->sender` は、オブジェクトインスタンスではなく、イベントをトリガするクラスの名前を指すことに注意してください。
> Note: クラスレベルのハンドラは、そのクラスのあらゆるインスタンス、またはあらゆる子クラスのインスタンスがトリガしたイベントに応答 > Note: クラスレベルのハンドラは、そのクラスのあらゆるインスタンス、またはあらゆる子クラスのインスタンスがトリガしたイベントに応答
してしまうため、よく注意して使わなければなりません。 [[yii\base\Object]] のように、クラスが低レベルの基底クラスの場合は特にそうです。 してしまうため、よく注意して使わなければなりません。 [[yii\base\BaseObject]] のように、クラスが低レベルの基底クラスの場合は特にそうです。
クラスレベルのイベントハンドラを取り外すときは、 [[yii\base\Event::off()]] を呼び出します。たとえば: クラスレベルのイベントハンドラを取り外すときは、 [[yii\base\Event::off()]] を呼び出します。たとえば:

12
docs/guide-ja/concept-properties.md

@ -14,10 +14,10 @@ $object->label = trim($label);
`label` プロパティに、最初の文字を大文字にしなければならない、といった新たな要件が発生したら、 `label` に値を代入するすべてのコードを変更しなければなりません。 `label` プロパティに、最初の文字を大文字にしなければならない、といった新たな要件が発生したら、 `label` に値を代入するすべてのコードを変更しなければなりません。
コードの繰り返しはバグを誘発するので、できれば避けたいところです。 コードの繰り返しはバグを誘発するので、できれば避けたいところです。
この問題を解決するために、Yii は *getter* メソッドと *setter* メソッドをベースにしたプロパティ定義をサポートする、 [[yii\base\Object]] 基底クラスを提供します。 この問題を解決するために、Yii は *getter* メソッドと *setter* メソッドをベースにしたプロパティ定義をサポートする、 [[yii\base\BaseObject]] 基底クラスを提供します。
クラスがその機能を必要とするなら、 [[yii\base\Object]] またはその子クラスを継承しましょう。 クラスがその機能を必要とするなら、 [[yii\base\BaseObject]] またはその子クラスを継承しましょう。
> Note: Yiiのフレームワークのほぼすべてのコアクラスは、 [[yii\base\Object]] またはその子クラスを継承しています。 > Note: Yiiのフレームワークのほぼすべてのコアクラスは、 [[yii\base\BaseObject]] またはその子クラスを継承しています。
これは、コアクラスに getter または setter があれば、それをプロパティのように使用できることを意味します。 これは、コアクラスに getter または setter があれば、それをプロパティのように使用できることを意味します。
getter メソッドは、名前が `get` で始まるメソッドで、setter メソッドは、`set` で始まるメソッドです。 getter メソッドは、名前が `get` で始まるメソッドで、setter メソッドは、`set` で始まるメソッドです。
@ -27,9 +27,9 @@ getter メソッドは、名前が `get` で始まるメソッドで、setter
```php ```php
namespace app\components; namespace app\components;
use yii\base\Object; use yii\base\BaseObject;
class Foo extends Object class Foo extends BaseObject
{ {
private $_label; private $_label;
@ -73,7 +73,7 @@ getter と setter で定義されたプロパティには、いくつかの特
getter または setter メソッドの定義によって決めることは出来ません。 getter または setter メソッドの定義によって決めることは出来ません。
* プロパティは、 *静的でない* getter および setter によってのみ定義することが出来ます。静的なメソッドは同様には扱われません。 * プロパティは、 *静的でない* getter および setter によってのみ定義することが出来ます。静的なメソッドは同様には扱われません。
* 通常の `property_exists()` の呼び出しでは、マジック・プロパティが存在するかどうかを知ることは出来ません。 * 通常の `property_exists()` の呼び出しでは、マジック・プロパティが存在するかどうかを知ることは出来ません。
それぞれ、[[yii\base\Object::canGetProperty()|canGetProperty()]] または [[yii\base\Object::canSetProperty()|canSetProperty()]] を呼び出さなければなりません。 それぞれ、[[yii\base\BaseObject::canGetProperty()|canGetProperty()]] または [[yii\base\BaseObject::canSetProperty()|canSetProperty()]] を呼び出さなければなりません。
このガイドの冒頭で説明した問題に戻ると、 `label` に値が代入されているあらゆる箇所で `trim()` を呼ぶのではなく、もう `setLabel()` という setter の内部だけで `trim()` を呼べば済むのです。 このガイドの冒頭で説明した問題に戻ると、 `label` に値が代入されているあらゆる箇所で `trim()` を呼ぶのではなく、もう `setLabel()` という setter の内部だけで `trim()` を呼べば済むのです。
さらに、新しい要求でラベルの先頭を大文字にする必要が発生しても、他のいっさいのコードに触れることなく、すぐに `setLabel()` メソッドを変更することができます。一箇所の変更は、すべての `label` への代入に普遍的に作用します。 さらに、新しい要求でラベルの先頭を大文字にする必要が発生しても、他のいっさいのコードに触れることなく、すぐに `setLabel()` メソッドを変更することができます。一箇所の変更は、すべての `label` への代入に普遍的に作用します。

16
docs/guide-ja/intro-upgrade-from-v1.md

@ -55,22 +55,22 @@ Yii 2.0 での最も顕著な変更は名前空間の使用です。
コンポーネントとオブジェクト コンポーネントとオブジェクト
---------------------------- ----------------------------
Yii 2.0 は、1.1 の `CComponent` クラスを二つのクラス、すなわち、[[yii\base\Object]] と [[yii\base\Component]] に分割しました。 Yii 2.0 は、1.1 の `CComponent` クラスを二つのクラス、すなわち、[[yii\base\BaseObject]] と [[yii\base\Component]] に分割しました。
[[yii\base\Object|Object]] クラスは、ゲッターとセッターを通じて [オブジェクトプロパティ](concept-properties.md) を定義することを可能にする、軽量な基底クラスです。 [[yii\base\BaseObject|BaseObject]] クラスは、ゲッターとセッターを通じて [オブジェクトプロパティ](concept-properties.md) を定義することを可能にする、軽量な基底クラスです。
[[yii\base\Component|Component]] クラスは [[yii\base\Object|Object]] からの拡張であり、[イベント](concept-events.md) と [ビヘイビア](concept-behaviors.md) をサポートします。 [[yii\base\Component|Component]] クラスは [[yii\base\BaseObject|BaseObject]] からの拡張であり、[イベント](concept-events.md) と [ビヘイビア](concept-behaviors.md) をサポートします。
あなたのクラスがイベントやビヘイビアの機能を必要としない場合は、[[yii\base\Object|Object]] を基底クラスとして使うことを考慮すべきです。 あなたのクラスがイベントやビヘイビアの機能を必要としない場合は、[[yii\base\BaseObject|BaseObject]] を基底クラスとして使うことを考慮すべきです。
通常は、基本的なデータ構造を表すクラスに対して、このことが当てはまります。 通常は、基本的なデータ構造を表すクラスに対して、このことが当てはまります。
オブジェクトの構成 オブジェクトの構成
------------------ ------------------
[[yii\base\Object|Object]] クラスはオブジェクトを構成するための統一された方法を導入しています。 [[yii\base\BaseObject|BaseObject]] クラスはオブジェクトを構成するための統一された方法を導入しています。
[[yii\base\Object|Object]] の全ての派生クラスは、コンストラクタが必要な場合には、インスタンスが正しく構成されるように、コンストラクタを以下のようにして宣言しなければなりません。 [[yii\base\BaseObject|BaseObject]] の全ての派生クラスは、コンストラクタが必要な場合には、インスタンスが正しく構成されるように、コンストラクタを以下のようにして宣言しなければなりません。
```php ```php
class MyClass extends \yii\base\Object class MyClass extends \yii\base\BaseObject
{ {
public function __construct($param1, $param2, $config = []) public function __construct($param1, $param2, $config = [])
{ {
@ -90,7 +90,7 @@ class MyClass extends \yii\base\Object
上記のように、コンストラクタは最後のパラメータとして構成情報の配列を取らなければなりません。 上記のように、コンストラクタは最後のパラメータとして構成情報の配列を取らなければなりません。
構成情報の配列に含まれる「名前-値」のペアが、コンストラクタの最後でプロパティを構成します。 構成情報の配列に含まれる「名前-値」のペアが、コンストラクタの最後でプロパティを構成します。
[[yii\base\Object::init()|init()]] メソッドをオーバーライドして、構成情報が適用された後に行うべき初期化処理を行うことが出来ます。 [[yii\base\BaseObject::init()|init()]] メソッドをオーバーライドして、構成情報が適用された後に行うべき初期化処理を行うことが出来ます。
この規約に従うことによって、新しいオブジェクトを生成して構成するときに、構成情報配列を使うことが出来るようになります。 この規約に従うことによって、新しいオブジェクトを生成して構成するときに、構成情報配列を使うことが出来るようになります。

2
docs/guide-ja/runtime-responses.md

@ -14,7 +14,7 @@
## ステータスコード <span id="status-code"></span> ## ステータスコード <span id="status-code"></span>
レスポンスを作成するときに最初にすることの一つは、リクエストが成功裡に処理されたかどうかを記述することです。 レスポンスを作成するときに最初にすることの一つは、リクエストが成功裡に処理されたかどうかを記述することです。
そのためには、[[yii\web\Response::statusCode]] プロパティに有効な [HTTP ステータスコード](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) の一つを設定します。 そのためには、[[yii\web\Response::statusCode]] プロパティに有効な [HTTP ステータスコード](https://tools.ietf.org/html/rfc2616#section-10) の一つを設定します。
例えば、下記のように、リクエストの処理が成功したことを示すために、ステータスコードを 200 に設定します。 例えば、下記のように、リクエストの処理が成功したことを示すために、ステータスコードを 200 に設定します。
```php ```php

4
docs/guide-ja/runtime-routing.md

@ -545,9 +545,9 @@ public function bootstrap($app)
namespace app\components; namespace app\components;
use yii\web\UrlRuleInterface; use yii\web\UrlRuleInterface;
use yii\base\Object; use yii\base\BaseObject;
class CarUrlRule extends Object implements UrlRuleInterface class CarUrlRule extends BaseObject implements UrlRuleInterface
{ {
public function createUrl($manager, $route, $params) public function createUrl($manager, $route, $params)

6
docs/guide-ja/structure-applications.md

@ -16,11 +16,11 @@
[エントリスクリプト](structure-entry-scripts.md) は、アプリケーションを作成するときに、下記のように、[構成情報](concept-configurations.md) を読み込んで、それをアプリケーションに適用します。 [エントリスクリプト](structure-entry-scripts.md) は、アプリケーションを作成するときに、下記のように、[構成情報](concept-configurations.md) を読み込んで、それをアプリケーションに適用します。
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// アプリケーションの構成情報を読み込む // アプリケーションの構成情報を読み込む
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// アプリケーションのインスタンスを作成し、構成情報を適用する // アプリケーションのインスタンスを作成し、構成情報を適用する
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();

2
docs/guide-ja/structure-assets.md

@ -600,7 +600,7 @@ return [
return [ return [
'components' => [ 'components' => [
'assetManager' => [ 'assetManager' => [
'bundles' => require(__DIR__ . '/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php')), 'bundles' => require __DIR__ . '/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php'),
], ],
], ],
]; ];

12
docs/guide-ja/structure-entry-scripts.md

@ -32,13 +32,13 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev'); defined('YII_ENV') or define('YII_ENV', 'dev');
// Composer のオートローダを登録 // Composer のオートローダを登録
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
// Yii クラスファイルをインクルード // Yii クラスファイルをインクルード
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// アプリケーションの構成情報を読み出す // アプリケーションの構成情報を読み出す
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// アプリケーションを作成し、構成して、走らせる // アプリケーションを作成し、構成して、走らせる
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();
@ -64,13 +64,13 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev'); defined('YII_ENV') or define('YII_ENV', 'dev');
// Composer のオートローダを登録 // Composer のオートローダを登録
require(__DIR__ . '/vendor/autoload.php'); require __DIR__ . '/vendor/autoload.php';
// Yii クラスファイルをインクルード // Yii クラスファイルをインクルード
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
// アプリケーションの構成情報を読み出す // アプリケーションの構成情報を読み出す
$config = require(__DIR__ . '/config/console.php'); $config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config); $application = new yii\console\Application($config);
$exitCode = $application->run(); $exitCode = $application->run();

2
docs/guide-ja/structure-extensions.md

@ -362,7 +362,7 @@ Yii はテストのサポートを提供しており、それよって、単体
このファイルは Markdown 形式で書いて `upgrade.md` と名付けることが出来ます。 このファイルは Markdown 形式で書いて `upgrade.md` と名付けることが出来ます。
* チュートリアル、デモ、スクリーンショットなど: あなたのエクステンションが readme ファイルでは十分にカバーできないほど多くの機能を提供するものである場合は、これらが必要になります。 * チュートリアル、デモ、スクリーンショットなど: あなたのエクステンションが readme ファイルでは十分にカバーできないほど多くの機能を提供するものである場合は、これらが必要になります。
* API ドキュメント: あなたのコードは、他の人々が読んで理解することがより一層容易に出来るように、十分な解説を含むべきです。 * API ドキュメント: あなたのコードは、他の人々が読んで理解することがより一層容易に出来るように、十分な解説を含むべきです。
[Object のクラスファイル](https://github.com/yiisoft/yii2/blob/master/framework/base/Object.php) を参照すると、コードに解説を加える方法を学ぶことが出来ます。 [BaseObject のクラスファイル](https://github.com/yiisoft/yii2/blob/master/framework/base/BaseObject.php) を参照すると、コードに解説を加える方法を学ぶことが出来ます。
> Info: コードのコメントを Markdown 形式で書くことが出来ます。 > Info: コードのコメントを Markdown 形式で書くことが出来ます。
`yiisoft/yii2-apidoc` エクステンションが、コードのコメントに基づいて綺麗な API ドキュメントを生成するツールを提供しています。 `yiisoft/yii2-apidoc` エクステンションが、コードのコメントに基づいて綺麗な API ドキュメントを生成するツールを提供しています。

2
docs/guide-ja/structure-modules.md

@ -57,7 +57,7 @@ public function init()
{ {
parent::init(); parent::init();
// config.php からロードした構成情報でモジュールを初期化する // config.php からロードした構成情報でモジュールを初期化する
\Yii::configure($this, require(__DIR__ . '/config.php')); \Yii::configure($this, require __DIR__ . '/config.php');
} }
``` ```

6
docs/guide-ja/tutorial-console.md

@ -69,10 +69,10 @@ yii migrate/up 5 --migrationTable=migrations
defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_DEBUG') or define('YII_DEBUG', true);
require(__DIR__ . '/vendor/autoload.php'); require __DIR__ . '/vendor/autoload.php';
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
$config = require(__DIR__ . '/config/console.php'); $config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config); $application = new yii\console\Application($config);
$exitCode = $application->run(); $exitCode = $application->run();

18
docs/guide-ja/tutorial-yii-integration.md

@ -24,10 +24,10 @@ Yii アプリケーションの中でサードパーティのライブラリを
```php ```php
// Composer のオートローダをインストール // Composer のオートローダをインストール
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
// Yii クラスファイルをインクルード // Yii クラスファイルをインクルード
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
``` ```
### ダウンロードしたライブラリを使う <span id="using-downloaded-libs"></span> ### ダウンロードしたライブラリを使う <span id="using-downloaded-libs"></span>
@ -107,9 +107,9 @@ Composer に関する更なる情報や、インストールの過程で出現
次のコードをエントリスクリプトの先頭に追加してください。 次のコードをエントリスクリプトの先頭に追加してください。
```php ```php
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
$yiiConfig = require(__DIR__ . '/../config/yii/web.php'); $yiiConfig = require __DIR__ . '/../config/yii/web.php';
new yii\web\Application($yiiConfig); // ここで run() を呼ばない new yii\web\Application($yiiConfig); // ここで run() を呼ばない
``` ```
@ -140,14 +140,14 @@ Yii 2 を Yii 1 とともに使う <span id="using-both-yii2-yii1"></span>
```php ```php
// カスタマイズされた Yii クラスをインクルード (下記で説明) // カスタマイズされた Yii クラスをインクルード (下記で説明)
require(__DIR__ . '/../components/Yii.php'); require __DIR__ . '/../components/Yii.php';
// Yii 2 アプリケーションの構成 // Yii 2 アプリケーションの構成
$yii2Config = require(__DIR__ . '/../config/yii2/web.php'); $yii2Config = require __DIR__ . '/../config/yii2/web.php';
new yii\web\Application($yii2Config); // ここで run() を呼ばない。yii2 app はサービスロケータとしてのみ使用される。 new yii\web\Application($yii2Config); // ここで run() を呼ばない。yii2 app はサービスロケータとしてのみ使用される。
// Yii 1 アプリケーションの構成 // Yii 1 アプリケーションの構成
$yii1Config = require(__DIR__ . '/../config/yii1/main.php'); $yii1Config = require __DIR__ . '/../config/yii1/main.php';
Yii::createWebApplication($yii1Config)->run(); Yii::createWebApplication($yii1Config)->run();
``` ```
@ -156,10 +156,10 @@ Yii 1 と Yii 2 の両者が `Yii` クラスを持っているため、二つを
```php ```php
$yii2path = '/path/to/yii2'; $yii2path = '/path/to/yii2';
require($yii2path . '/BaseYii.php'); // Yii 2.x require $yii2path . '/BaseYii.php'; // Yii 2.x
$yii1path = '/path/to/yii1'; $yii1path = '/path/to/yii1';
require($yii1path . '/YiiBase.php'); // Yii 1.x require $yii1path . '/YiiBase.php'; // Yii 1.x
class Yii extends \yii\BaseYii class Yii extends \yii\BaseYii
{ {

4
docs/guide-pl/concept-autoloading.md

@ -68,8 +68,8 @@ w [skrypcie wejściowym](structure-entry-scripts.md) [podstawowego szablonu proj
instrukcją instalacji autoloadera composera, a druga instaluje autoloader Yii: instrukcją instalacji autoloadera composera, a druga instaluje autoloader Yii:
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
``` ```
Możesz używać jedynie autoloadera composera bez autoloadera Yii, ale wydajność autoładowania klas może być wtedy obniżona i, dodatkowo, Możesz używać jedynie autoloadera composera bez autoloadera Yii, ale wydajność autoładowania klas może być wtedy obniżona i, dodatkowo,

14
docs/guide-pl/concept-components.md

@ -28,14 +28,14 @@ Właściwości widżetu są w łatwy sposób konfigurowalne ponieważ jego klasa
Komponenty zapewniają duże możliwości, ale przez to są też bardziej zasobożerne od standardowych obiektów, ponieważ wymagają dodatkowej pamięci i czasu CPU dla wsparcia Komponenty zapewniają duże możliwości, ale przez to są też bardziej zasobożerne od standardowych obiektów, ponieważ wymagają dodatkowej pamięci i czasu CPU dla wsparcia
[eventów](concept-events.md) i [behaviorów](concept-behaviors.md) w szczególności. [eventów](concept-events.md) i [behaviorów](concept-behaviors.md) w szczególności.
Jeśli komponent nie wymaga tych dwóch funkcjonalności, należy rozważyć rozszerzenie jego klasy z [[yii\base\Object|Object]] zamiast [[yii\base\Component|Component]]. Jeśli komponent nie wymaga tych dwóch funkcjonalności, należy rozważyć rozszerzenie jego klasy z [[yii\base\BaseObject|BaseObject]] zamiast [[yii\base\Component|Component]].
Dzięki temu komponent będzie tak samo wydajny jak standardowy obiekt PHP, ale z dodatkowym wsparciem [właściwości](concept-properties.md). Dzięki temu komponent będzie tak samo wydajny jak standardowy obiekt PHP, ale z dodatkowym wsparciem [właściwości](concept-properties.md).
Rozszerzając klasę [[yii\base\Component|Component]] lub [[yii\base\Object|Object]], zalecane jest aby przestrzegać następującej konwencji: Rozszerzając klasę [[yii\base\Component|Component]] lub [[yii\base\BaseObject|BaseObject]], zalecane jest aby przestrzegać następującej konwencji:
- Przeciążając konstruktor, dodaj parametr `$config` jako *ostatni* na liście jego argumentów i przekaż go do konstruktora rodzica. - Przeciążając konstruktor, dodaj parametr `$config` jako *ostatni* na liście jego argumentów i przekaż go do konstruktora rodzica.
- Zawsze wywoływuj konstruktor rodzica *na końcu* przeciążanego konstruktora. - Zawsze wywoływuj konstruktor rodzica *na końcu* przeciążanego konstruktora.
- Przeciążając metodę [[yii\base\Object::init()|init()]], upewnij się, że wywołujesz metodę `init()` rodzica *na początku* własnej implementacji metody `init()`. - Przeciążając metodę [[yii\base\BaseObject::init()|init()]], upewnij się, że wywołujesz metodę `init()` rodzica *na początku* własnej implementacji metody `init()`.
Przykład: Przykład:
@ -44,9 +44,9 @@ Przykład:
namespace yii\components\MyClass; namespace yii\components\MyClass;
use yii\base\Object; use yii\base\BaseObject;
class MyClass extends Object class MyClass extends BaseObject
{ {
public $prop1; public $prop1;
public $prop2; public $prop2;
@ -83,11 +83,11 @@ $component = \Yii::createObject([
> [kontener wstrzykiwania zależności](concept-di-container.md). > [kontener wstrzykiwania zależności](concept-di-container.md).
Klasa [[yii\base\Object|Object]] wymusza następujący cykl życia obiektu: Klasa [[yii\base\BaseObject|BaseObject]] wymusza następujący cykl życia obiektu:
1. Preinicjalizacja w konstruktorze. W tym miejscu można ustawić domyślne wartości właściwości. 1. Preinicjalizacja w konstruktorze. W tym miejscu można ustawić domyślne wartości właściwości.
2. Konfiguracja obiektu poprzez `$config`. Konfiguracja może nadpisać domyślne wartości ustawione w konstruktorze. 2. Konfiguracja obiektu poprzez `$config`. Konfiguracja może nadpisać domyślne wartości ustawione w konstruktorze.
3. Postinicjalizacja w metodzie [[yii\base\Object::init()|init()]]. Metoda może być przeciążona w celu normalizacji i sanityzacji właściwości. 3. Postinicjalizacja w metodzie [[yii\base\BaseObject::init()|init()]]. Metoda może być przeciążona w celu normalizacji i sanityzacji właściwości.
4. Wywołanie metody obiektu. 4. Wywołanie metody obiektu.
Pierwsze trzy kroki są w całości wykonywane w konstruktorze obiektu, co oznacza, że uzyskana instancja klasy jest już poprawnie zainicjowana i stabilna. Pierwsze trzy kroki są w całości wykonywane w konstruktorze obiektu, co oznacza, że uzyskana instancja klasy jest już poprawnie zainicjowana i stabilna.

14
docs/guide-pl/intro-upgrade-from-v1.md

@ -52,22 +52,22 @@ Dzięki mechanizmowi ładowania klas Yii możesz użyć dowolnej podstawowej kla
Komponent i obiekt Komponent i obiekt
------------------ ------------------
Yii 2.0 rozdzielił klasę `CComponent` z 1.1 na dwie: [[yii\base\Object|Object]] i [[yii\base\Component|Component]]. Yii 2.0 rozdzielił klasę `CComponent` z 1.1 na dwie: [[yii\base\BaseObject|BaseObject]] i [[yii\base\Component|Component]].
Lekka klasa [[yii\base\Object|Object]] pozwala na zdefiniowanie [właściwości obiektu](concept-properties.md) poprzez gettery i settery. Lekka klasa [[yii\base\BaseObject|BaseObject]] pozwala na zdefiniowanie [właściwości obiektu](concept-properties.md) poprzez gettery i settery.
Klasa [[yii\base\Component|Component]] dziedziczy po [[yii\base\Object|Object]] i dodatkowo wspiera obsługę [zdarzeń](concept-events.md) oraz [zachowań](concept-behaviors.md). Klasa [[yii\base\Component|Component]] dziedziczy po [[yii\base\BaseObject|BaseObject]] i dodatkowo wspiera obsługę [zdarzeń](concept-events.md) oraz [zachowań](concept-behaviors.md).
Jeśli Twoja klasa nie wymaga ww. wsparcia, rozważ użycie [[yii\base\Object|Object]] jako klasy podstawowej. Tak jest zazwyczaj w przypadku klas reprezentujących Jeśli Twoja klasa nie wymaga ww. wsparcia, rozważ użycie [[yii\base\BaseObject|BaseObject]] jako klasy podstawowej. Tak jest zazwyczaj w przypadku klas reprezentujących
najbardziej podstawową strukturę danych. najbardziej podstawową strukturę danych.
Konfiguracja obiektu Konfiguracja obiektu
-------------------- --------------------
Klasa [[yii\base\Object|Object]] wprowadza ujednoliconą formę konfigurowania obiektów. Każda klasa dziedzicząca po [[yii\base\Object|Object]] powinna zadeklarować swój Klasa [[yii\base\BaseObject|BaseObject]] wprowadza ujednoliconą formę konfigurowania obiektów. Każda klasa dziedzicząca po [[yii\base\BaseObject|BaseObject]] powinna zadeklarować swój
konstruktor (jeśli tego wymaga) w następujący sposób, dzięki czemu zostanie poprawnie skonfigurowana: konstruktor (jeśli tego wymaga) w następujący sposób, dzięki czemu zostanie poprawnie skonfigurowana:
```php ```php
class MyClass extends \yii\base\Object class MyClass extends \yii\base\BaseObject
{ {
public function __construct($param1, $param2, $config = []) public function __construct($param1, $param2, $config = [])
{ {
@ -87,7 +87,7 @@ class MyClass extends \yii\base\Object
W powyższym przykładzie ostatnim parametrem konstruktora musi być tablica konfiguracyjna, W powyższym przykładzie ostatnim parametrem konstruktora musi być tablica konfiguracyjna,
zawierająca pary nazwa-wartość służące do zainicjowania właściwości na końcu konstruktora. zawierająca pary nazwa-wartość służące do zainicjowania właściwości na końcu konstruktora.
Możesz nadpisać metodę [[yii\base\Object::init()|init()]], aby wykonać dodatkowy proces inicjalizacyjny po Możesz nadpisać metodę [[yii\base\BaseObject::init()|init()]], aby wykonać dodatkowy proces inicjalizacyjny po
zaaplikowaniu konfiguracji. zaaplikowaniu konfiguracji.
Dzięki tej konwencji możesz tworzyć i konfigurować nowe obiekty, używając Dzięki tej konwencji możesz tworzyć i konfigurować nowe obiekty, używając

12
docs/guide-pl/structure-entry-scripts.md

@ -33,13 +33,13 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev'); defined('YII_ENV') or define('YII_ENV', 'dev');
// register Composer autoloader // register Composer autoloader
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
// include Yii class file // include Yii class file
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// load application configuration // load application configuration
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// create, configure and run application // create, configure and run application
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();
@ -64,13 +64,13 @@ Podobnie poniżej kod skryptu wejściowego dla aplikacji konsolowej:
defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_DEBUG') or define('YII_DEBUG', true);
// register Composer autoloader // register Composer autoloader
require(__DIR__ . '/vendor/autoload.php'); require __DIR__ . '/vendor/autoload.php';
// include Yii class file // include Yii class file
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
// load application configuration // load application configuration
$config = require(__DIR__ . '/config/console.php'); $config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config); $application = new yii\console\Application($config);
$exitCode = $application->run(); $exitCode = $application->run();

4
docs/guide-pt-BR/concept-autoloading.md

@ -48,8 +48,8 @@ Uma vez que o Yii utiliza o Composer como seu gerenciador de dependência de pac
Ao usar o Yii autoloader junto com outros autoloaders, você deve incluir o arquivo `Yii.php` *depois* de todos os outros autoloaders serem instalados. Isso fará com que o Yii autoloader seja o primeiro a responder a qualquer solicitação de autoloading de classe. Por exemplo, o código a seguir foi extraído do [script de entrada](structure-entry-scripts.md) do [Template Básico de Projeto](start-installation.md). A primeira linha instala o Composer autoloader, enquanto a segunda linha instala o Yii autoloader: Ao usar o Yii autoloader junto com outros autoloaders, você deve incluir o arquivo `Yii.php` *depois* de todos os outros autoloaders serem instalados. Isso fará com que o Yii autoloader seja o primeiro a responder a qualquer solicitação de autoloading de classe. Por exemplo, o código a seguir foi extraído do [script de entrada](structure-entry-scripts.md) do [Template Básico de Projeto](start-installation.md). A primeira linha instala o Composer autoloader, enquanto a segunda linha instala o Yii autoloader:
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
``` ```
Você pode usar o autoloader do Composer sozinho sem o autoloader do Yii. No entanto, ao fazê-lo, o desempenho do carregamento automático das classes pode ser degradada, e você deve seguir as regras estabelecidas pelo Composer para que suas classes sejam auto carregáveis. Você pode usar o autoloader do Composer sozinho sem o autoloader do Yii. No entanto, ao fazê-lo, o desempenho do carregamento automático das classes pode ser degradada, e você deve seguir as regras estabelecidas pelo Composer para que suas classes sejam auto carregáveis.

2
docs/guide-pt-BR/concept-behaviors.md

@ -39,7 +39,7 @@ class MyBehavior extends Behavior
``` ```
O código acima define a classe behavior `app\components\MyBehavior`, com duas propriedades --`prop1` e `prop2`-- e um método `foo()`. Note que a propriedade `prop2` O código acima define a classe behavior `app\components\MyBehavior`, com duas propriedades --`prop1` e `prop2`-- e um método `foo()`. Note que a propriedade `prop2`
É definida através do método getter `getProp2()` e setter `setProp2()`. Isto é possível porque [[yii\base\Behavior]] estende de [[yii\base\Object]] e portanto suporta definição de propriedades através de [propriedades](concept-properties.md) getters e setters. É definida através do método getter `getProp2()` e setter `setProp2()`. Isto é possível porque [[yii\base\Behavior]] estende de [[yii\base\BaseObject]] e portanto suporta definição de propriedades através de [propriedades](concept-properties.md) getters e setters.
Como essa classe é um behavior, quando ela está anexada a um componente, então este componente terá as propriedades `prop1` e `prop2` e o método `foo()`. Como essa classe é um behavior, quando ela está anexada a um componente, então este componente terá as propriedades `prop1` e `prop2` e o método `foo()`.

14
docs/guide-pt-BR/concept-components.md

@ -24,13 +24,13 @@ echo DatePicker::widget([
Os widgets são facilmente escritos porque a classe estende de [[yii\base\Component]]. Os widgets são facilmente escritos porque a classe estende de [[yii\base\Component]].
Enquanto os componentes são muito poderosos, eles são um pouco mais pesados do que um objeto normal, devido ao fato de que é preciso memória e CPU extra para dar suporte às funcionalidades de [evento](concept-events.md) e de [behavior](concept-behaviors.md) em particular. Enquanto os componentes são muito poderosos, eles são um pouco mais pesados do que um objeto normal, devido ao fato de que é preciso memória e CPU extra para dar suporte às funcionalidades de [evento](concept-events.md) e de [behavior](concept-behaviors.md) em particular.
Se o seu componente não precisa dessas duas características, você pode considerar estender a sua classe de componente de [[yii\base\Object]] em vez de [[yii\base\Component]]. Se o fizer, fará com que seus componentes sejam tão eficientes como objetos normais do PHP, mas com um suporte adicional para [propriedades](concept-properties.md). Se o seu componente não precisa dessas duas características, você pode considerar estender a sua classe de componente de [[yii\base\BaseObject]] em vez de [[yii\base\Component]]. Se o fizer, fará com que seus componentes sejam tão eficientes como objetos normais do PHP, mas com um suporte adicional para [propriedades](concept-properties.md).
Ao estender a classe de [[yii\base\Component]] ou [[yii\base\Object]], é recomendado que você siga as seguintes convenções: Ao estender a classe de [[yii\base\Component]] ou [[yii\base\BaseObject]], é recomendado que você siga as seguintes convenções:
- Se você sobrescrever o construtor, declare um parâmetro `$config` como último parâmetro do construtor, e em seguida passe este parâmetro para o construtor pai. - Se você sobrescrever o construtor, declare um parâmetro `$config` como último parâmetro do construtor, e em seguida passe este parâmetro para o construtor pai.
- Sempre chame o construtor pai *no final* do seu construtor reescrito. - Sempre chame o construtor pai *no final* do seu construtor reescrito.
- Se você sobrescrever o método [[yii\base\Object::init()]], certifique-se de chamar a implementação pai do `init` *no início* do seu método `init`. - Se você sobrescrever o método [[yii\base\BaseObject::init()]], certifique-se de chamar a implementação pai do `init` *no início* do seu método `init`.
Por Exemplo: Por Exemplo:
@ -39,9 +39,9 @@ Por Exemplo:
namespace yii\components\MyClass; namespace yii\components\MyClass;
use yii\base\Object; use yii\base\BaseObject;
class MyClass extends Object class MyClass extends BaseObject
{ {
public $prop1; public $prop1;
public $prop2; public $prop2;
@ -78,11 +78,11 @@ $component = \Yii::createObject([
de injeção de dependência](concept-di-container.md). de injeção de dependência](concept-di-container.md).
A classe [[yii\base\Object]] impõe o seguinte ciclo de vida do objeto: A classe [[yii\base\BaseObject]] impõe o seguinte ciclo de vida do objeto:
1. Pré-inicialização dentro do construtor. Você pode definir valores de propriedade padrão aqui. 1. Pré-inicialização dentro do construtor. Você pode definir valores de propriedade padrão aqui.
2. Configuração de objeto via `$config`. A configuração pode sobrescrever o valor padrão configurado dentro do construtor. 2. Configuração de objeto via `$config`. A configuração pode sobrescrever o valor padrão configurado dentro do construtor.
3. Pós-inicialização dentro do [[yii\base\Object::init()|init()]]. Você pode sobrescrever este método para executar checagens e normalização das propriedades. 3. Pós-inicialização dentro do [[yii\base\BaseObject::init()|init()]]. Você pode sobrescrever este método para executar checagens e normalização das propriedades.
4. Chamadas de método de objeto. 4. Chamadas de método de objeto.
Os três primeiros passos acontecem dentro do construtor do objeto. Isto significa que uma vez que você instanciar a classe (isto é, um objeto), esse objeto será inicializado adequadamente. Os três primeiros passos acontecem dentro do construtor do objeto. Isto significa que uma vez que você instanciar a classe (isto é, um objeto), esse objeto será inicializado adequadamente.

8
docs/guide-pt-BR/concept-configurations.md

@ -81,7 +81,7 @@ Mais importante, suas propriedades [[yii\web\Application::components|components]
$config = [ $config = [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => [ 'components' => [
'cache' => [ 'cache' => [
'class' => 'yii\caching\FileCache', 'class' => 'yii\caching\FileCache',
@ -150,8 +150,8 @@ Por exemplo, você pode guardar uma configuração da aplicação em um arquivo
return [ return [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => require(__DIR__ . '/components.php'), 'components' => require __DIR__ . '/components.php',
]; ];
``` ```
@ -187,7 +187,7 @@ return [
Para pegar a configuração armazenada em um arquivo de configuração, simplismente faça um "require" deste arquivo, como o exemplo abaixo: Para pegar a configuração armazenada em um arquivo de configuração, simplismente faça um "require" deste arquivo, como o exemplo abaixo:
```php ```php
$config = require('path/to/web.php'); $config = require 'path/to/web.php';
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();
``` ```

12
docs/guide-pt-BR/concept-di-container.md

@ -40,9 +40,9 @@ Ao registrar uma dependência ou ao criar um novo objeto, você pode fornecer um
Por exemplo: Por exemplo:
```php ```php
use yii\base\Object; use yii\base\BaseObject;
class Foo extends Object class Foo extends BaseObject
{ {
public $bar; public $bar;
@ -65,7 +65,7 @@ $container->get('Foo', [], [
]); ]);
``` ```
> Informação: O método [[yii\di\Container::get()]] recebe em seu terceiro parâmetro um array de configuração que deve ser aplicado ao objecto a ser criado. Se a classe implementa a interface [[yii\base\Configurable]] (por exemplo, [[yii\base\Object]]), o array de configuração será passado como o último parâmetro para o construtor da classe; caso contrário, a configuração será aplicada *depois* que o objeto for criado. > Informação: O método [[yii\di\Container::get()]] recebe em seu terceiro parâmetro um array de configuração que deve ser aplicado ao objecto a ser criado. Se a classe implementa a interface [[yii\base\Configurable]] (por exemplo, [[yii\base\BaseObject]]), o array de configuração será passado como o último parâmetro para o construtor da classe; caso contrário, a configuração será aplicada *depois* que o objeto for criado.
### Injeção de PHP Callable <span id="php-callable-injection"></span> ### Injeção de PHP Callable <span id="php-callable-injection"></span>
@ -195,7 +195,7 @@ O código abaixo mostra um exemplo mais sofisticado. A classe `UserLister` depen
```php ```php
namespace app\models; namespace app\models;
use yii\base\Object; use yii\base\BaseObject;
use yii\db\Connection; use yii\db\Connection;
use yii\di\Container; use yii\di\Container;
@ -204,7 +204,7 @@ interface UserFinderInterface
function findUser(); function findUser();
} }
class UserFinder extends Object implements UserFinderInterface class UserFinder extends BaseObject implements UserFinderInterface
{ {
public $db; public $db;
@ -219,7 +219,7 @@ class UserFinder extends Object implements UserFinderInterface
} }
} }
class UserLister extends Object class UserLister extends BaseObject
{ {
public $finder; public $finder;

2
docs/guide-pt-BR/concept-events.md

@ -214,7 +214,7 @@ Event::trigger(Foo::class, Foo::EVENT_HELLO);
Note que, neste caso, `$event->sender` refere-se ao nome da classe acionando o evento em vez de uma instância do objeto. Note que, neste caso, `$event->sender` refere-se ao nome da classe acionando o evento em vez de uma instância do objeto.
> Observação: Já que um manipulador de nível de classe vai responder a um evento acionado por qualquer instância dessa classe, ou qualquer classe filha, você deve usá-lo com cuidado, especialmente se a classe é uma classe base de baixo nível, tal como [[yii\base\Object]]. > Observação: Já que um manipulador de nível de classe vai responder a um evento acionado por qualquer instância dessa classe, ou qualquer classe filha, você deve usá-lo com cuidado, especialmente se a classe é uma classe base de baixo nível, tal como [[yii\base\BaseObject]].
Para desvincular um manipulador de evento de nível de classe, chame [[yii\base\Event::off()]]. Por exemplo: Para desvincular um manipulador de evento de nível de classe, chame [[yii\base\Event::off()]]. Por exemplo:

8
docs/guide-pt-BR/concept-properties.md

@ -9,9 +9,9 @@ $object->label = trim($label);
A desvantagem do código acima é que você teria que chamar `trim ()` em todos os lugares onde você definir a propriedade `label` no seu código. Se, no futuro, a propriedade `label` receber um novo requisito, tais como a primeira letra deve ser capitalizado, você teria que modificar novamente todos os pedaços de código que atribui um valor para a propriedade `label`. A repetição de código leva a erros, e é uma prática que você deve evitar sempre que possível. A desvantagem do código acima é que você teria que chamar `trim ()` em todos os lugares onde você definir a propriedade `label` no seu código. Se, no futuro, a propriedade `label` receber um novo requisito, tais como a primeira letra deve ser capitalizado, você teria que modificar novamente todos os pedaços de código que atribui um valor para a propriedade `label`. A repetição de código leva a erros, e é uma prática que você deve evitar sempre que possível.
Para resolver este problema, o Yii introduz uma classe base chamada [[yii\base\Object]] que suporta definições de propriedades baseadas nos métodos *getter* e *setter* da classe. Se uma classe precisar dessa funcionalidade, ela deve estender a classe [[yii\base\Object]], ou de uma classe-filha. Para resolver este problema, o Yii introduz uma classe base chamada [[yii\base\BaseObject]] que suporta definições de propriedades baseadas nos métodos *getter* e *setter* da classe. Se uma classe precisar dessa funcionalidade, ela deve estender a classe [[yii\base\BaseObject]], ou de uma classe-filha.
> Informação: Quase todas as classes nativas (core) do framework Yii estendem de [[yii\base\Object]] ou de uma classe-filha. Isto significa que sempre que você vê um método *getter* ou *setter* em uma classe nativa (core), você pode usá-lo como uma propriedade. > Informação: Quase todas as classes nativas (core) do framework Yii estendem de [[yii\base\BaseObject]] ou de uma classe-filha. Isto significa que sempre que você vê um método *getter* ou *setter* em uma classe nativa (core), você pode usá-lo como uma propriedade.
Um método getter é um método cujo nome inicia com a palavra `get`; um método setter inicia com `set`. Um método getter é um método cujo nome inicia com a palavra `get`; um método setter inicia com `set`.
O nome depois do prefixo `get` ou `set` define o nome da propriedade. Por exemplo, um getter `getLabel()` e/ou um setter `setLabel()` define a propriedade chamada `label`, como mostrado no código a seguir: O nome depois do prefixo `get` ou `set` define o nome da propriedade. Por exemplo, um getter `getLabel()` e/ou um setter `setLabel()` define a propriedade chamada `label`, como mostrado no código a seguir:
@ -19,9 +19,9 @@ O nome depois do prefixo `get` ou `set` define o nome da propriedade. Por exempl
```php ```php
namespace app\components; namespace app\components;
use yii\base\Object; use yii\base\BaseObject;
class Foo extends Object class Foo extends BaseObject
{ {
private $_label; private $_label;

16
docs/guide-pt-BR/intro-upgrade-from-v1.md

@ -63,29 +63,29 @@ dessa classe, graças ao carregador de classes do Yii).
Component e Object Component e Object
------------------ ------------------
O Yii 2.0 divide a classe `CComponent` do 1.1 em duas classes: [[yii\base\Object]] O Yii 2.0 divide a classe `CComponent` do 1.1 em duas classes: [[yii\base\BaseObject]]
e [[yii\base\Component]]. A classe [[yii\base\Object|Object]] é uma classe base e [[yii\base\Component]]. A classe [[yii\base\BaseObject|BaseObject]] é uma classe base
leve que permite a definição das [propriedades de objetos](concept-properties.md) leve que permite a definição das [propriedades de objetos](concept-properties.md)
via getters e setters. A classe [[yii\base\Component|Component]] estende de via getters e setters. A classe [[yii\base\Component|Component]] estende de
[[yii\base\Object|Object]] e suporta [eventos](concept-events.md) e [[yii\base\BaseObject|BaseObject]] e suporta [eventos](concept-events.md) e
[behaviors](concept-behaviors.md) (comportamentos). [behaviors](concept-behaviors.md) (comportamentos).
Se a sua classe não precisa da funcionalidade de eventos e *behaviors*, Se a sua classe não precisa da funcionalidade de eventos e *behaviors*,
você deveria considerar utilizar [[yii\base\Object|Object]] como classe base. você deveria considerar utilizar [[yii\base\BaseObject|BaseObject]] como classe base.
Esse geralmente é o caso de classes que representam estruturas básicas de dados. Esse geralmente é o caso de classes que representam estruturas básicas de dados.
Configuração de Objetos Configuração de Objetos
----------------------- -----------------------
A classe [[yii\base\Object|Object]] introduz uma maneira uniforme de configurar A classe [[yii\base\BaseObject|BaseObject]] introduz uma maneira uniforme de configurar
objetos. Qualquer classe descendente de [[yii\base\Object|Object]] deveria objetos. Qualquer classe descendente de [[yii\base\BaseObject|BaseObject]] deveria
declarar seu construtor (se necessário) da seguinte maneira, para que ela declarar seu construtor (se necessário) da seguinte maneira, para que ela
seja configurada adequadamente: seja configurada adequadamente:
```php ```php
class MinhaClasse extends \yii\base\Object class MinhaClasse extends \yii\base\BaseObject
{ {
public function __construct($param1, $param2, $config = []) public function __construct($param1, $param2, $config = [])
{ {
@ -105,7 +105,7 @@ class MinhaClasse extends \yii\base\Object
No código acima, o último parâmetro do construtor deve receber um array de No código acima, o último parâmetro do construtor deve receber um array de
configuração que contém pares de nome-valor para a inicialização das propriedades configuração que contém pares de nome-valor para a inicialização das propriedades
no final do construtor. Você pode sobrescrever o método [[yii\base\Object::init()|init()]] no final do construtor. Você pode sobrescrever o método [[yii\base\BaseObject::init()|init()]]
para fazer o trabalho de inicialização que deve ser feito após a configuração para fazer o trabalho de inicialização que deve ser feito após a configuração
ter sido aplicada. ter sido aplicada.

4
docs/guide-pt-BR/runtime-routing.md

@ -686,9 +686,9 @@ Podemos criar uma classe de regra de URL para resolver este formato.
namespace app\components; namespace app\components;
use yii\web\UrlRuleInterface; use yii\web\UrlRuleInterface;
use yii\base\Object; use yii\base\BaseObject;
class CarUrlRule extends Object implements UrlRuleInterface class CarUrlRule extends BaseObject implements UrlRuleInterface
{ {
public function createUrl($manager, $route, $params) public function createUrl($manager, $route, $params)

6
docs/guide-pt-BR/structure-applications.md

@ -22,11 +22,11 @@ carregará uma [configuração](concept-configurations.md) e a aplicará à apli
da seguinte forma: da seguinte forma:
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// carrega a configuração da aplicação // carrega a configuração da aplicação
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// instancia e configura a aplicação // instancia e configura a aplicação
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();

2
docs/guide-pt-BR/structure-assets.md

@ -701,7 +701,7 @@ condicionalmente incluir este arquivo na configuração da aplicação. Por exem
return [ return [
'components' => [ 'components' => [
'assetManager' => [ 'assetManager' => [
'bundles' => require(__DIR__ . '/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php')), 'bundles' => require __DIR__ . '/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php'),
], ],
], ],
]; ];

12
docs/guide-pt-BR/structure-entry-scripts.md

@ -38,13 +38,13 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev'); defined('YII_ENV') or define('YII_ENV', 'dev');
// registra o autoloader do Composer // registra o autoloader do Composer
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
// inclui o arquivo da classe Yii // inclui o arquivo da classe Yii
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// carrega a configuração da aplicação // carrega a configuração da aplicação
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// cria, configura e executa a aplicação // cria, configura e executa a aplicação
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();
@ -70,13 +70,13 @@ do console:
defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_DEBUG') or define('YII_DEBUG', true);
// registra o autoloader do Composer // registra o autoloader do Composer
require(__DIR__ . '/vendor/autoload.php'); require __DIR__ . '/vendor/autoload.php';
// inclui o arquivo da classe Yii // inclui o arquivo da classe Yii
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
// carrega a configuração da aplicação // carrega a configuração da aplicação
$config = require(__DIR__ . '/config/console.php'); $config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config); $application = new yii\console\Application($config);
$exitCode = $application->run(); $exitCode = $application->run();

2
docs/guide-pt-BR/structure-extensions.md

@ -456,7 +456,7 @@ a sua extensão:
fornece muitos recursos que podem não ser totalmente cobertos no arquivo readme. fornece muitos recursos que podem não ser totalmente cobertos no arquivo readme.
* Documentação da API: seu código deve ser bem documentado para permitir que * Documentação da API: seu código deve ser bem documentado para permitir que
outros usuários possam ler e entender mais facilmente. outros usuários possam ler e entender mais facilmente.
Você pode consultar o [arquivo da classe Object](https://github.com/yiisoft/yii2/blob/master/framework/base/Object.php) Você pode consultar o [arquivo da classe BaseObject](https://github.com/yiisoft/yii2/blob/master/framework/base/BaseObject.php)
para aprender como documentar o seu código. para aprender como documentar o seu código.
> Informação: Os seus comentários no código podem ser escritos no formato Markdown. > Informação: Os seus comentários no código podem ser escritos no formato Markdown.

2
docs/guide-pt-BR/structure-modules.md

@ -69,7 +69,7 @@ public function init()
{ {
parent::init(); parent::init();
// inicializa o módulo com as configurações carregadas de config.php // inicializa o módulo com as configurações carregadas de config.php
\Yii::configure($this, require(__DIR__ . '/config.php')); \Yii::configure($this, require __DIR__ . '/config.php');
} }
``` ```

18
docs/guide-pt-BR/tutorial-yii-integration.md

@ -21,10 +21,10 @@ As classes nos pacotes Composer instalados podem ser carregadas automaticamente
```php ```php
// Instala o Composer autoloader // Instala o Composer autoloader
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
// faz o include da classe Yii // faz o include da classe Yii
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
``` ```
@ -79,9 +79,9 @@ Caso contrário, você pode fazer o [download](http://www.yiiframework.com/downl
Em seguida, você deve modificar o script de entrada do sistema de terceiros incluindo o seguinte código no início: Em seguida, você deve modificar o script de entrada do sistema de terceiros incluindo o seguinte código no início:
```php ```php
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
$yiiConfig = require(__DIR__ . '/../config/yii/web.php'); $yiiConfig = require __DIR__ . '/../config/yii/web.php';
new yii\web\Application($yiiConfig); // NÃO execute o método run() aqui new yii\web\Application($yiiConfig); // NÃO execute o método run() aqui
``` ```
@ -105,14 +105,14 @@ Segundo, altere o script de entrada da sua aplicação como a seguir,
```php ```php
// incluir a classe Yii personalizado descrito abaixo // incluir a classe Yii personalizado descrito abaixo
require(__DIR__ . '/../components/Yii.php'); require __DIR__ . '/../components/Yii.php';
// configuração para aplicação Yii 2 // configuração para aplicação Yii 2
$yii2Config = require(__DIR__ . '/../config/yii2/web.php'); $yii2Config = require __DIR__ . '/../config/yii2/web.php';
new yii\web\Application($yii2Config); // NÃO execute o método run() aqui new yii\web\Application($yii2Config); // NÃO execute o método run() aqui
// configuração para aplicação Yii 1 // configuração para aplicação Yii 1
$yii1Config = require(__DIR__ . '/../config/yii1/main.php'); $yii1Config = require __DIR__ . '/../config/yii1/main.php';
Yii::createWebApplication($yii1Config)->run(); Yii::createWebApplication($yii1Config)->run();
``` ```
@ -120,10 +120,10 @@ Uma vez que ambos Yii 1 e Yii 2 possuem a classe `Yii`, você deve criar uma ver
```php ```php
$yii2path = '/path/to/yii2'; $yii2path = '/path/to/yii2';
require($yii2path . '/BaseYii.php'); // Yii 2.x require $yii2path . '/BaseYii.php'; // Yii 2.x
$yii1path = '/path/to/yii1'; $yii1path = '/path/to/yii1';
require($yii1path . '/YiiBase.php'); // Yii 1.x require $yii1path . '/YiiBase.php'; // Yii 1.x
class Yii extends \yii\BaseYii class Yii extends \yii\BaseYii
{ {

2
docs/guide-ru/README.md

@ -78,7 +78,7 @@ All Rights Reserved.
* [Построитель запросов](db-query-builder.md) - Запросы к базе данных через простой слой абстракции. * [Построитель запросов](db-query-builder.md) - Запросы к базе данных через простой слой абстракции.
* [Active Record](db-active-record.md) - Получение объектов AR, работа с ними и определение связей. * [Active Record](db-active-record.md) - Получение объектов AR, работа с ними и определение связей.
* [Миграции](db-migrations.md) - Контроль версий схемы данных при работе в команде. * [Миграции](db-migrations.md) - Контроль версий схемы данных при работе в команде.
* [Sphinx](https://github.com/yiisoft/yii2-sphinx/blob/master/docs/guide/README.md) * [Sphinx](https://github.com/yiisoft/yii2-sphinx/blob/master/docs/guide-ru/README.md)
* [Redis](https://github.com/yiisoft/yii2-redis/blob/master/docs/guide/README.md) * [Redis](https://github.com/yiisoft/yii2-redis/blob/master/docs/guide/README.md)
* [MongoDB](https://github.com/yiisoft/yii2-mongodb/blob/master/docs/guide-ru/README.md) * [MongoDB](https://github.com/yiisoft/yii2-mongodb/blob/master/docs/guide-ru/README.md)
* [ElasticSearch](https://github.com/yiisoft/yii2-elasticsearch/blob/master/docs/guide/README.md) * [ElasticSearch](https://github.com/yiisoft/yii2-elasticsearch/blob/master/docs/guide/README.md)

4
docs/guide-ru/concept-autoloading.md

@ -71,8 +71,8 @@ Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php';
автозагрузчик Composer, а вторая — автозагрузчик Yii: автозагрузчик Composer, а вторая — автозагрузчик Yii:
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
``` ```
Вы можете использовать автозагрузчик Composer без автозагрузчика Yii. Однако, скорость автозагрузки в этом случае Вы можете использовать автозагрузчик Composer без автозагрузчика Yii. Однако, скорость автозагрузки в этом случае

4
docs/guide-ru/concept-behaviors.md

@ -46,7 +46,7 @@ class MyBehavior extends Behavior
В приведенном выше примере, объявлен класс поведения `app\components\MyBehavior` содержащий 2 свойства В приведенном выше примере, объявлен класс поведения `app\components\MyBehavior` содержащий 2 свойства
`prop1` и `prop2`, и один метод `foo()`. Обратите внимание, свойство `prop2` объявлено с использованием геттера `prop1` и `prop2`, и один метод `foo()`. Обратите внимание, свойство `prop2` объявлено с использованием геттера
`getProp2()` и сеттера `setProp2()`. Это возможно, так как [[yii\base\Behavior]] является дочерним классом для `getProp2()` и сеттера `setProp2()`. Это возможно, так как [[yii\base\Behavior]] является дочерним классом для
[[yii\base\Object]], который предоставляет возможность определения [свойств](concept-properties.md) через геттеры и сеттеры. [[yii\base\BaseObject]], который предоставляет возможность определения [свойств](concept-properties.md) через геттеры и сеттеры.
Так как этот класс является поведением, когда он прикреплён к компоненту, компоненту будут также доступны свойства `prop1` Так как этот класс является поведением, когда он прикреплён к компоненту, компоненту будут также доступны свойства `prop1`
и `prop2`, а также метод `foo()`. и `prop2`, а также метод `foo()`.
@ -174,7 +174,7 @@ $component->attachBehavior('myBehavior3', [
]); ]);
``` ```
Использование метода [[yii\base\Component::attachBehaviors()]] позволяет прикрепить несколько поведение за раз. Использование метода [[yii\base\Component::attachBehaviors()]] позволяет прикрепить несколько поведений за раз.
Например, Например,
```php ```php

14
docs/guide-ru/concept-components.md

@ -28,17 +28,17 @@ echo DatePicker::widget([
Компоненты — очень мощный инструмент. Но в то же время они немного тяжелее обычных объектов, потому что на поддержку Компоненты — очень мощный инструмент. Но в то же время они немного тяжелее обычных объектов, потому что на поддержку
[событий](concept-events.md) и [поведений](concept-behaviors.md) тратится дополнительные память и процессорное время. [событий](concept-events.md) и [поведений](concept-behaviors.md) тратится дополнительные память и процессорное время.
Если ваши компоненты не нуждаются в этих двух возможностях, вам стоит унаследовать их от [[yii\base\Object]], Если ваши компоненты не нуждаются в этих двух возможностях, вам стоит унаследовать их от [[yii\base\BaseObject]],
а не от [[yii\base\Component]]. Поступив так, вы сделаете ваши компоненты такими же эффективными, как и обычные PHP объекты, а не от [[yii\base\Component]]. Поступив так, вы сделаете ваши компоненты такими же эффективными, как и обычные PHP объекты,
но с поддержкой [свойств](concept-properties.md). но с поддержкой [свойств](concept-properties.md).
При наследовании ваших классов от [[yii\base\Component]] или [[yii\base\Object]], рекомендуется следовать некоторым При наследовании ваших классов от [[yii\base\Component]] или [[yii\base\BaseObject]], рекомендуется следовать некоторым
соглашениям: соглашениям:
- Если вы переопределяете конструктор, то добавьте *последним* аргументом параметр `$config` и затем передайте его - Если вы переопределяете конструктор, то добавьте *последним* аргументом параметр `$config` и затем передайте его
в конструктор предка. в конструктор предка.
- Всегда вызывайте конструктор предка *в конце* вашего переопределенного конструктора. - Всегда вызывайте конструктор предка *в конце* вашего переопределенного конструктора.
- Если вы переопределяете метод [[yii\base\Object::init()]], убедитесь, что вы вызываете родительскую реализацию этого - Если вы переопределяете метод [[yii\base\BaseObject::init()]], убедитесь, что вы вызываете родительскую реализацию этого
метода *в начале* вашего метода `init()`. метода *в начале* вашего метода `init()`.
Пример: Пример:
@ -48,9 +48,9 @@ echo DatePicker::widget([
namespace yii\components\MyClass; namespace yii\components\MyClass;
use yii\base\Object; use yii\base\BaseObject;
class MyClass extends Object class MyClass extends BaseObject
{ {
public $prop1; public $prop1;
public $prop2; public $prop2;
@ -86,12 +86,12 @@ $component = \Yii::createObject([
> Info: Способ инициализации через вызов [[Yii::createObject()]] выглядит более сложным. Но в то же время он более > Info: Способ инициализации через вызов [[Yii::createObject()]] выглядит более сложным. Но в то же время он более
мощный из-за того, что он реализован на самом верху [контейнера внедрения зависимостей](concept-di-container.md). мощный из-за того, что он реализован на самом верху [контейнера внедрения зависимостей](concept-di-container.md).
Жизненный цикл объектов класса [[yii\base\Object]] содержит следующие этапы: Жизненный цикл объектов класса [[yii\base\BaseObject]] содержит следующие этапы:
1. Предварительная инициализация в конструкторе. Здесь вы можете установить значения свойств по умолчанию. 1. Предварительная инициализация в конструкторе. Здесь вы можете установить значения свойств по умолчанию.
2. Конфигурация объекта с помощью `$config`. Во время конфигурации могут быть перезаписаны значения свойств по умолчанию, 2. Конфигурация объекта с помощью `$config`. Во время конфигурации могут быть перезаписаны значения свойств по умолчанию,
установленные в конструкторе. установленные в конструкторе.
3. Конфигурация после инициализации в методе [[yii\base\Object::init()|init()]]. Вы можете переопределить этот метод, 3. Конфигурация после инициализации в методе [[yii\base\BaseObject::init()|init()]]. Вы можете переопределить этот метод,
для проверки готовности объекта и нормализации свойств. для проверки готовности объекта и нормализации свойств.
4. Вызов методов объекта. 4. Вызов методов объекта.

10
docs/guide-ru/concept-configurations.md

@ -97,7 +97,7 @@ Yii::configure($object, $config);
$config = [ $config = [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => [ 'components' => [
'cache' => [ 'cache' => [
'class' => 'yii\caching\FileCache', 'class' => 'yii\caching\FileCache',
@ -142,7 +142,7 @@ $config = [
$config = [ $config = [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'container' => [ 'container' => [
'definitions' => [ 'definitions' => [
'yii\widgets\LinkPager' => ['maxButtonCount' => 5] 'yii\widgets\LinkPager' => ['maxButtonCount' => 5]
@ -194,8 +194,8 @@ echo Menu::widget([
return [ return [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => require(__DIR__ . '/components.php'), 'components' => require __DIR__ . '/components.php',
]; ];
``` ```
@ -233,7 +233,7 @@ return [
Чтобы получить конфигурацию, хранящуюся в файле, достаточно подключить файл с помощью `require`: Чтобы получить конфигурацию, хранящуюся в файле, достаточно подключить файл с помощью `require`:
```php ```php
$config = require('path/to/web.php'); $config = require 'path/to/web.php';
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();
``` ```

14
docs/guide-ru/concept-di-container.md

@ -60,7 +60,7 @@ class MyClass extends \yii\base\Component
} }
``` ```
Метод можно вызвать либо передав экземпляр `\my\heavy\Dependency` самостоятельно, либо использовава Метод можно вызвать либо передав экземпляр `\my\heavy\Dependency` самостоятельно, либо использовав
[[yii\di\Container::invoke()]]: [[yii\di\Container::invoke()]]:
```php ```php
@ -76,9 +76,9 @@ Yii::$container->invoke([$obj, 'doSomething'], ['param1' => 42]); // $something
Например, Например,
```php ```php
use yii\base\Object; use yii\base\BaseObject;
class Foo extends Object class Foo extends BaseObject
{ {
public $bar; public $bar;
@ -101,7 +101,7 @@ $container->get('Foo', [], [
]); ]);
``` ```
> Info: Метод [[yii\di\Container::get()]] третьим аргументом принимает массив конфигурации, которым инициализируется создаваемый объект. Если класс реализует интерфейс [[yii\base\Configurable]] (например, [[yii\base\Object]]), то массив конфигурации передается в последний параметр конструктора класса. Иначе конфигурация применяется уже *после* создания объекта. > Info: Метод [[yii\di\Container::get()]] третьим аргументом принимает массив конфигурации, которым инициализируется создаваемый объект. Если класс реализует интерфейс [[yii\base\Configurable]] (например, [[yii\base\BaseObject]]), то массив конфигурации передается в последний параметр конструктора класса. Иначе конфигурация применяется уже *после* создания объекта.
Более сложное практическое применение <span id="advanced-practical-usage"></span> Более сложное практическое применение <span id="advanced-practical-usage"></span>
@ -375,7 +375,7 @@ $engine = $container->get('app\components\SearchEngine', [$apiKey], ['type' => 1
```php ```php
namespace app\models; namespace app\models;
use yii\base\Object; use yii\base\BaseObject;
use yii\db\Connection; use yii\db\Connection;
use yii\di\Container; use yii\di\Container;
@ -384,7 +384,7 @@ interface UserFinderInterface
function findUser(); function findUser();
} }
class UserFinder extends Object implements UserFinderInterface class UserFinder extends BaseObject implements UserFinderInterface
{ {
public $db; public $db;
@ -399,7 +399,7 @@ class UserFinder extends Object implements UserFinderInterface
} }
} }
class UserLister extends Object class UserLister extends BaseObject
{ {
public $finder; public $finder;

2
docs/guide-ru/concept-events.md

@ -210,7 +210,7 @@ Event::trigger(Foo::class, Foo::EVENT_HELLO);
Обратите внимание, что в данном случае `$event->sender` имеет значение `null` вместо экзепляра класса, который инициировал событие. Обратите внимание, что в данном случае `$event->sender` имеет значение `null` вместо экзепляра класса, который инициировал событие.
> Note: Поскольку обработчики на уровне класса отвечают на события, инициируемые всеми экземплярами этого класса и всех его потомков, их следует использовать с осторожностью, особенно в случае базовых классов низкого уровня, таких как [[yii\base\Object]]. > Note: Поскольку обработчики на уровне класса отвечают на события, инициируемые всеми экземплярами этого класса и всех его потомков, их следует использовать с осторожностью, особенно в случае базовых классов низкого уровня, таких как [[yii\base\BaseObject]].
Отсоединить обработчик события на уровне класса можно с помощью метода [[yii\base\Event::off()]]. Например: Отсоединить обработчик события на уровне класса можно с помощью метода [[yii\base\Event::off()]]. Например:

12
docs/guide-ru/concept-properties.md

@ -14,11 +14,11 @@ $object->label = trim($label);
присваиваете значение полю `label`. Если в будущем понадобится производить еще какие-либо действие, например преобразовать первую букву в верхний регистр, вам придётся изменить каждый участок кода, где производится присваивание значения присваиваете значение полю `label`. Если в будущем понадобится производить еще какие-либо действие, например преобразовать первую букву в верхний регистр, вам придётся изменить каждый участок кода, где производится присваивание значения
полю `label`. Повторение кода приводит к ошибкам и его необходимо избегать всеми силами. полю `label`. Повторение кода приводит к ошибкам и его необходимо избегать всеми силами.
Что бы решить эту проблему, в Yii был добавлен базовый класс [[yii\base\Object]] который реализует работу со свойствами Что бы решить эту проблему, в Yii был добавлен базовый класс [[yii\base\BaseObject]] который реализует работу со свойствами
через *геттеры* и *сеттеры*. Если вашему классу нужна такая возможность, необходимо унаследовать его от через *геттеры* и *сеттеры*. Если вашему классу нужна такая возможность, необходимо унаследовать его от
[[yii\base\Object]] или его потомка. [[yii\base\BaseObject]] или его потомка.
> Info: Почти все внутренние классы Yii наследуются от [[yii\base\Object]] или его потомков. > Info: Почти все внутренние классы Yii наследуются от [[yii\base\BaseObject]] или его потомков.
Это значит, что всякий раз, когда вы встречаете геттер или сеттер в классах фреймворка, вы можете обращаться к нему Это значит, что всякий раз, когда вы встречаете геттер или сеттер в классах фреймворка, вы можете обращаться к нему
как к свойству. как к свойству.
@ -29,9 +29,9 @@ $object->label = trim($label);
```php ```php
namespace app\components; namespace app\components;
use yii\base\Object; use yii\base\BaseObject;
class Foo extends Object class Foo extends BaseObject
{ {
private $_label; private $_label;
@ -78,7 +78,7 @@ $object->label = 'abc';
* Свойства могут быть объявлены только с помощью *не статичных* геттеров и/или сеттеров. Статичные методы не будут * Свойства могут быть объявлены только с помощью *не статичных* геттеров и/или сеттеров. Статичные методы не будут
обрабатываться подобным образом. обрабатываться подобным образом.
* Обычный вызов `property_exists()` не работает для магических свойств. Для них необходимо использовать * Обычный вызов `property_exists()` не работает для магических свойств. Для них необходимо использовать
[[yii\base\Object::canGetProperty()|canGetProperty()]] или [[yii\base\Object::canSetProperty()|canSetProperty()]]. [[yii\base\BaseObject::canGetProperty()|canGetProperty()]] или [[yii\base\BaseObject::canSetProperty()|canSetProperty()]].
Возвращаясь к проблеме необходимости вызова функции `trim()` во всех местах, где присваивается значение свойству `label`, Возвращаясь к проблеме необходимости вызова функции `trim()` во всех местах, где присваивается значение свойству `label`,
описанной в начале этого руководства, функцию `trim()` теперь необходимо вызывать только один раз — в методе `setLabel()`. описанной в начале этого руководства, функцию `trim()` теперь необходимо вызывать только один раз — в методе `setLabel()`.

53
docs/guide-ru/helper-array.md

@ -47,7 +47,58 @@ $fullName = ArrayHelper::getValue($user, function ($user, $defaultValue) {
$username = ArrayHelper::getValue($comment, 'user.username', 'Unknown'); $username = ArrayHelper::getValue($comment, 'user.username', 'Unknown');
``` ```
В случае если вы хотите получить значение и тут же удалить его из массива, вы можете использовать метод `remove`
## Запись значений <span id="setting-values"></span>
```php
$array = [
'key' => [
'in' => ['k' => 'value']
]
];
ArrayHelper::setValue($array, 'key.in', ['arr' => 'val']);
// путь для записи значения в `$array` можно указать как массив
ArrayHelper::setValue($array, ['key', 'in'], ['arr' => 'val']);
```
В результате исходное значение `$array['key']['in']` будет перезаписано новым
```php
[
'key' => [
'in' => ['arr' => 'val']
]
]
```
Если путь содержит несуществующий ключ, то он будет создан
```php
// Если `$array['key']['in']['arr0']` не пустой, то значение будет добавлено в массив
ArrayHelper::setValue($array, 'key.in.arr0.arr1', 'val');
// если необходимо полностью переопределить значение `$array['key']['in']['arr0']`
ArrayHelper::setValue($array, 'key.in.arr0', ['arr1' => 'val']);
```
Результатом будет следующим:
```php
[
'key' => [
'in' => [
'k' => 'value',
'arr0' => ['arr1' => 'val']
]
]
]
```
## Изъять значение из массива <span id="removing-values"></span>
Если вы хотите получить значение и тут же удалить его из массива, вы можете использовать метод `remove`
```php ```php
$array = ['type' => 'A', 'options' => [1, 2]]; $array = ['type' => 'A', 'options' => [1, 2]];

4
docs/guide-ru/input-validation.md

@ -467,7 +467,7 @@ class LoginForm extends Model
HTML-форма построена с помощью следующего кода, содержит поля для ввода `username` и `password`. HTML-форма построена с помощью следующего кода, содержит поля для ввода `username` и `password`.
Если вы отправите форму, не вводя ничего, вы получите сообщения об ошибках, требующих ввести данные. Если вы отправите форму, не вводя ничего, вы получите сообщения об ошибках, требующих ввести данные.
Сообщения появиться сразу, без обращения к серверу. Сообщения появятся сразу, без обращения к серверу.
```php ```php
<?php $form = yii\widgets\ActiveForm::begin(); ?> <?php $form = yii\widgets\ActiveForm::begin(); ?>
@ -598,7 +598,7 @@ JS;
``` ```
> Note: метод `resolve()` должен быть вызван после того, как атрибут был проверен. > Note: метод `resolve()` должен быть вызван после того, как атрибут был проверен.
В противном случае основная проверки формы не будет завершена. В противном случае основная проверка формы не будет завершена.
Для простоты работы с массивом `deferred`, существует упрощенный метод `add()`, который автоматически создает Отложенный объект и добавляет его в `deferred` массив. Используя этот метод, вы можете упростить пример выше, следующим образом: Для простоты работы с массивом `deferred`, существует упрощенный метод `add()`, который автоматически создает Отложенный объект и добавляет его в `deferred` массив. Используя этот метод, вы можете упростить пример выше, следующим образом:

16
docs/guide-ru/intro-upgrade-from-v1.md

@ -56,25 +56,25 @@ Yii 2.0 широко использует [Composer](https://getcomposer.org/),
Компонент и объект Компонент и объект
---------------- ----------------
В Yii 2.0 класс `CComponent` из версии 1.1 был разделён на два класса: [[yii\base\Object]] и [[yii\base\Component]]. В Yii 2.0 класс `CComponent` из версии 1.1 был разделён на два класса: [[yii\base\BaseObject]] и [[yii\base\Component]].
Класс [[yii\base\Object|Object]] является простым базовым классом, который позволяет использовать Класс [[yii\base\BaseObject|BaseObject]] является простым базовым классом, который позволяет использовать
[геттеры и сеттеры](concept-properties.md) для свойств. Класс [[yii\base\Component|Component]] наследуется от [геттеры и сеттеры](concept-properties.md) для свойств. Класс [[yii\base\Component|Component]] наследуется от
класса [[yii\base\Object|Object]] и поддерживает [события](concept-events.md) и [поведения](concept-behaviors.md). класса [[yii\base\BaseObject|BaseObject]] и поддерживает [события](concept-events.md) и [поведения](concept-behaviors.md).
Если вашему классу не нужны события или поведения, вы можете использовать [[yii\base\Object|Object]] в качестве Если вашему классу не нужны события или поведения, вы можете использовать [[yii\base\BaseObject|BaseObject]] в качестве
базового класса. В основном это относится к классам, представляющим собой базовые структуры данных. базового класса. В основном это относится к классам, представляющим собой базовые структуры данных.
Конфигурация объекта Конфигурация объекта
------------------ ------------------
Класс [[yii\base\Object|Object]] предоставляет единый способ конфигурирования объектов. Любой дочерний класс Класс [[yii\base\BaseObject|BaseObject]] предоставляет единый способ конфигурирования объектов. Любой дочерний класс
[[yii\base\Object|Object]] может определить конструктор (если нужно) как показано ниже. Это позволит конфигурировать [[yii\base\BaseObject|BaseObject]] может определить конструктор (если нужно) как показано ниже. Это позволит конфигурировать
его универсально: его универсально:
```php ```php
class MyClass extends \yii\base\Object class MyClass extends \yii\base\BaseObject
{ {
public function __construct($param1, $param2, $config = []) public function __construct($param1, $param2, $config = [])
{ {
@ -93,7 +93,7 @@ class MyClass extends \yii\base\Object
``` ```
В примере выше, последний параметр конструктора должен быть массивом конфигурации, который содержит пары в формате В примере выше, последний параметр конструктора должен быть массивом конфигурации, который содержит пары в формате
ключ-значение для инициализации свойств объекта. Вы можете переопределить метод [[yii\base\Object::init()|init()]] для ключ-значение для инициализации свойств объекта. Вы можете переопределить метод [[yii\base\BaseObject::init()|init()]] для
инициализации объекта после того, как конфигурация была применена к нему. инициализации объекта после того, как конфигурация была применена к нему.
Следуя этому соглашению, вы сможете создавать и конфигурировать новые объекты с помощью массива конфигурации: Следуя этому соглашению, вы сможете создавать и конфигурировать новые объекты с помощью массива конфигурации:

2
docs/guide-ru/runtime-responses.md

@ -16,7 +16,7 @@
Первое, что вы делаете при построении ответа, — определяете, был ли успешно обработан запрос. Это реализуется заданием Первое, что вы делаете при построении ответа, — определяете, был ли успешно обработан запрос. Это реализуется заданием
свойству [[yii\web\Response::statusCode]] значения, которое может быть одним из валидных свойству [[yii\web\Response::statusCode]] значения, которое может быть одним из валидных
[HTTP-кодов состояния](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Например, чтобы показать, что запрос был [HTTP-кодов состояния](https://tools.ietf.org/html/rfc2616#section-10). Например, чтобы показать, что запрос был
успешно обработан, вы можете установить значение кода состояния равным 200: успешно обработан, вы можете установить значение кода состояния равным 200:
```php ```php

4
docs/guide-ru/runtime-routing.md

@ -518,9 +518,9 @@ public function bootstrap($app)
namespace app\components; namespace app\components;
use yii\web\UrlRuleInterface; use yii\web\UrlRuleInterface;
use yii\base\Object; use yii\base\BaseObject;
class CarUrlRule extends Object implements UrlRuleInterface class CarUrlRule extends BaseObject implements UrlRuleInterface
{ {
public function createUrl($manager, $route, $params) public function createUrl($manager, $route, $params)

10
docs/guide-ru/start-installation.md

@ -47,18 +47,14 @@ mv composer.phar /usr/local/bin/composer
### Установка Yii ### Установка Yii
```bash ```bash
composer global require "fxp/composer-asset-plugin:^1.3.1"
composer create-project --prefer-dist yiisoft/yii2-app-basic basic composer create-project --prefer-dist yiisoft/yii2-app-basic basic
``` ```
Первая команда устанавливает [composer asset plugin](https://github.com/francoispluchino/composer-asset-plugin/), Эта команда устанавливает последнюю стабильную версию Yii в директорию `basic`. Если хотите, можете выбрать другое
который позволяет управлять зависимостями пакетов bower и npm через Composer. Эту команду достаточно выполнить один раз.
Вторая команда устанавливает последнюю стабильную версию Yii в директорию `basic`. Если хотите, можете выбрать другое
имя директории. имя директории.
> Info: Если команда `composer create-project` не выполняется нормально, убедитесь, что вы корректно установили composer > Info: Если команда `composer create-project` не выполняется нормально, попробуйте обратиться к
> asset plugin. Вы можете сделать это выполнив `composer global show`. Вывод должен содержать `fxp/composer-asset-plugin`. > [разделу "Troubleshooting" документации Composer](https://getcomposer.org/doc/articles/troubleshooting.md).
> Также можно обратиться к [разделу "Troubleshooting" документации Composer](https://getcomposer.org/doc/articles/troubleshooting.md).
> Там описаны другие типичные ошибки. После того, как вы исправили ошибку, запустите `composer update` в директории `basic`. > Там описаны другие типичные ошибки. После того, как вы исправили ошибку, запустите `composer update` в директории `basic`.
> Tip: Если вы хотите установить последнюю нестабильную ревизию Yii, можете использовать следующую команду, > Tip: Если вы хотите установить последнюю нестабильную ревизию Yii, можете использовать следующую команду,

6
docs/guide-ru/structure-applications.md

@ -18,11 +18,11 @@
и применит её к приложению, например: и применит её к приложению, например:
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// загрузка конфигурации приложения // загрузка конфигурации приложения
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// создание объекта приложения и его конфигурирование // создание объекта приложения и его конфигурирование
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();

79
docs/guide-ru/structure-assets.md

@ -138,13 +138,82 @@ class FontAwesomeAsset extends AssetBundle
В выше указанном примере определён комплект ресурсов для [пакета "fontawesome"](http://fontawesome.io/). Задан параметр публикации `beforeCopy`, здесь только `fonts` и `css` поддиректории будут опубликованы. В выше указанном примере определён комплект ресурсов для [пакета "fontawesome"](http://fontawesome.io/). Задан параметр публикации `beforeCopy`, здесь только `fonts` и `css` поддиректории будут опубликованы.
### Bower и NPM Ресурсы<span id="bower-npm-assets"></span> ### Установка ресурсов Bower и NPM<span id="bower-npm-assets"></span>
Большинство JavaScript/CSS пакетов управляются [Bower](http://bower.io/) и/или [NPM](https://www.npmjs.org/). Большинство JavaScript/CSS пакетов управляются [Bower](http://bower.io/) и/или [NPM](https://www.npmjs.org/).
Если Вашим приложением или расширением используется такой пакет, то рекомендуется следовать следующим этапам для управления ресурсами библиотеки: В мире PHP мы испольуем Composer для управления зависимостями, но он не позволяет устанавливать пакеты Bower и NPM, просто указывая их в `composer.json`.
1. Исправить файл `composer.json` Вашего приложения или расширения и включить пакет в список в раздел `require`. Следует использовать `bower-asset/PackageName` (для Bower пакетов) или `npm-asset/PackageName` (для NPM пакетов) для обращения к соответствующей библиотеке. Чтобы получить такую возможность, нужно немного настроить Composer. Существует два варианта:
2. Создать класс комплекта ресурсов и перечислить JavaScript/CSS файлы, которые Вы планируете использовать в Вашем приложении или расширении. Вы должны задать свойство [[yii\web\AssetBundle::sourcePath|sourcePath]] как `@bower/PackageName` или `@npm/PackageName`.
_____
##### Используя репозиторий asset-packagist
Этот способ удовлетворяет потребности большинства проектов, которым нужны Bower или NPM пакеты.
> Note: Начиная с версии 2.0.13, Basic и Advanced шаблоны приложений уже сконфигурированы для использования asset-packagist,
так что этот раздел можно пропустить.
В файле `composer.json` вашего проекта, добавьте следующие строки:
```json
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
```
Настройте [алиасы](concept-aliases.md) `@npm` и `@bower` в файле [конфигурации вашего приложения](concept-configurations.md):
```php
$config = [
...
'aliases' => [
'@bower' => '@vendor/bower-asset',
'@npm' => '@vendor/npm-asset',
],
...
];
```
Посетите [asset-packagist.org](https://asset-packagist.org) чтобы узнать, как это работает.
##### Используя fxp/composer-asset-plugin
По сравнению с asset-packagist, composer-asset-plugin не требует изменять конфигурацию приложения. Вместо этого, требуется
установить специальный глобальный пакет Composer, выполнив следующую команду:
```bash
composer global require "fxp/composer-asset-plugin:^1.3.1"
```
Эта команда устанавливает [composer asset plugin](https://github.com/francoispluchino/composer-asset-plugin/) глобально,
что позволит устанавливать зависимости из Bower и NPM. После установки все проекты на вашем комьютере будут поддерживать
установку Bower и NPM пакетов, описанных в `composer.json`.
Добавьте следующие строки в `composer.json` вашего проекта, чтобы указать директории, в которые будут установлены
необходимые Bower и NPM пакеты:
```json
"extra": {
"asset-installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
}
}
```
> Note: `fxp/composer-asset-plugin` выполняет команду `composer update` существенно дольше, по сравнению с asset-packagist.
____
После настройки Composer для поддержки Bower и NPM пакетов:
1. Исправьте файл `composer.json` Вашего приложения или расширения и включите пакет в список в раздел `require`. Следует использовать `bower-asset/PackageName` (для Bower пакетов) или `npm-asset/PackageName` (для NPM пакетов) для обращения к соответствующей библиотеке.
2. Выполните `composer update`
3. Создайте класс комплекта ресурсов и перечислите JavaScript/CSS файлы, которые Вы планируете использовать в Вашем приложении или расширении. Вы должны задать свойство [[yii\web\AssetBundle::sourcePath|sourcePath]] как `@bower/PackageName` или `@npm/PackageName`.
Это происходит потому, что Composer устанавливает Bower или NPM пакет в директорию, соответствующую этим псевдонимам. Это происходит потому, что Composer устанавливает Bower или NPM пакет в директорию, соответствующую этим псевдонимам.
@ -514,7 +583,7 @@ return [
return [ return [
'components' => [ 'components' => [
'assetManager' => [ 'assetManager' => [
'bundles' => require(__DIR__ . '/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php')), 'bundles' => require __DIR__ . '/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php'),
], ],
], ],
]; ];

12
docs/guide-ru/structure-entry-scripts.md

@ -34,13 +34,13 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev'); defined('YII_ENV') or define('YII_ENV', 'dev');
// регистрация загрузчика классов Composer // регистрация загрузчика классов Composer
require(__DIR__ . '/../vendor/autoload.php'); require __DIR__ . '/../vendor/autoload.php';
// подключение файла класса Yii // подключение файла класса Yii
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// загрузка конфигурации приложения // загрузка конфигурации приложения
$config = require(__DIR__ . '/../config/web.php'); $config = require __DIR__ . '/../config/web.php';
// создание и конфигурация приложения, а также вызов метода для обработки входящего запроса // создание и конфигурация приложения, а также вызов метода для обработки входящего запроса
(new yii\web\Application($config))->run(); (new yii\web\Application($config))->run();
@ -65,13 +65,13 @@ $config = require(__DIR__ . '/../config/web.php');
defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_DEBUG') or define('YII_DEBUG', true);
// регистрация загрузчика классов Composer // регистрация загрузчика классов Composer
require(__DIR__ . '/vendor/autoload.php'); require __DIR__ . '/vendor/autoload.php';
// подключение файла класса Yii // подключение файла класса Yii
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
// загрузка конфигурации приложения // загрузка конфигурации приложения
$config = require(__DIR__ . '/config/console.php'); $config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config); $application = new yii\console\Application($config);
$exitCode = $application->run(); $exitCode = $application->run();

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save