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. 38
      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. 4
      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
php:
- 7.1
- nightly
matrix:
fast_finish: true
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
env:
global:
- DEFAULT_COMPOSER_FLAGS="--prefer-dist --no-interaction --no-progress --optimize-autoloader"
- TASK_TESTS_PHP=1
- TASK_TESTS_JS=0
- TASK_TESTS_COVERAGE=0
services:
@ -74,44 +49,108 @@ addons:
code_climate:
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:
- 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"
# core framework:
- travis_retry composer install --prefer-dist --no-interaction
- tests/data/travis/apc-setup.sh
- tests/data/travis/memcache-setup.sh
- tests/data/travis/imagick-setup.sh
- |
if [[ $TRAVIS_PHP_VERSION == "hhvm-3.12" ]]; then
# remove php-cs-fixer from composer dependencies on hhvm-3.12 - php-cs-fixer requires at least hhvm-3.18
composer remove friendsofphp/php-cs-fixer --dev
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:
# 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
- php -r "echo INTL_ICU_VERSION . \"\n\";"
- php -r "echo INTL_ICU_DATA_VERSION . \"\n\";"
- mysql --version
- psql --version
- php --version
- composer --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
- 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
PHPUNIT_FLAGS="--coverage-clover=coverage.clover"
fi
if [ $TASK_TESTS_PHP == 1 ]; then
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;';
fi
# enable code coverage
- |
if [ $TASK_TESTS_COVERAGE == 1 ]; then
PHPUNIT_FLAGS="--coverage-clover=coverage.clover"
fi
script:
# ensure no files contain UTF-8 byte order mark
- 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
- composer validate --no-check-lock
- cd framework && composer validate --no-check-lock && cd ..
# run PHPUnit
- vendor/bin/phpunit --verbose $PHPUNIT_FLAGS --exclude-group mssql,oci,wincache,xcache,zenddata,cubrid
# PHP tests
- |
if [ $TASK_TESTS_PHP == 1 ]; then
vendor/bin/phpunit --verbose $PHPUNIT_FLAGS --exclude-group mssql,oci,wincache,xcache,zenddata,cubrid
fi
# JS tests
- |
if [ $TASK_TESTS_JS == 1 ]; then
npm test
fi
after_script:
- |
if [ $TASK_TESTS_COVERAGE == 1 ]; then
travis_retry wget https://scrutinizer-ci.com/ocular.phar
php ocular.phar code-coverage:upload --format=php-clover coverage.clover
fi

4
build/build

@ -17,7 +17,7 @@ $composerAutoload = [
foreach ($composerAutoload as $autoload) {
if (file_exists($autoload)) {
require($autoload);
require $autoload;
$vendorPath = dirname($autoload);
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";
exit(1);
}
require(__DIR__ . '/../framework/Yii.php');
require __DIR__ . '/../framework/Yii.php';
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("Updated $nFilesUpdated files.\n");
}
/**
@ -173,14 +172,13 @@ class PhpDocController extends Controller
}
}
} elseif (preg_match('~extensions/([\w-]+)[\\\\/]?$~', $root, $matches)) {
$extensionPath = dirname(rtrim($root, '\\/'));
$this->setUpExtensionAliases($extensionPath);
$extension = $matches[1];
Yii::setAlias("@yii/$extension", "$root");
if (is_file($autoloadFile = Yii::getAlias("@yii/$extension/vendor/autoload.php"))) {
include($autoloadFile);
include $autoloadFile;
}
if (isset($extensionExcept[$extension])) {
@ -197,34 +195,32 @@ class PhpDocController extends Controller
// return [];
// }
} elseif (preg_match('~apps/([\w-]+)[\\\\/]?$~', $root, $matches)) {
$extensionPath = dirname(dirname(rtrim($root, '\\/'))) . '/extensions';
$this->setUpExtensionAliases($extensionPath);
$appName = $matches[1];
Yii::setAlias("@app-$appName", "$root");
if (is_file($autoloadFile = Yii::getAlias("@app-$appName/vendor/autoload.php"))) {
include($autoloadFile);
include $autoloadFile;
}
$except[] = '/runtime/';
$except[] = '/vendor/';
$except[] = '/tests/';
$except[] = '/docs/';
}
$root = FileHelper::normalizePath($root);
$options = [
'filter' => function ($path) {
if (is_file($path)) {
$file = basename($path);
if ($file[0] < 'A' || $file[0] > 'Z') {
return false;
}
if (is_file($path)) {
$file = basename($path);
if ($file[0] < 'A' || $file[0] > 'Z') {
return false;
}
}
return null;
},
return null;
},
'only' => ['*.php'],
'except' => array_merge($except, [
'.git/',
@ -274,15 +270,15 @@ class PhpDocController extends Controller
$contentAfterNamespace--;
}
$lines = array_merge([
"<?php",
"/**",
" * @link http://www.yiiframework.com/",
" * @copyright Copyright (c) 2008 Yii Software LLC",
" * @license http://www.yiiframework.com/license/",
" */",
"",
'<?php',
'/**',
' * @link http://www.yiiframework.com/',
' * @copyright Copyright (c) 2008 Yii Software LLC',
' * @license http://www.yiiframework.com/license/',
' */',
'',
$namespaceLine,
""
'',
], $lines);
}
}
@ -346,7 +342,7 @@ class PhpDocController extends Controller
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]);
foreach ($types as $i => $type) {
switch ($type) {
@ -412,7 +408,7 @@ class PhpDocController extends Controller
// check for multi line array
if ($level > 0) {
${'endof'.$property} = $i;
${'endof' . $property} = $i;
}
$line = trim($line);
@ -448,8 +444,8 @@ class PhpDocController extends Controller
$endofAll = false;
foreach (['Private', 'Protected', 'Public', 'Const', 'Use'] as $var) {
if (${'endof'.$var} !== false) {
$endofAll = ${'endof'.$var};
if (${'endof' . $var} !== false) {
$endofAll = ${'endof' . $var};
break;
}
}
@ -490,8 +486,8 @@ class PhpDocController extends Controller
return false;
}
if (!$ref->isSubclassOf('yii\base\Object') && $className != 'yii\base\Object') {
$this->stderr("[INFO] Skipping class $className as it is not a subclass of yii\\base\\Object.\n", Console::FG_BLUE, Console::BOLD);
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\\BaseObject.\n", Console::FG_BLUE, Console::BOLD);
return false;
}
@ -531,7 +527,6 @@ class PhpDocController extends Controller
}
if (trim($oldDoc) != trim($newDoc)) {
$fileContent = explode("\n", file_get_contents($file));
$start = $ref->getStartLine() - 2;
$docStart = $start - count(explode("\n", $oldDoc)) + 1;
@ -621,8 +616,8 @@ class PhpDocController extends Controller
protected function generateClassPropertyDocs($fileName)
{
$phpdoc = "";
$file = str_replace("\r", "", str_replace("\t", " ", file_get_contents($fileName, true)));
$phpdoc = '';
$file = str_replace("\r", '', str_replace("\t", ' ', file_get_contents($fileName, true)));
$ns = $this->match('#\nnamespace (?<name>[\w\\\\]+);\n#', $file);
$namespace = reset($ns);
$namespace = $namespace['name'];
@ -655,7 +650,6 @@ class PhpDocController extends Controller
$className = null;
foreach ($classes as &$class) {
$className = $namespace . '\\' . $class['name'];
$gets = $this->match(
@ -756,9 +750,11 @@ class PhpDocController extends Controller
foreach ($parts as $part) {
preg_match_all($pattern . 'suU', $part, $matches, PREG_SET_ORDER);
foreach ($matches as &$set) {
foreach ($set as $i => $match)
if (is_numeric($i) /*&& $i != 0*/)
foreach ($set as $i => $match) {
if (is_numeric($i) /*&& $i != 0*/) {
unset($set[$i]);
}
}
$sets[] = $set;
}
@ -769,8 +765,9 @@ class PhpDocController extends Controller
protected function fixSentence($str)
{
// TODO fix word wrap
if ($str == '')
if ($str == '') {
return '';
}
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));
$this->stdout(str_repeat(' ', $w + 2) . "Current Version Next Version\n", Console::BOLD);
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");
}
}
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("- 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("- also make sure the milestone on github is complete and no issues or PRs are left open.\n\n");
$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");
foreach ($what as $ext) {
if (strncmp('app-', $ext, 4) === 0) {
$this->stdout(" - ");
$this->stdout(' - ');
$this->stdout(substr($ext, 4), Console::FG_RED);
$this->stdout(" application version ");
$this->stdout(' application version ');
} elseif ($ext === 'framework') {
$this->stdout(" - Yii Framework version ");
$this->stdout(' - Yii Framework version ');
} else {
$this->stdout(" - ");
$this->stdout(' - ');
$this->stdout($ext, Console::FG_RED);
$this->stdout(" extension version ");
$this->stdout(' extension version ');
}
$this->stdout($versions[$ext], Console::BOLD);
$this->stdout("\n");
@ -323,9 +322,9 @@ class ReleaseController extends Controller
$version = array_values($this->getNextVersions($this->getCurrentVersions($what), self::PATCH))[0];
$this->stdout('sorting CHANGELOG of ');
$this->stdout(reset($what), Console::BOLD);
$this->stdout(" for version ");
$this->stdout(' for version ');
$this->stdout($version, Console::BOLD);
$this->stdout("...");
$this->stdout('...');
$this->resortChangelogs($what, $version);
@ -336,15 +335,15 @@ class ReleaseController extends Controller
{
foreach ($what as $ext) {
if (strncmp('app-', $ext, 4) === 0) {
$this->stdout(" - ");
$this->stdout(' - ');
$this->stdout(substr($ext, 4), Console::FG_RED);
$this->stdout(" application version ");
$this->stdout(' application version ');
} elseif ($ext === 'framework') {
$this->stdout(" - Yii Framework version ");
$this->stdout(' - Yii Framework version ');
} else {
$this->stdout(" - ");
$this->stdout(' - ');
$this->stdout($ext, Console::FG_RED);
$this->stdout(" extension version ");
$this->stdout(' extension version ');
}
$this->stdout($newVersions[$ext], Console::BOLD);
$this->stdout(", last release was {$versions[$ext]}\n");
@ -375,7 +374,7 @@ class ReleaseController extends Controller
foreach ($what as $w) {
if (strncmp('app-', $w, 4) === 0) {
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))) {
throw new Exception("Application path does not exist: \"{$appPath}\"\n");
@ -385,7 +384,7 @@ class ReleaseController extends Controller
}
} elseif ($w === 'framework') {
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")) {
throw new Exception("Framework path does not exist: \"{$this->basePath}/framework\"\n");
@ -395,7 +394,7 @@ class ReleaseController extends Controller
}
} else {
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")) {
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");
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("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(" **** 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 tag -s $version -m \"version $version\"", $frameworkPath);
$this->runGit("git push", $frameworkPath);
$this->runGit("git push --tags", $frameworkPath);
$this->runGit('git push', $frameworkPath);
$this->runGit('git push --tags', $frameworkPath);
$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(" version ", Console::FG_YELLOW, Console::BOLD);
$this->stdout(' version ', Console::FG_YELLOW, Console::BOLD);
$this->stdout($version, Console::BOLD);
$this->stdout("!\n\n", Console::FG_YELLOW, Console::BOLD);
@ -519,10 +518,10 @@ class ReleaseController extends Controller
$this->stdout("\n");
$this->runGit("git diff --color", $frameworkPath);
$this->runGit('git diff --color', $frameworkPath);
$this->stdout("\n\n");
$this->runGit("git commit -a -m \"prepare for next release\"", $frameworkPath);
$this->runGit("git push", $frameworkPath);
$this->runGit('git commit -a -m "prepare for next release"', $frameworkPath);
$this->runGit('git push', $frameworkPath);
$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("\n");
}
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");
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("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(" **** 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 tag -s $version -m \"version $version\"", $path);
$this->runGit("git push", $path);
$this->runGit("git push --tags", $path);
$this->runGit('git push', $path);
$this->runGit('git push --tags', $path);
$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(" version ", Console::FG_YELLOW, Console::BOLD);
$this->stdout(' version ', Console::FG_YELLOW, Console::BOLD);
$this->stdout($version, 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
$this->stdout("\n");
$this->runGit("git diff --color", $path);
$this->runGit('git diff --color', $path);
$this->stdout("\n\n");
$this->runGit("git commit -a -m \"prepare for next release\"", $path);
$this->runGit("git push", $path);
$this->runGit('git commit -a -m "prepare for next release"', $path);
$this->runGit('git push', $path);
$this->stdout("\n\nDONE!", Console::FG_YELLOW, Console::BOLD);
@ -639,7 +637,7 @@ class ReleaseController extends Controller
break;
case 'advanced':
// setup @frontend, @backend etc...
require("$path/common/config/bootstrap.php");
require "$path/common/config/bootstrap.php";
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");
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("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(" **** 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 tag -s $version -m \"version $version\"", $path);
$this->runGit("git push", $path);
$this->runGit("git push --tags", $path);
$this->runGit('git push', $path);
$this->runGit('git push --tags', $path);
$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(" version ", Console::FG_YELLOW, Console::BOLD);
$this->stdout(' version ', Console::FG_YELLOW, Console::BOLD);
$this->stdout($version, 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("\n");
$this->runGit("git diff --color", $path);
$this->runGit('git diff --color', $path);
$this->stdout("\n\n");
$this->runGit("git commit -a -m \"prepare for next release\"", $path);
$this->runGit("git push", $path);
$this->runGit('git commit -a -m "prepare for next release"', $path);
$this->runGit('git push', $path);
$this->stdout("\n\nDONE!", Console::FG_YELLOW, Console::BOLD);
@ -815,7 +813,7 @@ class ReleaseController extends Controller
$v = str_replace('\\-', '[\\- ]', preg_quote($version, '/'));
$headline = $version . ' ' . date('F d, Y');
$this->sed(
'/'.$v.' under development\n(-+?)\n/',
'/' . $v . ' under development\n(-+?)\n/',
$headline . "\n" . str_repeat('-', strlen($headline)) . "\n",
$this->getChangelogs($what)
);
@ -862,11 +860,11 @@ class ReleaseController extends Controller
$state = 'start';
foreach ($lines as $l => $line) {
// starting from the changelogs headline
if (isset($lines[$l-2]) && strpos($lines[$l-2], $version) !== false &&
isset($lines[$l-1]) && strncmp($lines[$l-1], '---', 3) === 0) {
if (isset($lines[$l - 2]) && strpos($lines[$l - 2], $version) !== false &&
isset($lines[$l - 1]) && strncmp($lines[$l - 1], '---', 3) === 0) {
$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';
}
// add continued lines to the last item to keep them together
@ -892,7 +890,7 @@ class ReleaseController extends Controller
$changelog = array_filter($changelog);
$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)) {
$o = ['Bug' => 'C', 'Enh' => 'D', 'Chg' => 'E', 'New' => 'F'];
return $o[$m[1]] . ' ' . (!empty($m[2]) ? $m[2] : 'AAAA' . $i++);
@ -925,7 +923,7 @@ class ReleaseController extends Controller
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) {
if (strpos($elem, "extensions/$ext/CHANGELOG.md") !== false) {
return true;

2
build/controllers/TranslationController.php

@ -113,7 +113,7 @@ class TranslationController extends Controller
protected function getDiff($translatedFilePath, $sourceFilePath)
{
$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);
}
/**

38
build/controllers/Utf8Controller.php

@ -40,14 +40,12 @@ class Utf8Controller extends Controller
}
foreach ($files as $file) {
$content = file_get_contents($file);
$chars = preg_split('//u', $content, null, PREG_SPLIT_NO_EMPTY);
$line = 1;
$pos = 0;
foreach ($chars as $c) {
$ord = $this->unicodeOrd($c);
$pos++;
@ -57,7 +55,7 @@ class Utf8Controller extends Controller
}
if ($ord === false) {
$this->found("BROKEN UTF8", $c, $line, $pos, $file);
$this->found('BROKEN UTF8', $c, $line, $pos, $file);
continue;
}
@ -66,22 +64,20 @@ class Utf8Controller extends Controller
|| 0x2028 <= $ord && $ord <= 0x202E
|| 0x205f <= $ord && $ord <= 0x206F
) {
$this->found("UNSUPPORTED SPACE CHARACTER", $c, $line, $pos, $file);
$this->found('UNSUPPORTED SPACE CHARACTER', $c, $line, $pos, $file);
continue;
}
if ($ord < 0x0020 && $ord != 0x000A && $ord != 0x0009 ||
0x0080 <= $ord && $ord < 0x009F) {
$this->found("CONTROL CHARARCTER", $c, $line, $pos, $file);
$this->found('CONTROL CHARARCTER', $c, $line, $pos, $file);
continue;
}
// if ($ord > 0x009F) {
// $this->found("NON ASCII CHARARCTER", $c, $line, $pos, $file);
// continue;
// }
}
}
}
private $_foundFiles = [];
@ -95,7 +91,7 @@ class Utf8Controller extends Controller
$hexcode = dechex($this->unicodeOrd($char));
$hexcode = str_repeat('0', max(4 - strlen($hexcode), 0)) . $hexcode;
$this->stdout(" at $line:$pos FOUND $what: 0x$hexcode '$char' http://unicode-table.com/en/$hexcode/\n");
}
@ -109,22 +105,22 @@ class Utf8Controller extends Controller
*/
private function unicodeOrd($c)
{
$h = ord($c{0});
$h = ord($c[0]);
if ($h <= 0x7F) {
return $h;
} else if ($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 {
} elseif ($h < 0xC2) {
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",
"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.inputmask": "~3.2.2 | ~3.3.5",
"bower-asset/inputmask": "~3.2.2 | ~3.3.5",
"bower-asset/punycode": "1.3.*",
"bower-asset/yii2-pjax": "~2.0.1"
},
"require-dev": {
"phpunit/phpunit": "~4.4",
"cebe/indent": "~1.0.2"
"phpunit/phpunit": "4.8.34",
"cebe/indent": "~1.0.2",
"friendsofphp/php-cs-fixer": "~2.2.3"
},
"repositories": [
{
@ -95,7 +96,8 @@
},
"autoload": {
"psr-4": {
"yii\\": "framework/"
"yii\\": "framework/",
"yii\\cs\\": "cs/src/"
}
},
"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.
```php
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/../vendor/autoload.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

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 --
`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()`.

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]].
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.
- 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:
```php
namespace yii\components\MyClass;
use yii\base\Object;
use yii\base\BaseObject;
class MyClass extends Object
class MyClass extends BaseObject
{
public $prop1;
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).
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í.
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.
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>
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>
@ -76,7 +76,7 @@ Configuración para una [aplicación](structure-applications.md) es probablement
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
@ -143,8 +143,8 @@ Cuando una configuración es muy compleja, una práctica común es almacenarla e
return [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
'components' => require(__DIR__ . '/components.php'),
'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.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:
```php
$config = require('path/to/web.php');
$config = require 'path/to/web.php';
(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,
```php
use yii\base\Object;
use yii\base\BaseObject;
class Foo extends Object
class Foo extends BaseObject
{
public $bar;
@ -185,7 +185,7 @@ una nueva instancia de `UserLister` con una simple llamada a `get('userLister')`
```php
namespace app\models;
use yii\base\Object;
use yii\base\BaseObject;
use yii\db\Connection;
use yii\di\Container;
@ -194,7 +194,7 @@ interface UserFinderInterface
function findUser();
}
class UserFinder extends Object implements UserFinderInterface
class UserFinder extends BaseObject implements UserFinderInterface
{
public $db;
@ -209,7 +209,7 @@ class UserFinder extends Object implements UserFinderInterface
}
}
class UserLister extends Object
class UserLister extends BaseObject
{
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
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:

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
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
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
puede utilizar como una propiedad.
@ -32,9 +32,9 @@ setter `setLabel()` definen la propiedad `label`, como se muestra a continuació
```php
namespace app\components;
use yii\base\Object;
use yii\base\BaseObject;
class Foo extends Object
class Foo extends BaseObject
{
private $_label;

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

@ -56,25 +56,25 @@ al autoloader de Yii.)
Componentes y Objetos
----------------------
Yii 2.0 parte la clase `CComponent` de 1.1 en dos clases: [[yii\base\Object]] y [[yii\base\Component]].
La clase [[yii\base\Object|Object]] 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
Yii 2.0 parte la clase `CComponent` de 1.1 en dos clases: [[yii\base\BaseObject]] y [[yii\base\Component]].
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\BaseObject|BaseObject]] y soporta
[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
[[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.
Configuración de objetos
------------------------
La clase [[yii\base\Object|Object]] 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
La clase [[yii\base\BaseObject|BaseObject]] introduce una manera uniforme de configurar objetos. Cualquier clase descendiente
de [[yii\base\BaseObject|BaseObject]] debería declarar su constructor (si fuera necesario) de la siguiente manera para que
puede ser adecuadamente configurado:
```php
class MyClass extends \yii\base\Object
class MyClass extends \yii\base\BaseObject
{
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
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.
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
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
[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:
```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;
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)

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:
```php
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// 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
(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 [
'components' => [
'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');
// registrar el cargador automático de Composer
require(__DIR__ . '/../vendor/autoload.php');
require __DIR__ . '/../vendor/autoload.php';
// 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
$config = require(__DIR__ . '/../config/web.php');
$config = require __DIR__ . '/../config/web.php';
// crear, configurar y ejecutar la aplicación
(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);
// registrar el cargador automático de Composer
require(__DIR__ . '/vendor/autoload.php');
require __DIR__ . '/vendor/autoload.php';
// 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
$config = require(__DIR__ . '/config/console.php');
$config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config);
$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`.
* 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
[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`
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();
// 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
// instalar el cargador automático de Composer
require(__DIR__ . '/../vendor/autoload.php');
require __DIR__ . '/../vendor/autoload.php';
// 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>
@ -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:
```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í
```
@ -149,14 +149,14 @@ Segundo, modifica el script de entrada de la aplicación como sigue,
```php
// 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
$yii2Config = require(__DIR__ . '/../config/yii2/web.php');
$yii2Config = require __DIR__ . '/../config/yii2/web.php';
new yii\web\Application($yii2Config); // No llamar a run()
// 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();
```
@ -165,10 +165,10 @@ El código anterior incluye el fichero con la clase `Yii` personalizada, que tie
```php
$yii2path = '/path/to/yii2';
require($yii2path . '/BaseYii.php'); // Yii 2.x
require $yii2path . '/BaseYii.php'; // Yii 2.x
$yii1path = '/path/to/yii1';
require($yii1path . '/YiiBase.php'); // Yii 1.x
require $yii1path . '/YiiBase.php'; // Yii 1.x
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 :
```php
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/../vendor/autoload.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.

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()`.

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]].
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.
- 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 :
@ -38,9 +38,9 @@ Par exemple :
namespace yii\components\MyClass;
use yii\base\Object;
use yii\base\BaseObject;
class MyClass extends Object
class MyClass extends BaseObject
{
public $prop1;
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).
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.
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.
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 = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
@ -144,8 +144,8 @@ Lorsqu'une configuration est très complexe, une pratique courante est de la sto
return [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
'components' => require(__DIR__ . '/components.php'),
'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.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 :
```php
$config = require('path/to/web.php');
$config = require 'path/to/web.php';
(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 :
```php
use yii\base\Object;
use yii\base\BaseObject;
class Foo extends Object
class Foo extends BaseObject
{
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>
@ -215,7 +215,7 @@ Le code suivant montre un exemple plus sophistiqué. La classe `UserLister` dép
```php
namespace app\models;
use yii\base\Object;
use yii\base\BaseObject;
use yii\db\Connection;
use yii\di\Container;
@ -224,7 +224,7 @@ interface UserFinderInterface
function findUser();
}
class UserFinder extends Object implements UserFinderInterface
class UserFinder extends BaseObject implements UserFinderInterface
{
public $db;
@ -239,7 +239,7 @@ class UserFinder extends Object implements UserFinderInterface
}
}
class UserLister extends Object
class UserLister extends BaseObject
{
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.
> 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 :

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.
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 :
```php
namespace app\components;
use yii\base\Object;
use yii\base\BaseObject;
class Foo extends Object
class Foo extends BaseObject
{
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()`.
* 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.
* 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`.

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

@ -58,26 +58,26 @@ chargeur de classe de Yii.)
Composants et objets
--------------------
Yii 2.0 décompose la classe `CComponent` 1.1 en deux classes: [[yii\base\Object]] et [[yii\base\Component]].
Le classe [[yii\base\Object|Object]] est une classe de base légère qui permet de définir les
Yii 2.0 décompose la classe `CComponent` 1.1 en deux classes: [[yii\base\BaseObject]] et [[yii\base\Component]].
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
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).
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.
Configuration d'objets
---------------------
La classe [[yii\base\Object|Object]] 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
La classe [[yii\base\BaseObject|BaseObject]] introduit une manière uniforme de configurer les objets. Toute sous-classe
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 :
```php
class MyClass extends \yii\base\Object
class MyClass extends \yii\base\BaseObject
{
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
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.
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>
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
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;
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)

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 :
```php
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// charger la configuration de l'application
$config = require(__DIR__ . '/../config/web.php');
$config = require __DIR__ . '/../config/web.php';
// instancier et configurer l'application
(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 [
'components' => [
'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');
// register Composer autoloader
require(__DIR__ . '/../vendor/autoload.php');
require __DIR__ . '/../vendor/autoload.php';
// include Yii class file
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// load application configuration
$config = require(__DIR__ . '/../config/web.php');
$config = require __DIR__ . '/../config/web.php';
// create, configure and run application
(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);
// register Composer autoloader
require(__DIR__ . '/vendor/autoload.php');
require __DIR__ . '/vendor/autoload.php';
// include Yii class file
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
// load application configuration
$config = require(__DIR__ . '/config/console.php');
$config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config);
$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 *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.
* 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.

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

@ -49,7 +49,7 @@ public function init()
{
parent::init();
// 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
--------------------
Yii 2.0 membagi kelas `CComponent` di 1.1 menjadi dua kelas: [[yii\base\Object]] dan [[yii\base\Component]].
Class [[yii\base\Object|Object]] 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
Yii 2.0 membagi kelas `CComponent` di 1.1 menjadi dua kelas: [[yii\base\BaseObject]] dan [[yii\base\Component]].
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\BaseObject|BaseObject]] dengan dukungan
[Event](concept-events.md) dan [behavior](concept-behaviors.md).
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.
Konfigurasi objek
--------------------
Class [[yii\base\Object|Object]] memperkenalkan cara seragam untuk mengkonfigurasi objek. Setiap class turunan
dari [[yii\base\Object|Object]] harus menyatakan konstruktor (jika diperlukan) dengan cara berikut agar
Class [[yii\base\BaseObject|BaseObject]] memperkenalkan cara seragam untuk mengkonfigurasi objek. Setiap class turunan
dari [[yii\base\BaseObject|BaseObject]] harus menyatakan konstruktor (jika diperlukan) dengan cara berikut agar
dapat dikonfigurasi dengan benar:
```php
class MyClass extends \yii\base\Object
class MyClass extends \yii\base\BaseObject
{
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
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.
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:
```php
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// memuat konfigurasi aplikasi
$config = require(__DIR__ . '/../config/web.php');
$config = require __DIR__ . '/../config/web.php';
// membuat objek aplikasi & menerapkan konfigurasi
(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');
// mendaftarkan autoloader Composer
require(__DIR__ . '/../vendor/autoload.php');
require __DIR__ . '/../vendor/autoload.php';
// memasukkan file class Yii
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// Mengambil konfigurasi aplikasi
$config = require(__DIR__ . '/../config/web.php');
$config = require __DIR__ . '/../config/web.php';
// Membuat, mengkonfigurasi, dan menjalankan aplikasi
(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');
// mendaftarkan autoloader composer
require(__DIR__ . '/vendor/autoload.php');
require __DIR__ . '/vendor/autoload.php';
// memasukkan file class Yii
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
// Mengambil konfigurasi aplikasi
$config = require(__DIR__ . '/config/console.php');
$config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config);
$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
---------------------
Yii 2 divide la classe `CComponent` della versione 1.1 in due classi: [[yii\base\Object]] and [[yii\base\Component]].
La classe [[yii\base\Object|Object]] è una classe leggera da usare come base, che consente la definizione di
Yii 2 divide la classe `CComponent` della versione 1.1 in due classi: [[yii\base\BaseObject]] and [[yii\base\Component]].
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
[[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.
Configurazione oggetti
----------------------
La classe [[yii\base\Object|Object]] 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
La classe [[yii\base\BaseObject|BaseObject]] introduce un metodo uniforme per la configurazione degli oggetti.
Ogni classe figlia di [[yii\base\BaseObject|BaseObject]] dovrebbe dichiarare il suo costruttore (se necessario) in questo modo, così da essere
configurato correttamente:
```php
class MyClass extends \yii\base\Object
class MyClass extends \yii\base\BaseObject
{
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
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:

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

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

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

@ -45,7 +45,7 @@ class MyBehavior extends Behavior
上のコードは、 `app\components\MyBehavior` という、2つのプロパティ -- `prop1``prop2` -- と
`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()` メソッドを持つようになります。

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

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

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

@ -19,7 +19,7 @@ $config = [
$db = Yii::createObject($config);
```
[[Yiiの::CreateObject()]] メソッドは引数に構成情報の配列を受け取り、構成情報で名前指定されたクラスをインスタンス化してオブジェクトを作成します。
[[Yii::createObject()]] メソッドは引数に構成情報の配列を受け取り、構成情報で名前指定されたクラスをインスタンス化してオブジェクトを作成します。
オブジェクトがインスタンス化されるとき、その他の設定は、
オブジェクトのプロパティ、イベントハンドラ、およびビヘイビアを初期化するのに使われます。
@ -93,7 +93,7 @@ Yii::configure($object, $config);
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
@ -136,7 +136,7 @@ $config = [
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'container' => [
'definitions' => [
'yii\widgets\LinkPager' => ['maxButtonCount' => 5]
@ -185,8 +185,8 @@ echo Menu::widget([
return [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
'components' => require(__DIR__ . '/components.php'),
'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => require __DIR__ . '/components.php',
];
```
`components` の構成もまた複雑になるため、上記のように、 `components.php` と呼ぶ別のファイルにそれを格納し `web.php` でそのファイルを "require" しています。
@ -222,7 +222,7 @@ return [
構成情報ファイルに格納されている構成情報を取得するには、以下のように、それを "require" するだけです:
```php
$config = require('path/to/web.php');
$config = require 'path/to/web.php';
(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
use yii\base\Object;
use yii\base\BaseObject;
class Foo extends Object
class Foo extends BaseObject
{
public $bar;
@ -103,7 +103,7 @@ $container->get('Foo', [], [
```
> Info: [[yii\di\Container::get()]] メソッドは三番目のパラメータを、生成されるオブジェクトに適用されるべき構成情報配列として受け取ります。
クラスが [[yii\base\Configurable]] インタフェイスを実装している場合 (例えば、クラスが [[yii\base\Object]] である場合) には、この構成情報配列がクラスのコンストラクタの最後のパラメータとして渡されます。
クラスが [[yii\base\Configurable]] インタフェイスを実装している場合 (例えば、クラスが [[yii\base\BaseObject]] である場合) には、この構成情報配列がクラスのコンストラクタの最後のパラメータとして渡されます。
そうでない場合は、構成情報はオブジェクトが生成された *後で* 適用されることになります。
### PHP コーラブル・インジェクション <span id="php-callable-injection"></span>
@ -249,7 +249,7 @@ $engine = $container->get('app\components\SearchEngine', [$apiKey, $apiSecret],
```php
namespace app\models;
use yii\base\Object;
use yii\base\BaseObject;
use yii\db\Connection;
use yii\di\Container;
@ -258,7 +258,7 @@ interface UserFinderInterface
function findUser();
}
class UserFinder extends Object implements UserFinderInterface
class UserFinder extends BaseObject implements UserFinderInterface
{
public $db;
@ -273,7 +273,7 @@ class UserFinder extends Object implements UserFinderInterface
}
}
class UserLister extends Object
class UserLister extends BaseObject
{
public $finder;

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

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

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

@ -14,10 +14,10 @@ $object->label = trim($label);
`label` プロパティに、最初の文字を大文字にしなければならない、といった新たな要件が発生したら、 `label` に値を代入するすべてのコードを変更しなければなりません。
コードの繰り返しはバグを誘発するので、できれば避けたいところです。
この問題を解決するために、Yii は *getter* メソッドと *setter* メソッドをベースにしたプロパティ定義をサポートする、 [[yii\base\Object]] 基底クラスを提供します。
クラスがその機能を必要とするなら、 [[yii\base\Object]] またはその子クラスを継承しましょう。
この問題を解決するために、Yii は *getter* メソッドと *setter* メソッドをベースにしたプロパティ定義をサポートする、 [[yii\base\BaseObject]] 基底クラスを提供します。
クラスがその機能を必要とするなら、 [[yii\base\BaseObject]] またはその子クラスを継承しましょう。
> Note: Yiiのフレームワークのほぼすべてのコアクラスは、 [[yii\base\Object]] またはその子クラスを継承しています。
> Note: Yiiのフレームワークのほぼすべてのコアクラスは、 [[yii\base\BaseObject]] またはその子クラスを継承しています。
これは、コアクラスに getter または setter があれば、それをプロパティのように使用できることを意味します。
getter メソッドは、名前が `get` で始まるメソッドで、setter メソッドは、`set` で始まるメソッドです。
@ -27,9 +27,9 @@ getter メソッドは、名前が `get` で始まるメソッドで、setter
```php
namespace app\components;
use yii\base\Object;
use yii\base\BaseObject;
class Foo extends Object
class Foo extends BaseObject
{
private $_label;
@ -73,7 +73,7 @@ getter と setter で定義されたプロパティには、いくつかの特
getter または setter メソッドの定義によって決めることは出来ません。
* プロパティは、 *静的でない* getter および setter によってのみ定義することが出来ます。静的なメソッドは同様には扱われません。
* 通常の `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()` を呼べば済むのです。
さらに、新しい要求でラベルの先頭を大文字にする必要が発生しても、他のいっさいのコードに触れることなく、すぐに `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\base\Object|Object]] クラスは、ゲッターとセッターを通じて [オブジェクトプロパティ](concept-properties.md) を定義することを可能にする、軽量な基底クラスです。
[[yii\base\Component|Component]] クラスは [[yii\base\Object|Object]] からの拡張であり、[イベント](concept-events.md) と [ビヘイビア](concept-behaviors.md) をサポートします。
Yii 2.0 は、1.1 の `CComponent` クラスを二つのクラス、すなわち、[[yii\base\BaseObject]] と [[yii\base\Component]] に分割しました。
[[yii\base\BaseObject|BaseObject]] クラスは、ゲッターとセッターを通じて [オブジェクトプロパティ](concept-properties.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\Object|Object]] の全ての派生クラスは、コンストラクタが必要な場合には、インスタンスが正しく構成されるように、コンストラクタを以下のようにして宣言しなければなりません。
[[yii\base\BaseObject|BaseObject]] クラスはオブジェクトを構成するための統一された方法を導入しています。
[[yii\base\BaseObject|BaseObject]] の全ての派生クラスは、コンストラクタが必要な場合には、インスタンスが正しく構成されるように、コンストラクタを以下のようにして宣言しなければなりません。
```php
class MyClass extends \yii\base\Object
class MyClass extends \yii\base\BaseObject
{
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>
レスポンスを作成するときに最初にすることの一つは、リクエストが成功裡に処理されたかどうかを記述することです。
そのためには、[[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 に設定します。
```php

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

@ -545,9 +545,9 @@ public function bootstrap($app)
namespace app\components;
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)

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

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

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

@ -600,7 +600,7 @@ return [
return [
'components' => [
'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');
// Composer のオートローダを登録
require(__DIR__ . '/../vendor/autoload.php');
require __DIR__ . '/../vendor/autoload.php';
// 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();
@ -64,13 +64,13 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
// Composer のオートローダを登録
require(__DIR__ . '/vendor/autoload.php');
require __DIR__ . '/vendor/autoload.php';
// 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);
$exitCode = $application->run();

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

@ -362,7 +362,7 @@ Yii はテストのサポートを提供しており、それよって、単体
このファイルは Markdown 形式で書いて `upgrade.md` と名付けることが出来ます。
* チュートリアル、デモ、スクリーンショットなど: あなたのエクステンションが readme ファイルでは十分にカバーできないほど多くの機能を提供するものである場合は、これらが必要になります。
* 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 形式で書くことが出来ます。
`yiisoft/yii2-apidoc` エクステンションが、コードのコメントに基づいて綺麗な API ドキュメントを生成するツールを提供しています。

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

@ -57,7 +57,7 @@ public function init()
{
parent::init();
// 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);
require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/vendor/autoload.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);
$exitCode = $application->run();

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

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

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
[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).
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.
- 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:
@ -44,9 +44,9 @@ Przykład:
namespace yii\components\MyClass;
use yii\base\Object;
use yii\base\BaseObject;
class MyClass extends Object
class MyClass extends BaseObject
{
public $prop1;
public $prop2;
@ -83,11 +83,11 @@ $component = \Yii::createObject([
> [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.
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.
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
------------------
Yii 2.0 rozdzielił klasę `CComponent` z 1.1 na dwie: [[yii\base\Object|Object]] 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.
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).
Yii 2.0 rozdzielił klasę `CComponent` z 1.1 na dwie: [[yii\base\BaseObject|BaseObject]] i [[yii\base\Component|Component]].
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\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.
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:
```php
class MyClass extends \yii\base\Object
class MyClass extends \yii\base\BaseObject
{
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,
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.
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');
// register Composer autoloader
require(__DIR__ . '/../vendor/autoload.php');
require __DIR__ . '/../vendor/autoload.php';
// include Yii class file
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// load application configuration
$config = require(__DIR__ . '/../config/web.php');
$config = require __DIR__ . '/../config/web.php';
// create, configure and run application
(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);
// register Composer autoloader
require(__DIR__ . '/vendor/autoload.php');
require __DIR__ . '/vendor/autoload.php';
// include Yii class file
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
// load application configuration
$config = require(__DIR__ . '/config/console.php');
$config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config);
$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:
```php
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/../vendor/autoload.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.

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`
É 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()`.

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]].
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.
- 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:
@ -39,9 +39,9 @@ Por Exemplo:
namespace yii\components\MyClass;
use yii\base\Object;
use yii\base\BaseObject;
class MyClass extends Object
class MyClass extends BaseObject
{
public $prop1;
public $prop2;
@ -78,11 +78,11 @@ $component = \Yii::createObject([
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.
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.
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 = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
@ -150,8 +150,8 @@ Por exemplo, você pode guardar uma configuração da aplicação em um arquivo
return [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
'components' => require(__DIR__ . '/components.php'),
'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.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:
```php
$config = require('path/to/web.php');
$config = require 'path/to/web.php';
(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:
```php
use yii\base\Object;
use yii\base\BaseObject;
class Foo extends Object
class Foo extends BaseObject
{
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>
@ -195,7 +195,7 @@ O código abaixo mostra um exemplo mais sofisticado. A classe `UserLister` depen
```php
namespace app\models;
use yii\base\Object;
use yii\base\BaseObject;
use yii\db\Connection;
use yii\di\Container;
@ -204,7 +204,7 @@ interface UserFinderInterface
function findUser();
}
class UserFinder extends Object implements UserFinderInterface
class UserFinder extends BaseObject implements UserFinderInterface
{
public $db;
@ -219,7 +219,7 @@ class UserFinder extends Object implements UserFinderInterface
}
}
class UserLister extends Object
class UserLister extends BaseObject
{
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.
> 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:

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.
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`.
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
namespace app\components;
use yii\base\Object;
use yii\base\BaseObject;
class Foo extends Object
class Foo extends BaseObject
{
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
------------------
O Yii 2.0 divide a classe `CComponent` do 1.1 em duas classes: [[yii\base\Object]]
e [[yii\base\Component]]. A classe [[yii\base\Object|Object]] é uma classe base
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\BaseObject|BaseObject]] é uma classe base
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
[[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).
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.
Configuração de Objetos
-----------------------
A classe [[yii\base\Object|Object]] introduz uma maneira uniforme de configurar
objetos. Qualquer classe descendente de [[yii\base\Object|Object]] deveria
A classe [[yii\base\BaseObject|BaseObject]] introduz uma maneira uniforme de configurar
objetos. Qualquer classe descendente de [[yii\base\BaseObject|BaseObject]] deveria
declarar seu construtor (se necessário) da seguinte maneira, para que ela
seja configurada adequadamente:
```php
class MinhaClasse extends \yii\base\Object
class MinhaClasse extends \yii\base\BaseObject
{
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
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
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;
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)

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:
```php
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
// 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
(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 [
'components' => [
'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');
// registra o autoloader do Composer
require(__DIR__ . '/../vendor/autoload.php');
require __DIR__ . '/../vendor/autoload.php';
// 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
$config = require(__DIR__ . '/../config/web.php');
$config = require __DIR__ . '/../config/web.php';
// cria, configura e executa a aplicação
(new yii\web\Application($config))->run();
@ -70,13 +70,13 @@ do console:
defined('YII_DEBUG') or define('YII_DEBUG', true);
// registra o autoloader do Composer
require(__DIR__ . '/vendor/autoload.php');
require __DIR__ . '/vendor/autoload.php';
// 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
$config = require(__DIR__ . '/config/console.php');
$config = require __DIR__ . '/config/console.php';
$application = new yii\console\Application($config);
$exitCode = $application->run();

4
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.
* Documentação da API: seu código deve ser bem documentado para permitir que
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.
> Informação: Os seus comentários no código podem ser escritos no formato Markdown.
@ -524,4 +524,4 @@ e podem ser facilmente instalados como descrito na subseção [Usando Extensões
- [yiisoft/yii2-swiftmailer](https://github.com/yiisoft/yii2-swiftmailer):
fornece recursos para envio de e-mails baseados no [swiftmailer](http://swiftmailer.org/).
- [yiisoft/yii2-twig](https://github.com/yiisoft/yii2-twig):
fornece um motor de template baseado no [Twig](http://twig.sensiolabs.org/).
fornece um motor de template baseado no [Twig](http://twig.sensiolabs.org/).

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

@ -69,7 +69,7 @@ public function init()
{
parent::init();
// 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
// Instala o Composer autoloader
require(__DIR__ . '/../vendor/autoload.php');
require __DIR__ . '/../vendor/autoload.php';
// 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:
```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
```
@ -105,14 +105,14 @@ Segundo, altere o script de entrada da sua aplicação como a seguir,
```php
// incluir a classe Yii personalizado descrito abaixo
require(__DIR__ . '/../components/Yii.php');
require __DIR__ . '/../components/Yii.php';
// 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
// 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();
```
@ -120,10 +120,10 @@ Uma vez que ambos Yii 1 e Yii 2 possuem a classe `Yii`, você deve criar uma ver
```php
$yii2path = '/path/to/yii2';
require($yii2path . '/BaseYii.php'); // Yii 2.x
require $yii2path . '/BaseYii.php'; // Yii 2.x
$yii1path = '/path/to/yii1';
require($yii1path . '/YiiBase.php'); // Yii 1.x
require $yii1path . '/YiiBase.php'; // Yii 1.x
class Yii extends \yii\BaseYii
{

2
docs/guide-ru/README.md

@ -78,7 +78,7 @@ All Rights Reserved.
* [Построитель запросов](db-query-builder.md) - Запросы к базе данных через простой слой абстракции.
* [Active Record](db-active-record.md) - Получение объектов AR, работа с ними и определение связей.
* [Миграции](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)
* [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)

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

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

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

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

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

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

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

@ -97,7 +97,7 @@ Yii::configure($object, $config);
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
@ -142,7 +142,7 @@ $config = [
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'container' => [
'definitions' => [
'yii\widgets\LinkPager' => ['maxButtonCount' => 5]
@ -194,8 +194,8 @@ echo Menu::widget([
return [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
'components' => require(__DIR__ . '/components.php'),
'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php',
'components' => require __DIR__ . '/components.php',
];
```
@ -233,7 +233,7 @@ return [
Чтобы получить конфигурацию, хранящуюся в файле, достаточно подключить файл с помощью `require`:
```php
$config = require('path/to/web.php');
$config = require 'path/to/web.php';
(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()]]:
```php
@ -76,9 +76,9 @@ Yii::$container->invoke([$obj, 'doSomething'], ['param1' => 42]); // $something
Например,
```php
use yii\base\Object;
use yii\base\BaseObject;
class Foo extends Object
class Foo extends BaseObject
{
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>
@ -375,7 +375,7 @@ $engine = $container->get('app\components\SearchEngine', [$apiKey], ['type' => 1
```php
namespace app\models;
use yii\base\Object;
use yii\base\BaseObject;
use yii\db\Connection;
use yii\di\Container;
@ -384,7 +384,7 @@ interface UserFinderInterface
function findUser();
}
class UserFinder extends Object implements UserFinderInterface
class UserFinder extends BaseObject implements UserFinderInterface
{
public $db;
@ -399,7 +399,7 @@ class UserFinder extends Object implements UserFinderInterface
}
}
class UserLister extends Object
class UserLister extends BaseObject
{
public $finder;

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

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

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

@ -14,11 +14,11 @@ $object->label = trim($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
namespace app\components;
use yii\base\Object;
use yii\base\BaseObject;
class Foo extends Object
class Foo extends BaseObject
{
private $_label;
@ -78,7 +78,7 @@ $object->label = 'abc';
* Свойства могут быть объявлены только с помощью *не статичных* геттеров и/или сеттеров. Статичные методы не будут
обрабатываться подобным образом.
* Обычный вызов `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()` теперь необходимо вызывать только один раз — в методе `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');
```
В случае если вы хотите получить значение и тут же удалить его из массива, вы можете использовать метод `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
$array = ['type' => 'A', 'options' => [1, 2]];

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

@ -467,7 +467,7 @@ class LoginForm extends Model
HTML-форма построена с помощью следующего кода, содержит поля для ввода `username` и `password`.
Если вы отправите форму, не вводя ничего, вы получите сообщения об ошибках, требующих ввести данные.
Сообщения появиться сразу, без обращения к серверу.
Сообщения появятся сразу, без обращения к серверу.
```php
<?php $form = yii\widgets\ActiveForm::begin(); ?>
@ -598,7 +598,7 @@ JS;
```
> Note: метод `resolve()` должен быть вызван после того, как атрибут был проверен.
В противном случае основная проверки формы не будет завершена.
В противном случае основная проверка формы не будет завершена.
Для простоты работы с массивом `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\base\Object|Object]] является простым базовым классом, который позволяет использовать
В Yii 2.0 класс `CComponent` из версии 1.1 был разделён на два класса: [[yii\base\BaseObject]] и [[yii\base\Component]].
Класс [[yii\base\BaseObject|BaseObject]] является простым базовым классом, который позволяет использовать
[геттеры и сеттеры](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\Object|Object]] может определить конструктор (если нужно) как показано ниже. Это позволит конфигурировать
Класс [[yii\base\BaseObject|BaseObject]] предоставляет единый способ конфигурирования объектов. Любой дочерний класс
[[yii\base\BaseObject|BaseObject]] может определить конструктор (если нужно) как показано ниже. Это позволит конфигурировать
его универсально:
```php
class MyClass extends \yii\base\Object
class MyClass extends \yii\base\BaseObject
{
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]] значения, которое может быть одним из валидных
[HTTP-кодов состояния](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Например, чтобы показать, что запрос был
[HTTP-кодов состояния](https://tools.ietf.org/html/rfc2616#section-10). Например, чтобы показать, что запрос был
успешно обработан, вы можете установить значение кода состояния равным 200:
```php

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

@ -518,9 +518,9 @@ public function bootstrap($app)
namespace app\components;
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)

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

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

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

@ -18,11 +18,11 @@
и применит её к приложению, например:
```php
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require __DIR__ . '/../vendor/autoload.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();

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

@ -138,13 +138,82 @@ class FontAwesomeAsset extends AssetBundle
В выше указанном примере определён комплект ресурсов для [пакета "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/).
Если Вашим приложением или расширением используется такой пакет, то рекомендуется следовать следующим этапам для управления ресурсами библиотеки:
В мире PHP мы испольуем Composer для управления зависимостями, но он не позволяет устанавливать пакеты Bower и NPM, просто указывая их в `composer.json`.
1. Исправить файл `composer.json` Вашего приложения или расширения и включить пакет в список в раздел `require`. Следует использовать `bower-asset/PackageName` (для Bower пакетов) или `npm-asset/PackageName` (для NPM пакетов) для обращения к соответствующей библиотеке.
2. Создать класс комплекта ресурсов и перечислить JavaScript/CSS файлы, которые Вы планируете использовать в Вашем приложении или расширении. Вы должны задать свойство [[yii\web\AssetBundle::sourcePath|sourcePath]] как `@bower/PackageName` или `@npm/PackageName`.
Чтобы получить такую возможность, нужно немного настроить Composer. Существует два варианта:
_____
##### Используя репозиторий 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 пакет в директорию, соответствующую этим псевдонимам.
@ -514,7 +583,7 @@ return [
return [
'components' => [
'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');
// регистрация загрузчика классов Composer
require(__DIR__ . '/../vendor/autoload.php');
require __DIR__ . '/../vendor/autoload.php';
// подключение файла класса 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();
@ -65,13 +65,13 @@ $config = require(__DIR__ . '/../config/web.php');
defined('YII_DEBUG') or define('YII_DEBUG', true);
// регистрация загрузчика классов Composer
require(__DIR__ . '/vendor/autoload.php');
require __DIR__ . '/vendor/autoload.php';
// подключение файла класса 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);
$exitCode = $application->run();

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

Loading…
Cancel
Save