Browse Source

Merge branch 'master' into fix/db-pgsql-raw-sql-params

bizley-patch-1
Sartor 4 years ago committed by GitHub
parent
commit
395dc70468
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      .appveyor.yml
  2. 8
      .codeclimate.yml
  3. 5
      .github/FUNDING.yml
  4. 8
      .github/PULL_REQUEST_TEMPLATE.md
  5. 6
      .github/SECURITY.md
  6. 24
      .github/move.yml
  7. 113
      .github/workflows/build.yml
  8. 103
      .github/workflows/ci-mssql.yml
  9. 80
      .github/workflows/ci-mysql.yml
  10. 91
      .github/workflows/ci-oracle.yml
  11. 84
      .github/workflows/ci-pgsql.yml
  12. 2
      .gitignore
  13. 5
      .gitlab-ci.yml
  14. 22
      .scrutinizer.yml
  15. 232
      .travis.yml
  16. 4
      Dockerfile
  17. 10
      README.md
  18. 21
      ROADMAP.md
  19. 9
      build/controllers/DevController.php
  20. 27
      build/controllers/MimeTypeController.php
  21. 200
      build/controllers/PhpDocController.php
  22. 26
      build/controllers/ReleaseController.php
  23. 6
      build/controllers/TranslationController.php
  24. 18
      composer.json
  25. 886
      composer.lock
  26. 2
      contrib/completion/bash/yii
  27. 14
      docs/guide-ar/start-databases.md
  28. 10
      docs/guide-ar/start-forms.md
  29. 4
      docs/guide-ar/start-gii.md
  30. 4
      docs/guide-ar/start-hello.md
  31. 46
      docs/guide-ar/start-installation.md
  32. 6
      docs/guide-ar/start-prerequisites.md
  33. 2
      docs/guide-ar/start-workflow.md
  34. 6
      docs/guide-es/caching-data.md
  35. 2
      docs/guide-es/caching-http.md
  36. 2
      docs/guide-es/concept-autoloading.md
  37. 2
      docs/guide-es/concept-behaviors.md
  38. 2
      docs/guide-es/concept-di-container.md
  39. 2
      docs/guide-es/concept-events.md
  40. 6
      docs/guide-es/db-dao.md
  41. 2
      docs/guide-es/glossary.md
  42. 8
      docs/guide-es/helper-array.md
  43. 6
      docs/guide-es/helper-html.md
  44. 2
      docs/guide-es/input-file-upload.md
  45. 16
      docs/guide-es/intro-upgrade-from-v1.md
  46. 4
      docs/guide-es/intro-yii.md
  47. 2
      docs/guide-es/runtime-bootstrapping.md
  48. 2
      docs/guide-es/security-passwords.md
  49. 2
      docs/guide-es/start-databases.md
  50. 6
      docs/guide-es/start-installation.md
  51. 4
      docs/guide-es/start-prerequisites.md
  52. 2
      docs/guide-es/structure-applications.md
  53. 4
      docs/guide-es/structure-models.md
  54. 2
      docs/guide-es/structure-widgets.md
  55. 2
      docs/guide-es/tutorial-core-validators.md
  56. 6
      docs/guide-fr/caching-data.md
  57. 2
      docs/guide-fr/caching-http.md
  58. 4
      docs/guide-fr/concept-autoloading.md
  59. 2
      docs/guide-fr/concept-behaviors.md
  60. 2
      docs/guide-fr/concept-di-container.md
  61. 2
      docs/guide-fr/concept-events.md
  62. 8
      docs/guide-fr/db-active-record.md
  63. 8
      docs/guide-fr/db-dao.md
  64. 4
      docs/guide-fr/db-query-builder.md
  65. 10
      docs/guide-fr/helper-array.md
  66. 6
      docs/guide-fr/helper-html.md
  67. 2
      docs/guide-fr/input-file-upload.md
  68. 16
      docs/guide-fr/intro-upgrade-from-v1.md
  69. 2
      docs/guide-fr/intro-yii.md
  70. 6
      docs/guide-fr/output-data-widgets.md
  71. 8
      docs/guide-fr/output-formatting.md
  72. 4
      docs/guide-fr/runtime-bootstrapping.md
  73. 2
      docs/guide-fr/runtime-requests.md
  74. 2
      docs/guide-fr/security-passwords.md
  75. 2
      docs/guide-fr/start-databases.md
  76. 27
      docs/guide-fr/start-installation.md
  77. 2
      docs/guide-fr/start-prerequisites.md
  78. 2
      docs/guide-fr/structure-applications.md
  79. 2
      docs/guide-fr/structure-filters.md
  80. 2
      docs/guide-fr/structure-models.md
  81. 2
      docs/guide-fr/structure-widgets.md
  82. 10
      docs/guide-fr/tutorial-i18n.md
  83. 16
      docs/guide-id/intro-upgrade-from-v1.md
  84. 2
      docs/guide-id/intro-yii.md
  85. 2
      docs/guide-id/start-databases.md
  86. 4
      docs/guide-id/start-installation.md
  87. 2
      docs/guide-id/structure-applications.md
  88. 16
      docs/guide-it/intro-upgrade-from-v1.md
  89. 4
      docs/guide-it/intro-yii.md
  90. 4
      docs/guide-it/start-installation.md
  91. 8
      docs/guide-ja/caching-data.md
  92. 2
      docs/guide-ja/caching-http.md
  93. 4
      docs/guide-ja/concept-autoloading.md
  94. 2
      docs/guide-ja/concept-behaviors.md
  95. 62
      docs/guide-ja/concept-di-container.md
  96. 2
      docs/guide-ja/concept-events.md
  97. 8
      docs/guide-ja/db-active-record.md
  98. 26
      docs/guide-ja/db-dao.md
  99. 30
      docs/guide-ja/db-migrations.md
  100. 31
      docs/guide-ja/db-query-builder.md
  101. Some files were not shown because too many files have changed in this diff Show More

5
.appveyor.yml

@ -1,16 +1,11 @@
build: false
version: dev-{build}
shallow_clone: true
clone_folder: C:\projects\yii2
environment:
matrix:
- php_ver: 7.2.4
matrix:
allow_failures:
- php_ver: 7.2.4
cache:
- '%APPDATA%\Composer'
- '%LOCALAPPDATA%\Composer'

8
.codeclimate.yml

@ -22,3 +22,11 @@ exclude_paths:
- build/
- docs/
- framework/messages/
checks:
file-lines:
enabled: false
method-count:
enabled: false
method-lines:
enabled: false

5
.github/FUNDING.yml

@ -0,0 +1,5 @@
# These are supported funding model platforms
open_collective: yiisoft
github: [yiisoft]
tidelift: "packagist/yiisoft/yii2"

8
.github/PULL_REQUEST_TEMPLATE.md

@ -1,7 +1,7 @@
| Q | A
| ------------- | ---
| Is bugfix? | yes/no
| New feature? | yes/no
| Breaks BC? | yes/no
| Tests pass? | yes/no
| Is bugfix? | /❌
| New feature? | /❌
| Breaks BC? | /❌
| Tests pass? | /❌
| Fixed issues | comma-separated list of tickets # fixed by the PR, if any

6
.github/SECURITY.md

@ -0,0 +1,6 @@
# Security Policy
Please use the [security issue form](https://www.yiiframework.com/security) to report to us any security issue you find in Yii.
DO NOT use the issue tracker or discuss it in the public forum as it will cause more damage than help.
Please note that as a non-commercial OpenSource project we are not able to pay bounties at the moment.

24
.github/move.yml

@ -1,24 +0,0 @@
# Configuration for move-issues - https://github.com/dessant/move-issues
# Delete the command comment when it contains no other content
deleteCommand: true
# Close the source issue after moving
closeSourceIssue: true
# Lock the source issue after moving
lockSourceIssue: false
# Mention issue and comment authors
mentionAuthors: true
# Preserve mentions in the issue content
keepContentMentions: false
# Set custom aliases for targets
# aliases:
# r: repo
# or: owner/repo
# Repository to extend settings from
# _extends: repo

113
.github/workflows/build.yml

@ -0,0 +1,113 @@
name: build
on: [push, pull_request]
env:
DEFAULT_COMPOSER_FLAGS: "--prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi"
PHPUNIT_EXCLUDE_GROUP: mssql,oci,wincache,xcache,zenddata,cubrid
XDEBUG_MODE: coverage, develop
jobs:
phpunit:
name: PHP ${{ matrix.php }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
services:
mysql:
image: mysql:5.7
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: yiitest
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
postgres:
image: postgres:9.6
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: yiitest
ports:
- 5432:5432
options: --name=postgres --health-cmd="pg_isready" --health-interval=10s --health-timeout=5s --health-retries=3
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
php: ['5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
steps:
- name: Generate french locale
run: sudo locale-gen fr_FR.UTF-8
- name: Checkout
uses: actions/checkout@v2
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
tools: pecl
extensions: apc, curl, dom, imagick, intl, mbstring, mcrypt, memcached, mysql, pdo, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, sqlite
ini-values: date.timezone='UTC', session.save_path="${{ runner.temp }}"
- name: Install Memcached
uses: niden/actions-memcached@v7
- name: Get composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache composer dependencies
uses: actions/cache@v1
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
- name: Install dependencies
run: composer update $DEFAULT_COMPOSER_FLAGS
- name: PHP Unit tests for PHP 7.1
run: vendor/bin/phpunit --verbose --coverage-clover=coverage.clover --exclude-group $PHPUNIT_EXCLUDE_GROUP --colors=always
if: matrix.php == '7.1'
- name: PHP Unit tests for PHP >= 7.2
run: vendor/bin/phpunit --verbose --exclude-group $PHPUNIT_EXCLUDE_GROUP --colors=always
env:
PHPUNIT_EXCLUDE_GROUP: oci,wincache,xcache,zenddata,cubrid
if: matrix.php >= '7.2'
- name: PHP Unit tests for PHP <= 7.0
run: vendor/bin/phpunit --verbose --exclude-group $PHPUNIT_EXCLUDE_GROUP --colors=always
if: matrix.php <= '7.0'
- name: Code coverage
run: |
wget https://scrutinizer-ci.com/ocular.phar
php ocular.phar code-coverage:upload --format=php-clover coverage.clover
if: matrix.php == '7.1'
continue-on-error: true # if is fork
npm:
name: NPM 6 on ubuntu-latest
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: 7.2
ini-values: session.save_path=${{ runner.temp }}
- name: Get composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache composer dependencies
uses: actions/cache@v1
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
- name: Install dependencies
run: composer update $DEFAULT_COMPOSER_FLAGS
- name: Install node.js
uses: actions/setup-node@v1
with:
node-version: 6
- name: Tests
run: |
npm install
npm test
# env:
# CI: true

103
.github/workflows/ci-mssql.yml

@ -0,0 +1,103 @@
on:
- pull_request
- push
name: ci-mssql
jobs:
tests:
name: PHP ${{ matrix.php }}-mssql-${{ matrix.mssql }}
env:
key: cache
runs-on: ubuntu-latest
strategy:
matrix:
include:
- php: '7.0'
extensions: pdo, pdo_sqlsrv-5.8.1
mssql: 'server:2017-latest'
- php: '7.1'
extensions: pdo, pdo_sqlsrv-5.8.1
mssql: 'server:2017-latest'
- php: '7.2'
extensions: pdo, pdo_sqlsrv-5.8.1
mssql: 'server:2017-latest'
- php: '7.3'
extensions: pdo, pdo_sqlsrv-5.8.1
mssql: 'server:2017-latest'
- php: '7.4'
extensions: pdo, pdo_sqlsrv
mssql: 'server:2017-latest'
- php: '7.4'
extensions: pdo, pdo_sqlsrv
mssql: 'server:2019-latest'
- php: '8.0'
extensions: pdo, pdo_sqlsrv
mssql: 'server:2017-latest'
- php: '8.0'
extensions: pdo, pdo_sqlsrv
mssql: 'server:2019-latest'
services:
mssql:
image: mcr.microsoft.com/mssql/${{ matrix.mssql }}
env:
SA_PASSWORD: YourStrong!Passw0rd
ACCEPT_EULA: Y
MSSQL_PID: Developer
ports:
- 1433:1433
options: --name=mssql --health-cmd="/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- name: Checkout
uses: actions/checkout@v2.3.4
- name: Create MS SQL Database
run: docker exec -i mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest'
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: ${{ matrix.extensions }}
ini-values: date.timezone='UTC'
tools: composer:v2, pecl
- name: Determine composer cache directory on Linux
run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV
- name: Cache dependencies installed with composer
uses: actions/cache@v2
with:
path: ${{ env.COMPOSER_CACHE_DIR }}
key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }}
restore-keys: |
php${{ matrix.php }}-composer-
- name: Update composer
run: composer self-update
- name: Install dependencies with composer
run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi
- name: Install dependencies with composer php 8.0
if: matrix.php == '8.0'
run: composer update --ignore-platform-reqs --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi
- name: PHP Unit tests for PHP 7.1
run: vendor/bin/phpunit --coverage-clover=coverage.clover --group mssql --colors=always
if: matrix.php == '7.1'
- name: Run tests with phpunit without coverage
run: vendor/bin/phpunit --group mssql --colors=always
- name: Code coverage
run: |
wget https://scrutinizer-ci.com/ocular.phar
php ocular.phar code-coverage:upload --format=php-clover coverage.clover
if: matrix.php == '7.1'
continue-on-error: true # if is fork

80
.github/workflows/ci-mysql.yml

@ -0,0 +1,80 @@
on:
- pull_request
- push
name: ci-mysql
jobs:
tests:
name: PHP ${{ matrix.php-version }}-mysql-${{ matrix.mysql-version }}
env:
extensions: curl, intl, pdo, pdo_mysql
key: cache-v1
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
php-version:
- "7.4"
mysql-version:
- "latest"
services:
mysql:
image: mysql:${{ matrix.mysql-version }}
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: yiitest
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup cache environment
id: cache-env
uses: shivammathur/cache-extensions@v1
with:
php-version: ${{ matrix.php-version }}
extensions: ${{ env.extensions }}
key: ${{ env.key }}
- name: Cache extensions
uses: actions/cache@v1
with:
path: ${{ steps.cache-env.outputs.dir }}
key: ${{ steps.cache-env.outputs.key }}
restore-keys: ${{ steps.cache-env.outputs.key }}
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
extensions: ${{ env.extensions }}
ini-values: date.timezone='UTC'
coverage: pcov
- name: Determine composer cache directory
if: matrix.os == 'ubuntu-latest'
run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV
- name: Cache dependencies installed with composer
uses: actions/cache@v1
with:
path: ${{ env.COMPOSER_CACHE_DIR }}
key: php${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('**/composer.json') }}
restore-keys: |
php${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-
- name: Install dependencies with composer
run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi
- name: Run mysql tests with phpunit
run: vendor/bin/phpunit --group mysql --colors=always

91
.github/workflows/ci-oracle.yml

@ -0,0 +1,91 @@
on:
- pull_request
- push
name: ci-oracle
jobs:
tests:
name: PHP ${{ matrix.php }}-${{ matrix.os }}
env:
extensions: oci8, pdo, pdo_oci
key: cache-v1
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
php:
- "7.4"
services:
oci:
image: wnameless/oracle-xe-11g-r2:latest
ports:
- 1521:1521
options: --name=oci
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup cache environment
id: cache-env
uses: shivammathur/cache-extensions@v1
with:
php-version: ${{ matrix.php }}
extensions: ${{ env.extensions }}
key: ${{ env.key }}
- name: Cache extensions
uses: actions/cache@v1
with:
path: ${{ steps.cache-env.outputs.dir }}
key: ${{ steps.cache-env.outputs.key }}
restore-keys: ${{ steps.cache-env.outputs.key }}
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: ${{ env.extensions }}
ini-values: date.timezone='UTC'
coverage: pcov
tools: composer:v2, pecl
- name: Determine composer cache directory
run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV
- name: Cache dependencies installed with composer
uses: actions/cache@v2
with:
path: ${{ env.COMPOSER_CACHE_DIR }}
key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }}
restore-keys: |
php${{ matrix.php }}-composer-
- name: Install dependencies with composer php 7.4
if: matrix.php == '7.4'
run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi
- name: Install dependencies with composer php 8.0
if: matrix.php == '8.0'
run: composer update --ignore-platform-reqs --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi
- name: PHP Unit tests for PHP 7.4
run: vendor/bin/phpunit --coverage-clover=coverage.clover --group oci --colors=always
if: matrix.php == '7.4'
- name: Run tests with phpunit without coverage
run: vendor/bin/phpunit --group oci --colors=always
- name: Code coverage
run: |
wget https://scrutinizer-ci.com/ocular.phar
php ocular.phar code-coverage:upload --format=php-clover coverage.clover
if: matrix.php == '7.4'
continue-on-error: true # if is fork

84
.github/workflows/ci-pgsql.yml

@ -0,0 +1,84 @@
on:
- pull_request
- push
name: ci-pgsql
jobs:
tests:
name: PHP ${{ matrix.php-version }}-pgsql-${{ matrix.pgsql-version }}
env:
extensions: curl, intl, pdo, pdo_pgsql
key: cache-v1
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
php-version:
- "7.4"
pgsql-version:
- "10"
- "11"
- "12"
- "13"
services:
postgres:
image: postgres:${{ matrix.pgsql-version }}
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: yiitest
ports:
- 5432:5432
options: --name=postgres --health-cmd="pg_isready" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup cache environment
id: cache-env
uses: shivammathur/cache-extensions@v1
with:
php-version: ${{ matrix.php-version }}
extensions: ${{ env.extensions }}
key: ${{ env.key }}
- name: Cache extensions
uses: actions/cache@v1
with:
path: ${{ steps.cache-env.outputs.dir }}
key: ${{ steps.cache-env.outputs.key }}
restore-keys: ${{ steps.cache-env.outputs.key }}
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
extensions: ${{ env.extensions }}
ini-values: date.timezone='UTC'
coverage: pcov
- name: Determine composer cache directory
if: matrix.os == 'ubuntu-latest'
run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV
- name: Cache dependencies installed with composer
uses: actions/cache@v1
with:
path: ${{ env.COMPOSER_CACHE_DIR }}
key: php${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('**/composer.json') }}
restore-keys: |
php${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-
- name: Install dependencies with composer
run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi
- name: Run pgsql tests with phpunit
run: vendor/bin/phpunit --group pgsql --colors=always

2
.gitignore vendored

@ -1,5 +1,6 @@
# phpstorm project files
.idea
*.iml
# netbeans project files
nbproject
@ -46,3 +47,4 @@ phpunit.phar
# NPM packages
/node_modules
.env
package-lock.json

5
.gitlab-ci.yml

@ -4,13 +4,12 @@ services:
- docker:dind
variables:
DOCKER_YII2_PHP_IMAGE: yiisoftware/yii2-php:7.1-apache
DOCKER_YII2_PHP_IMAGE: yiisoftware/yii2-php:7.4-apache
DOCKER_MYSQL_IMAGE: percona:5.7
DOCKER_POSTGRES_IMAGE: postgres:9.3
before_script:
- apk add --no-cache python py2-pip git
- pip install --no-cache-dir docker-compose==1.16.0
- apk add --no-cache git curl docker-compose
- docker info
- cd tests

22
.scrutinizer.yml

@ -1,10 +1,20 @@
imports:
- php
build:
nodes:
analysis:
tests:
override:
- php-scrutinizer-run
filter:
excluded_paths:
- "tests/"
- "build/"
- "docs/"
- "framework/messages/"
dependency_paths:
- "vendor/"
tools:
external_code_coverage:
runs: 3
timeout: 2100 # Timeout in seconds.
# disable copy paste detector and similarity analyzer as they have no real value
# and a huge bunch of false-positives
php_sim: false
php_cpd: false

232
.travis.yml

@ -1,232 +0,0 @@
#
# Travis Setup
#
# use ubuntu trusty for newer version of nodejs, used for JS testing
dist: trusty
# faster builds on new travis setup not using sudo
# temporary disable, see https://github.com/travis-ci/travis-ci/issues/6842
#sudo: false
sudo: required
group: edge
# build only on master branches
# commented as this prevents people from running builds on their forks:
# https://github.com/yiisoft/yii2/commit/bd87be990fa238c6d5e326d0a171f38d02dc253a
#branches:
# only:
# - master
# - 2.1
#
# Test Matrix
#
language: php
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
- TRAVIS_SECOND_USER=travis_two
services:
- memcached
- mysql
- postgresql
# cache vendor dirs
cache:
directories:
- vendor
- $HOME/.composer/cache
- $HOME/.npm
# try running against postgres 9.6
addons:
postgresql: "9.6"
apt:
sources:
- mysql-5.7-trusty
packages:
- mysql-server
code_climate:
repo_token: 2935307212620b0e2228ab67eadd92c9f5501ddb60549d0d86007a354d56915b
matrix:
fast_finish: true
include:
- php: 7.2
# run tests coverage on PHP 7.1
- php: 7.1
env: TASK_TESTS_COVERAGE=1
- php: 7.0
- php: 5.6
- php: 5.5
- php: 5.4
# Test against HHVM 3.21 LTS version by using trusty
- php: hhvm-3.21
sudo: true
addons:
code_climate:
repo_token: 2935307212620b0e2228ab67eadd92c9f5501ddb60549d0d86007a354d56915b
postgresql: "9.6"
apt:
sources:
- mysql-5.7-trusty
packages:
- mysql-server
services:
- mysql
- postgresql
# test against the latest pre 3.26 HHVM version by using a newer image.
# @see https://github.com/facebook/hhvm/issues/8192
- php: hhvm-3.24
sudo: true
addons:
code_climate:
repo_token: 2935307212620b0e2228ab67eadd92c9f5501ddb60549d0d86007a354d56915b
postgresql: "9.6"
apt:
sources:
- mysql-5.7-trusty
packages:
- mysql-server
services:
- mysql
- postgresql
- php: nightly
services:
- mysql
- postgresql
# have a separate branch for javascript tests
- language: node_js
node_js: 6
env: TASK_TESTS_PHP=0 TASK_TESTS_JS=1
# overwrite services used for PHP tests
services:
allow_failures:
- php: nightly
- php: hhvm-3.21
- php: hhvm-3.24
install:
- |
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"
- travis_retry composer install $DEFAULT_COMPOSER_FLAGS
# setup PHP extension
- |
if [[ $TASK_TESTS_PHP == 1 && $TRAVIS_PHP_VERSION != nightly ]]; 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
# Needed for FileCacheTest
- sudo useradd $TRAVIS_SECOND_USER --gid $(id -g) -M
before_script:
#
# Disable:
# 1) the HHVM JIT for faster testing;
# 2) the session GC for testing stability.
#
# The second allows to avoid accidental unpredictable failings with message:
# `ps_files_cleanup_dir: opendir(/var/lib/hhvm/sessions) failed: Permission denied (13)`
#
- if [[ $TRAVIS_PHP_VERSION = hhv* ]]; then
echo 'hhvm.jit = 0' >> /etc/hhvm/php.ini;
echo 'session.gc_probability = 0' >> /etc/hhvm/php.ini;
fi
# show some versions and env information
- 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
sudo mysql_upgrade
fi
- |
if [ $TASK_TESTS_JS == 1 ]; then
node --version
npm --version
fi
# initialize databases
- |
if [ $TASK_TESTS_PHP == 1 ]; then
travis_retry mysql -e 'CREATE DATABASE `yiitest`;';
mysql -e "SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';";
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
# Disable DEPRECATE messages during PHPUnit initialization on PHP 7.2. To fix them, PHPUnit should be updated to 6.*
# For Yii2 tests, messages will be enabled by tests/bootstrap.php
- |
if [[ $TRAVIS_PHP_VERSION == 7.2 || $TRAVIS_PHP_VERSION = nightly ]]; then
echo 'Disabled DEPRECATED notifications for PHP >= 7.2';
echo 'error_reporting = E_ALL & ~E_DEPRECATED' >> /tmp/php-config.ini;
phpenv config-add /tmp/php-config.ini;
fi
script:
# 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
Dockerfile

@ -4,6 +4,10 @@ FROM ${DOCKER_YII2_PHP_IMAGE}
# Project source-code
WORKDIR /project
ADD composer.* /project/
# Apply testing patches
ADD tests/phpunit_mock_objects.patch /project/tests/phpunit_mock_objects.patch
ADD tests/phpunit_getopt.patch /project/tests/phpunit_getopt.patch
# Install packgaes
RUN /usr/local/bin/composer install --prefer-dist
ADD ./ /project
ENV PATH /project/vendor/bin:${PATH}

10
README.md

@ -11,10 +11,9 @@ The framework is easy to adjust to meet your needs, because Yii has been designe
[![Latest Stable Version](https://img.shields.io/packagist/v/yiisoft/yii2.svg)](https://packagist.org/packages/yiisoft/yii2)
[![Total Downloads](https://img.shields.io/packagist/dt/yiisoft/yii2.svg)](https://packagist.org/packages/yiisoft/yii2)
[![Build Status](https://img.shields.io/travis/yiisoft/yii2.svg)](https://travis-ci.org/yiisoft/yii2)
[![Build Status](https://github.com/yiisoft/yii2/workflows/build/badge.svg)](https://github.com/yiisoft/yii2/actions)
[![Code Coverage](https://scrutinizer-ci.com/g/yiisoft/yii2/badges/coverage.png?s=31d80f1036099e9d6a3e4d7738f6b000b3c3d10e)](https://scrutinizer-ci.com/g/yiisoft/yii2/)
[![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/yiisoft/yii2/badges/quality-score.png?s=b1074a1ff6d0b214d54fa5ab7abbb90fc092471d)](https://scrutinizer-ci.com/g/yiisoft/yii2/)
[![Code Climate](https://img.shields.io/codeclimate/github/yiisoft/yii2.svg)](https://codeclimate.com/github/yiisoft/yii2)
Installation
------------
@ -55,6 +54,7 @@ You may join us and:
- [Translate documentation or messages](docs/internals/translation-workflow.md)
- [Give us feedback or start a design discussion](https://www.yiiframework.com/forum/index.php/forum/42-general-discussions-for-yii-20/)
- [Contribute to the core code or fix bugs](docs/internals/git-workflow.md)
- [Become a sponsor](#sponsoring)
### Reporting Security issues
@ -91,3 +91,9 @@ If your code is hosted at GitHub, you can place the following in your README.md
```
[![Yii2](https://img.shields.io/badge/Powered_by-Yii_Framework-green.svg?style=flat)](https://www.yiiframework.com/)
```
### Sponsoring
Support this project by becoming a sponsor or a backer.
[![OpenCollective sponsors](https://opencollective.com/yiisoft/sponsors/badge.svg)](https://opencollective.com/yiisoft) [![OpenCollective backers](https://opencollective.com/yiisoft/backers/badge.svg)](https://opencollective.com/yiisoft)

21
ROADMAP.md

@ -1,23 +1,18 @@
Framework development for versions 3.0 and further moved to [Yii Framework Core repository](https://github.com/yiisoft/yii-core).
> Roadmap for Yii 3.0 and further was moved to [yiisoft/docs](https://github.com/yiisoft/docs/blob/master/003-roadmap.md).
Please see ROADMAP there:
https://github.com/yiisoft/yii-core/blob/master/ROADMAP.md
- Enhancements are not accepted for framework version 2.0.
- Enhancements are accepted for 2.0 extensions.
- Bug and security fixes are expected.
- Pull requests and maintainers are very welcome.
There are no planned changes for Yii 2.0 cause while it is supported it is not developed anymore.
Bug and security fixes are expected. New features and enhancements are not accepted.
Pull requests and maintainers are very welcome.
Above would stand as it is [for two years after Yii 3.0 release](https://www.yiiframework.com/release-cycle).
## Additional releases
We can tag additional releases in case someone will take the role of release manager. Otherwise we'll focus on 3.0.
While we focus on 3.0, we tag 2.0 releases and extension releases [about once in a week](https://www.yiiframework.com/release-cycle).
## 2.0.17 (4th quarter of 2018)
- Bugfixes.
- Announce bugfixes EOL (a year more?).
- Security fixes only.
## 2.0.16 (3rd quarter of 2018)
## 2.0.16+ (since 2019 till 3.0 release + 2 years)
- Bugfixes.

9
build/controllers/DevController.php

@ -51,6 +51,7 @@ class DevController extends Controller
'apidoc' => 'git@github.com:yiisoft/yii2-apidoc.git',
'authclient' => 'git@github.com:yiisoft/yii2-authclient.git',
'bootstrap' => 'git@github.com:yiisoft/yii2-bootstrap.git',
'bootstrap4' => 'git@github.com:yiisoft/yii2-bootstrap4.git',
'codeception' => 'git@github.com:yiisoft/yii2-codeception.git',
'composer' => 'git@github.com:yiisoft/yii2-composer.git',
'debug' => 'git@github.com:yiisoft/yii2-debug.git',
@ -164,7 +165,11 @@ class DevController extends Controller
}
$this->stdout("cloning application repo '$app' from '$repo'...\n", Console::BOLD);
passthru('git clone ' . escapeshellarg($repo) . ' ' . $appDir);
passthru('git clone ' . escapeshellarg($repo) . ' ' . $appDir, $returnVar);
if ($returnVar !== 0) {
$this->stdout("Error occurred while cloning repository.\n", Console::BOLD, Console::FG_RED);
return 1;
}
$this->stdout("done.\n", Console::BOLD, Console::FG_GREEN);
}
@ -330,7 +335,7 @@ class DevController extends Controller
continue;
}
// ignore hidden directories
if ($file[0] === '.') {
if (strpos($file, '.') === 0) {
continue;
}
if (is_dir("$dir/$file")) {

27
build/controllers/MimeTypeController.php

@ -31,6 +31,24 @@ class MimeTypeController extends Controller
*/
private $aliases = [
'text/xml' => 'application/xml',
'image/svg' => 'image/svg+xml',
'image/x-bmp' => 'image/bmp',
'image/x-bitmap' => 'image/bmp',
'image/x-xbitmap' => 'image/bmp',
'image/x-win-bitmap' => 'image/bmp',
'image/x-windows-bmp' => 'image/bmp',
'image/ms-bmp' => 'image/bmp',
'image/x-ms-bmp' => 'image/bmp',
'application/bmp' => 'image/bmp',
'application/x-bmp' => 'image/bmp',
'application/x-win-bitmap' => 'image/bmp',
];
/**
* @var array MIME types to add to the ones parsed from Apache files
*/
private $additionalMimeTypes = [
'mjs' => 'text/javascript',
];
/**
@ -47,9 +65,9 @@ class MimeTypeController extends Controller
$aliasesOutFile = Yii::getAlias('@yii/helpers/mimeAliases.php');
}
$this->stdout('downloading mime-type file from apache httpd repository...');
$this->stdout('Downloading mime-type file from apache httpd repository...');
if ($apacheMimeTypesFileContent = file_get_contents('http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/conf/mime.types?view=co')) {
$this->stdout("done.\n", Console::FG_GREEN);
$this->stdout("Done.\n", Console::FG_GREEN);
$this->generateMimeTypesFile($outFile, $apacheMimeTypesFileContent);
$this->generateMimeAliasesFile($aliasesOutFile);
} else {
@ -63,11 +81,11 @@ class MimeTypeController extends Controller
*/
private function generateMimeTypesFile($outFile, $content)
{
$this->stdout("generating file $outFile...");
$this->stdout("Generating file $outFile...");
$mimeMap = [];
foreach (explode("\n", $content) as $line) {
$line = trim($line);
if (empty($line) || $line[0] === '#') { // skip comments and empty lines
if (empty($line) || strpos($line, '#') === 0) { // skip comments and empty lines
continue;
}
$parts = preg_split('/\s+/', $line);
@ -78,6 +96,7 @@ class MimeTypeController extends Controller
}
}
}
$mimeMap = array_merge($mimeMap, $this->additionalMimeTypes);
ksort($mimeMap);
$array = VarDumper::export($mimeMap);
$content = <<<EOD

200
build/controllers/PhpDocController.php

@ -329,16 +329,16 @@ class PhpDocController extends Controller
$tag = false;
} elseif ($docBlock) {
$line = ltrim($line);
if (isset($line[0]) && $line[0] === '*') {
if (strpos($line, '*') === 0) {
$line = substr($line, 1);
}
if (isset($line[0]) && $line[0] === ' ') {
if (strpos($line, ' ') === 0) {
$line = substr($line, 1);
}
$docLine = str_replace("\t", ' ', rtrim($line));
if (empty($docLine)) {
$listIndent = '';
} elseif ($docLine[0] === '@') {
} elseif (strpos($docLine, '@') === 0) {
$listIndent = '';
$codeBlock = false;
$tag = true;
@ -453,15 +453,15 @@ class PhpDocController extends Controller
$endofPrivate = $i;
$property = 'Private';
$level = 0;
} elseif (substr($line, 0, 6) === 'const ') {
} elseif (strpos($line, 'const ') === 0) {
$endofConst = $i;
$property = false;
} elseif (substr($line, 0, 4) === 'use ') {
} elseif (strpos($line, 'use ') === 0) {
$endofUse = $i;
$property = false;
} elseif (!empty($line) && $line[0] === '*') {
} elseif (strpos($line, '*') === 0) {
$property = false;
} elseif (!empty($line) && $line[0] !== '*' && strpos($line, 'function ') !== false || $line === '}') {
} elseif (strpos($line, '*') !== 0 && strpos($line, 'function ') !== false || $line === '}') {
break;
}
@ -504,18 +504,26 @@ class PhpDocController extends Controller
protected function updateClassPropertyDocs($file, $className, $propertyDoc)
{
if ($this->shouldSkipClass($className)) {
$this->stderr("[INFO] Skipping class $className.\n", Console::FG_BLUE, Console::BOLD);
return false;
}
try {
$ref = new \ReflectionClass($className);
} catch (\Exception $e) {
$this->stderr("[ERR] Unable to create ReflectionClass for class '$className': " . $e->getMessage() . "\n", Console::FG_RED);
return false;
} catch (\Error $e) {
$this->stderr("[ERR] Unable to create ReflectionClass for class '$className': " . $e->getMessage() . "\n", Console::FG_RED);
return false;
}
if ($ref->getFileName() != $file) {
$this->stderr("[ERR] Unable to create ReflectionClass for class: $className loaded class is not from file: $file\n", Console::FG_RED);
return false;
}
if (!$ref->isSubclassOf('yii\base\Object') && $className != 'yii\base\Object' && !$ref->isSubclassOf('yii\base\BaseObject') && $className != 'yii\base\BaseObject') {
if ($this->isBaseObject($className, $ref)) {
$this->stderr("[INFO] Skipping class $className as it is not a subclass of yii\\base\\BaseObject.\n", Console::FG_BLUE, Console::BOLD);
return false;
}
@ -612,9 +620,9 @@ class PhpDocController extends Controller
$propertyPosition = false;
foreach ($lines as $i => $line) {
$line = trim($line);
if (strncmp($line, '* @property ', 12) === 0) {
if (strncmp($line, '* @property', 11) === 0) {
$propertyPart = true;
} elseif ($propertyPart && $line == '*') {
} elseif ($propertyPart && $line === '*') {
$propertyPosition = $i;
$propertyPart = false;
}
@ -627,7 +635,7 @@ class PhpDocController extends Controller
}
}
// if no properties or other tags where present add properties at the end
// if no properties or other tags were present add properties at the end
if ($propertyPosition === false) {
$propertyPosition = \count($lines) - 2;
}
@ -649,8 +657,12 @@ class PhpDocController extends Controller
$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'];
$classes = $this->match('#\n(?:abstract )?class (?<name>\w+)( extends .+)?( implements .+)?\n\{(?<content>.*)\n\}(\n|$)#', $file);
if ($namespace === false) {
$namespace = '\\';
} else {
$namespace = $namespace['name'];
}
$classes = $this->match('#\n(?:abstract )?(?:final )?class (?<name>\w+)( extends .+)?( implements .+)?\n\{(?<content>.*)\n\}(\n|$)#', $file);
if (\count($classes) > 1) {
$this->stderr("[ERR] There should be only one class in a file: $fileName\n", Console::FG_RED);
@ -661,13 +673,17 @@ class PhpDocController extends Controller
$interfaces = $this->match('#\ninterface (?<name>\w+)( extends .+)?\n\{(?<content>.*)\n\}(\n|$)#', $file);
if (\count($interfaces) == 1) {
return false;
} elseif (\count($interfaces) > 1) {
}
if (\count($interfaces) > 1) {
$this->stderr("[ERR] There should be only one interface in a file: $fileName\n", Console::FG_RED);
} else {
$traits = $this->match('#\ntrait (?<name>\w+)\n\{(?<content>.*)\n\}(\n|$)#', $file);
if (\count($traits) == 1) {
return false;
} elseif (\count($traits) > 1) {
}
if (\count($traits) > 1) {
$this->stderr("[ERR] There should be only one class/trait/interface in a file: $fileName\n", Console::FG_RED);
} else {
$this->stderr("[ERR] No class in file: $fileName\n", Console::FG_RED);
@ -706,63 +722,45 @@ class PhpDocController extends Controller
];
}
if (\count($props) === 0) {
continue;
}
ksort($props);
if (\count($props) > 0) {
$phpdoc .= " *\n";
foreach ($props as $propName => &$prop) {
$docline = ' * @';
$docline .= 'property'; // Do not use property-read and property-write as few IDEs support complex syntax.
$note = '';
if (isset($prop['get'], $prop['set'])) {
if ($prop['get']['type'] != $prop['set']['type']) {
$note = ' Note that the type of this property differs in getter and setter.'
. ' See [[get' . ucfirst($propName) . '()]] and [[set' . ucfirst($propName) . '()]] for details.';
}
} elseif (isset($prop['get'])) {
// check if parent class has setter defined
$c = $className;
$parentSetter = false;
while ($parent = get_parent_class($c)) {
if (method_exists($parent, 'set' . ucfirst($propName))) {
$parentSetter = true;
break;
}
$c = $parent;
}
if (!$parentSetter) {
$note = ' This property is read-only.';
//$docline .= '-read';
}
} elseif (isset($prop['set'])) {
// check if parent class has getter defined
$c = $className;
$parentGetter = false;
while ($parent = get_parent_class($c)) {
if (method_exists($parent, 'set' . ucfirst($propName))) {
$parentGetter = true;
break;
}
$c = $parent;
}
if (!$parentGetter) {
$note = ' This property is write-only.';
//$docline .= '-write';
}
} else {
continue;
$phpdoc .= " *\n";
foreach ($props as $propName => &$prop) {
$docLine = ' * @property';
$note = '';
if (isset($prop['get'], $prop['set'])) {
if ($prop['get']['type'] != $prop['set']['type']) {
$note = ' Note that the type of this property differs in getter and setter.'
. ' See [[get' . ucfirst($propName) . '()]]'
. ' and [[set' . ucfirst($propName) . '()]] for details.';
}
$docline .= ' ' . $this->getPropParam($prop, 'type') . " $$propName ";
$comment = explode("\n", $this->getPropParam($prop, 'comment') . $note);
foreach ($comment as &$cline) {
$cline = ltrim($cline, '* ');
} elseif (isset($prop['get'])) {
if (!$this->hasSetterInParents($className, $propName)) {
$note = ' This property is read-only.';
$docLine .= '-read';
}
$docline = wordwrap($docline . implode(' ', $comment), 110, "\n * ") . "\n";
$phpdoc .= $docline;
} elseif (isset($prop['set'])) {
if (!$this->hasGetterInParents($className, $propName)) {
$note = ' This property is write-only.';
$docLine .= '-write';
}
} else {
continue;
}
$phpdoc .= " *\n";
$docLine .= ' ' . $this->getPropParam($prop, 'type') . " $$propName ";
$comment = explode("\n", $this->getPropParam($prop, 'comment') . $note);
foreach ($comment as &$cline) {
$cline = ltrim($cline, '* ');
}
$docLine = wordwrap($docLine . implode(' ', $comment), 110, "\n * ") . "\n";
$phpdoc .= $docLine;
}
$phpdoc .= " *\n";
}
return [$className, $phpdoc];
@ -799,7 +797,7 @@ class PhpDocController extends Controller
return '';
}
return strtoupper(substr($str, 0, 1)) . substr($str, 1) . ($str[\strlen($str) - 1] != '.' ? '.' : '');
return strtoupper(substr($str, 0, 1)) . substr($str, 1) . ($str[\strlen($str) - 1] !== '.' ? '.' : '');
}
protected function getPropParam($prop, $param)
@ -819,4 +817,72 @@ class PhpDocController extends Controller
}
return hash('sha256', $string);
}
/**
* @param string $className
* @param string $propName
* @return bool
*/
protected function hasGetterInParents($className, $propName)
{
$class = $className;
try {
while ($parent = get_parent_class($class)) {
if (method_exists($parent, 'get' . ucfirst($propName))) {
return true;
}
$class = $parent;
}
} catch (\Throwable $t) {
$this->stderr("[ERR] Error when getting parents for $className\n", Console::FG_RED);
return false;
}
return false;
}
/**
* @param string $className
* @param string $propName
* @return bool
*/
protected function hasSetterInParents($className, $propName)
{
$class = $className;
try {
while ($parent = get_parent_class($class)) {
if (method_exists($parent, 'set' . ucfirst($propName))) {
return true;
}
$class = $parent;
}
} catch (\Throwable $t) {
$this->stderr("[ERR] Error when getting parents for $className\n", Console::FG_RED);
return false;
}
return false;
}
/**
* @param string $className
* @param \ReflectionClass $ref
* @return bool
*/
protected function isBaseObject($className, \ReflectionClass $ref)
{
$isDepreceatedObject = false;
if (PHP_VERSION_ID <= 70100) {
$isDepreceatedObject = $ref->isSubclassOf('yii\base\Object') || $className === 'yii\base\Object';
}
return !$isDepreceatedObject && !$ref->isSubclassOf('yii\base\BaseObject') && $className !== 'yii\base\BaseObject';
}
private function shouldSkipClass($className)
{
if (PHP_VERSION_ID > 70100) {
return $className === 'yii\base\Object';
}
return false;
}
}

26
build/controllers/ReleaseController.php

@ -19,7 +19,7 @@ use yii\helpers\FileHelper;
*
* Get a version overview:
*
* ./build release/info
* ./build/build release/info
*
* run it with `--update` to fetch tags for all repos:
*
@ -27,13 +27,13 @@ use yii\helpers\FileHelper;
*
* Make a framework release (apps are always in line with framework):
*
* ./build release framework
* ./build release app-basic
* ./build release app-advanced
* ./build/build release framework
* ./build/build release app-basic
* ./build/build release app-advanced
*
* Make an extension release (e.g. for redis):
*
* ./build release redis
* ./build/build release redis
*
* Be sure to check the help info for individual sub-commands:
*
@ -223,7 +223,7 @@ class ReleaseController extends Controller
}
$this->stdout("- other issues with code changes?\n\n git diff -w $gitVersion.. ${gitDir}\n\n");
$travisUrl = reset($what) === 'framework' ? '' : '-' . reset($what);
$this->stdout("- are unit tests passing on travis? https://travis-ci.org/yiisoft/yii2$travisUrl/builds\n");
$this->stdout("- are unit tests passing on travis? https://travis-ci.com/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);
$this->stdout("\n");
@ -535,7 +535,9 @@ class ReleaseController extends Controller
$this->stdout("- wait for your changes to be propagated to the repo and create a tag $version on https://github.com/yiisoft/yii2-framework\n\n");
$this->stdout(" git clone git@github.com:yiisoft/yii2-framework.git\n");
$this->stdout(" cd yii2-framework/\n");
$this->stdout(" export RELEASECOMMIT=$(git log --oneline |grep $version |grep -Po \"^[0-9a-f]+\")\n");
$grepVersion = preg_quote($version, '~');
$this->stdout(" export RELEASECOMMIT=$(git log --oneline |grep \"$grepVersion\" | grep -Po \"^[0-9a-f]+\")\n");
$this->stdout(" git tag -s $version -m \"version $version\" \$RELEASECOMMIT\n");
$this->stdout(" git tag --verify $version\n");
$this->stdout(" git push --tags\n\n");
@ -543,6 +545,7 @@ class ReleaseController extends Controller
$this->stdout("- create a release on github.\n");
$this->stdout("- release news and announcement.\n");
$this->stdout("- update the website (will be automated soon and is only relevant for the new website).\n");
$this->stdout(" https://github.com/yiisoft-contrib/yiiframework.com/blob/master/config/versions.php#L69\n");
$this->stdout("\n");
$this->stdout("- release applications: ./build/build release app-basic\n");
$this->stdout("- release applications: ./build/build release app-advanced\n");
@ -626,7 +629,7 @@ class ReleaseController extends Controller
$this->stdout("\n\nThe following steps are left for you to do manually:\n\n");
$nextVersion2 = $this->getNextVersions($nextVersion, self::PATCH); // TODO support other versions
$this->stdout("- close the $version milestone on github and open new ones for {$nextVersion["app-$name"]} and {$nextVersion2["app-$name"]}: https://github.com/yiisoft/yii2-app-$name/milestones\n");
$this->stdout("- Create Application packages and upload them to github: ./build release/package app-$name\n");
$this->stdout("- Create Application packages and upload them to framework releast at github: ./build/build release/package app-$name\n");
$this->stdout("\n");
}
@ -1016,6 +1019,13 @@ class ReleaseController extends Controller
throw new Exception('Command "git tag" failed with code ' . $ret);
}
rsort($tags, SORT_NATURAL); // TODO this can not deal with alpha/beta/rc...
// exclude 3.0.0-alpha1 tag
if (($key = array_search('3.0.0-alpha1', $tags, true)) !== false)
{
unset($tags[$key]);
}
$versions[$ext] = reset($tags);
}

6
build/controllers/TranslationController.php

@ -126,11 +126,11 @@ class TranslationController extends Controller
{
$lines = explode("\n", $diff);
foreach ($lines as $key => $val) {
if (mb_substr($val, 0, 1, 'utf-8') === '@') {
if (strpos($val, '@') === 0) {
$lines[$key] = '<span class="info">' . Html::encode($val) . '</span>';
} elseif (mb_substr($val, 0, 1, 'utf-8') === '+') {
} elseif (strpos($val, '+') === 0) {
$lines[$key] = '<ins>' . Html::encode($val) . '</ins>';
} elseif (mb_substr($val, 0, 1, 'utf-8') === '-') {
} elseif (strpos($val, '-') === 0) {
$lines[$key] = '<del>' . Html::encode($val) . '</del>';
} else {
$lines[$key] = Html::encode($val);

18
composer.json

@ -75,12 +75,13 @@
"yiisoft/yii2-composer": "~2.0.4",
"ezyang/htmlpurifier": "~4.6",
"cebe/markdown": "~1.0.0 | ~1.1.0 | ~1.2.0",
"bower-asset/jquery": "3.3.*@stable | 3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable",
"bower-asset/jquery": "3.5.*@stable | 3.4.*@stable | 3.3.*@stable | 3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable",
"bower-asset/inputmask": "~3.2.2 | ~3.3.5",
"bower-asset/punycode": "1.3.*",
"bower-asset/yii2-pjax": "~2.0.1"
},
"require-dev": {
"cweagans/composer-patches": "^1.7",
"phpunit/phpunit": "4.8.34",
"cebe/indent": "~1.0.2",
"friendsofphp/php-cs-fixer": "~2.2.3",
@ -101,6 +102,11 @@
"yii\\cs\\": "cs/src/"
}
},
"autoload-dev": {
"files": [
"tests/bootstrap.php"
]
},
"config": {
"platform": {"php": "5.4"}
},
@ -110,6 +116,16 @@
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
},
"composer-exit-on-patch-failure": true,
"patches": {
"phpunit/phpunit-mock-objects": {
"Fix PHP 7 and 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_mock_objects.patch"
},
"phpunit/phpunit": {
"Fix PHP 7 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php7.patch",
"Fix PHP 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php8.patch"
}
}
}
}

886
composer.lock generated

File diff suppressed because it is too large Load Diff

2
contrib/completion/bash/yii

@ -57,4 +57,4 @@ _yii()
# register completion for the ./yii command
# you may adjust this line if your command file is named differently
complete -F _yii ./yii yii
complete -o default -F _yii ./yii yii

14
docs/guide-ar/start-databases.md

@ -26,7 +26,7 @@
في البداية، عليك إنشاء قاعدة بيانات تسمى ب <code>yii2basic</code>، والتي ستستخدم لجلب البيانات الخاصة بالتطبيق، ويمكنك إستخدام أي من ال SQLite, MySql, PostgreSQL, MSSQL or Oracle database, ال Yii بشكل افتراضي بدعم العديد من قواعد البيانات والتي يمكنك إستخدامها مباشرة في التطبيق الخاص بك، ولتبسيط الأمور، ال MySql هي التي سيتم إستخدامها في في هذا الشرح.
</p>
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: إذا كنت ترغب بالحصول على خيارات متقدمة مثل دعم ال <code>JSON</code> الموجود داخل MariaDB، فيمكنك من إستخدام أحد ال Extension المذكوره بالأسفل للقيام بهذه المهمة بدلا من الإستغناء عن ال MySql، فإستخدام MariaDB بدلا عن ال MySql لم يعد صحيحا تماما.
</p></blockquote>
@ -60,15 +60,15 @@ INSERT INTO `country` VALUES ('US','United States',322976000);
## <div dir="rtl">إعدادات الإتصال الخاصة بقواعد البيانات - Configuring a DB Connection</div> <span id="configuring-db-connection"></span>
<p dir="rtl">
قبل أن تكمل الشرح، تأكد من تثبيت ال PHP <a href="http://www.php.net/manual/en/book.pdo.php">PDO</a> وال PDO driver، بالنسبة لهذا المثال، فإننا سنستخدم ال driver الخاص بال MySql وهو ال <code>pdo_mysql</code>، وهذه هي المتطلبات الأساسية لبناء أي التطبيق اذا كان التطبيق يستخدم ال relational database.
قبل أن تكمل الشرح، تأكد من تثبيت ال PHP <a href="https://secure.php.net/manual/en/book.pdo.php">PDO</a> وال PDO driver، بالنسبة لهذا المثال، فإننا سنستخدم ال driver الخاص بال MySql وهو ال <code>pdo_mysql</code>، وهذه هي المتطلبات الأساسية لبناء أي التطبيق اذا كان التطبيق يستخدم ال relational database.
</p>
<blockquote><p dir="rtl">
<blockquote class="note"><p dir="rtl">
ملاحظة: يمكنك تقعيل ال PDO مباشرة من خلال الدخول الى php.ini ومن ثم حذف الفاصلة المنقوطة قبل السطر التالي: <code>extension=php_pdo.dll</code>
كما يمكنك تفعيل ال driver المطلوب عن طريق حذف الفاصلة المنقوطة قبل ال driver المقصود مثل:
<code>extension=php_pdo_mysql.dll</code>
ويمكنك الإطلاع على المزيد من هنا:
<a href="http://php.net/manual/en/pdo.installation.php">pdo installation</a>
<a href="https://secure.php.net/manual/en/pdo.installation.php">pdo installation</a>
</p></blockquote>
<p dir="rtl">
@ -97,7 +97,7 @@ return [
<code>Yii::$app->db</code>
</p>
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: سيتم تضمين ملف ال <code>config/db.php</code> من خلال ال main application configuration والذي يتمثل بالملف <code>config/web.php</code>، والذي يقوم بدوره بتحديد كيف يمكن تهيئة ال instance الخاص <a href="../guide/concept-configurations.md">بالتطبيق</a>، لمزيد من المعلومات، يرجى الإطلاع على قسم ال <a href="../guide/concept-configurations.md">Configurations</a>.
</p></blockquote>
@ -133,7 +133,7 @@ class Country extends ActiveRecord
يرث ال <code>Country</code> Class ال [[yii\db\ActiveRecord]]، ولذلك، أنت لست بحاجة لكتابة أي شيفرة برمجية بداخله، فقط الشيفرة التي تشاهدها بالأعلى. سيقوم ال Yii بشكل تلقائي بالحصول على إسم الجدول في قاعدة البيانات من خلال إسم ال Class.
</p>
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: إذا لم يكن من الممكن إجراء مطابقة مباشرة بين اسم ال class واسم الجدول، فيمكنك تجاوز هذه المشكلة من خلال إستخدام الدالة [[yii\db\ActiveRecord::tableName()]] ، والتي ستقوم بعمل override على اسم الجدول.
</p></blockquote>
@ -158,7 +158,7 @@ $country->name = 'U.S.A.';
$country->save();
```
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: يعتبر ال Active Record وسيلة قوية للوصول إلى بيانات قاعدة البيانات والتعامل معها بطريقة ال object oriented.
ستجد معلومات أكثر تفصيلاً في الجزء الخاص بال <a href="../guide/db-active-record.md">Active Record</a>. بالإضافة الى ذلك، يمكنك التفاعل مباشرة مع قاعدة البيانات باستخدام lower-level data accessing والتي تسمى ب <a href="../guide/db-dao.md">Database Access Objects</a>.
</p></blockquote>

10
docs/guide-ar/start-forms.md

@ -52,7 +52,7 @@ class EntryForm extends Model
هذا ال class يرث ال [[yii\base\Model]], وهو base class تم تصميمه من خلال ال Yii, وبشكل عام وظيفته هي تثمثيل البيانات الخاصة بأي نموذج.
</p>
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: يتم إستخدام ال [[yii\base\Model]] كأصل لل model class <b>ولا</b> يرتبط بجداول قواعد البيانات. ويستخدم ال [[yii\db\ActiveRecord]] بالشكل الإعتيادي ليكون هو الأصل الذي من خلاله يتم الإرتباط بجداول بقواعد البيانات.
</p></blockquote>
@ -126,7 +126,7 @@ class SiteController extends Controller
</p>
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: يمثل التعبير Yii::$app ال <a href="../guide/structure-applications.md">Application</a> instance الذي يمكن الوصول اليه من خلال ال singleton <br />(singleton globally accessible). وهو أيضا <a href="../guide/concept-service-locator.md">service locator</a> بحيث يوفر الدعم لل components مثل ال request, response, db..الخ، لدعم وظائف محددة. مثلا في المثال الموجود في الأعلى، فإن ال request هو component من ال application instance والذي يستخدم للوصول الى البيانات الموجودة داخل ال $_POST.
</p></blockquote>
@ -134,7 +134,7 @@ class SiteController extends Controller
إذا كان كل شيء على ما يرام، فسوف يقوم ال action بجلب ال view التالية: <code>entry-confirm</code>، وذلك لتأكيد أن العملية قد تمت بنجاح بالنسبة للمستخدم، أما إن كانت البيانات غير صحيحة، أو لم يتم إرسال أي بيانات، فإن ال view <code>entry</code> هي التي سيتم جلبها وعرضها للمستخدم، حيث يتم عرض ال Html form، مع أي رسائل تحذير بخصوص الأخطاء التي تم العثور عليها من عملية التحقق.
</p>
<blockquote><p dir="rtl">
<blockquote class="note"><p dir="rtl">
ملاحظة: في هذا المثال البسيط، نعرض صفحة التأكيد فقط عند إرسال البيانات بشكل صحيح. عند الممارسة العملية، يجب عليك استخدام [[yii\web\Controller::refresh()|refresh()]] أو [[yii\web\Controller::redirect()|redirect()]] لتجنب أي مشكلة تحصل عن طريق ال resubmission والتي تندرج تحت العنوان <a href="http://en.wikipedia.org/wiki/Post/Redirect/Get">form resubmission problems</a>.
</p></blockquote>
@ -217,7 +217,7 @@ http://hostname/index.php?r=site%2Fentry
إن السحر الموجود لدينا هنا، هو كيفية العمل الخاصة بالشيفرة البرمجية لل form، والتي تعمل بالخفاء، إن إجراء التحقق عن صحة البيانات يتم في البداية من جانب العميل -client side- وذلك باستخدام الجافا سكربت، ومن ثم -بعد تجاوز التحقق الخاص بالجافا سكربت- بتم تنفيذ التحقق من جانب ال server-side عبر ال PHP. ال [[yii\widgets\ActiveForm]] ذكية بما فيه الكفاية لاستخراج ال rule الخاصة بالتحقق والتي قمت بإنشائها وتعريفها داخل ال <code>EntryForm</code>، ومن ثم تحويل هذه القواعد إلى شيفرة برمجية بالجافا سكربت قابلة للتنفيذ، ومن ثم استخدام هذه الشيفرة من قبل الجافا سكربت لإجراء التحقق من صحة البيانات. في حال قمت بإيقاف الجافا سكربت في المتصفح الخاص بك، سوف يستمر إجراء التحقق من جانب الخادم -server side-، كما هو موضح في ال action المسمى <code>actionEntry()</code>. وهذا يضمن صحة البيانات في جميع الظروف.
</p>
<blockquote><p dir="rtl">
<blockquote class="warning"><p dir="rtl">
تحذير: التحقق من جانب العميل -client side- يوفر تجربة أفضل للمستخدم، لكن يجب الأخذ بعين الإعتبار أن التحقق من جانب الخادم -server- مطلوب دائمًا، سواء تم التحقق من جانب العميل أم لا.
</p></blockquote>
@ -234,7 +234,7 @@ http://hostname/index.php?r=site%2Fentry
<?= $form->field($model, 'email')->label('Your Email') ?>
```
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: يوفر ال Yii العديد من ال widgets لمساعدتك في إنشاء views معقدة وديناميكية بسرعة. كما أنك ستتعلم في وقت لاحق كيف يمكنك إنشاء widget جديد، وستكتشف أن الموضوع سهل وبسيط، مما سيدفعك إلى كتابة الشيفرة البرمجية الخاصة بك داخل ال widget، والذي بدوره سيجعل من هذه الشيفرة قابلة للتطوير والإستخدام في أكثر من مكان في المستقبل.
</p></blockquote>

4
docs/guide-ar/start-gii.md

@ -53,7 +53,7 @@ defined('YII_ENV') or define('YII_ENV', 'dev');
http://hostname/index.php?r=gii
```
<blockquote><p dir="rtl">
<blockquote class="note"><p dir="rtl">
ملاحظة: إذا كنت تحاول الوصول إلى Gii من جهاز آخر غير ال localhost، فسيتم رفض الوصول افتراضيًا لأغراض أمنية، ولكن، يمكنك إعداد ال Gii لإضافة مجموعة من ال IP Addresses المسموح لها بالوصول وذلك من خلال:
</p></blockquote>
@ -150,7 +150,7 @@ http://hostname/index.php?r=country%2Findex
* Models: `models/Country.php` and `models/CountrySearch.php`
* Views: `views/country/*.php`
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: تم تصميم ال Gii لتكون أداة إنشاء شيفرات برمجية قابلة للتخصيص بشكل كبير للغاية. اذا قمت باستخدامه بحكمة،فإنك ستقوم بتسريع وتيرة التطوير الخاصة بالتطبيق الخاص بك. لمزيد من التفاصيل، يرجى الذهاب إلى الجزء الخاص بال <a href="https://www.yiiframework.com/extension/yiisoft/yii2-gii/doc/guide">Gii</a>.
</p></blockquote>

4
docs/guide-ar/start-hello.md

@ -25,7 +25,7 @@
لإنشاء صفحة "Hello"، ستقوم بإنشاء <code>say</code> <a href="../guide/structure-controllers.md#creating-actions">action</a> والذي بدوره سيقوم بقراءة ال <code>message</code> parameter من ال request، ومن ثم عرض ال <code>message</code> مرة أخرى إلى المستخدم. إذا كان ال request لا يحمل معه ال message parameter فإن ال action سيقوم بطباعة message إفتراضية وهي "Hello".
</p>
<blockqoute><p dir="rtl">
<blockqoute class="info"><p dir="rtl">
معلومة: ال <a href="../guide/structure-controllers.md#creating-actions">Actions</a> هي الكائنات(objects) التي يمكن للمستخدمين من الوصول اليها وتنفيذ ما في بداخلها بشكل مباشر. يتم تجميع هذه ال Actions بواسطة ال <a href="../guide/structure-controllers.md">controllers</a>. ونتيجة لذلك فإن ال response الراجعة للمستخدم ستكون هي نتيجة التنفيذ الخاصة بال action.
</p></blockqoute>
@ -120,7 +120,7 @@ http://hostname/index.php?r=site%2Fsay&message=Hello+World
إذا قمت بحذف ال <code>message</code> parameter من ال URL ، فسترى الصفحة تعرض كلمة <code>" Hello "</code> فقط. ويرجع ذلك إلى أن "message" يتم تمريرها ك parameter إلى ال <code>actionSay()</code>، وعندما يتم حذفها، سيتم استخدام القيمة الافتراضية وهي <code>"Hello"</code> بدلاً من ذلك.
</p>
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: تتشارك الصفحة الجديدة مع الصفحات الأخرى بالتطبيق بنفس ال Header وال Footer وذلك بسبب الدالة [[yii\web\Controller::render() | render ()]] والتي ستقوم بشكل تلقائي بتضمين النتيجة الخاصة بصفحة ال view <code>say</code> مع صفحة ال <a href="../guide/structure-views.md#layouts">Layout</a>، والتي يمكنك أن تجدها داخل المسار التالي: <code>views/layouts/main.php</code>
</p></blockquote>

46
docs/guide-ar/start-installation.md

@ -12,7 +12,7 @@
هناك Template آخر موجود بإطار العمل Yii وهو <a href="https://www.yiiframework.com/extension/yiisoft/yii2-app-advanced/doc/guide">Yii2 Advanced Project Template</a>، وهو الأفضل للعمل وإنشاء المشاريع لفريق عمل برمجي، ولتطوير المشاريع متعددة الطبقات(multiple tires).
</p>
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: قالب المشروع الأساسي (Basic) مناسب لتطوير 90% من تطبيقات الويب. ويختلف القالب المتقدم (Advanced Template) عن القالب الأساسي في كيفية تنظيم وهيكلة الشيفرة البرمجية.
اذا كنت جديدا في عالم تطوير تطبيقات الويب باستخدام ال Yii، فإننا نوصيك بقوة بأن تستخدم القالب الأساسي في بناء المشروع الخاص بك.
</p></blockquote>
@ -41,11 +41,13 @@ sudo mv composer.phar /usr/local/bin/composer
<p dir="rtl">
في هذا الدليل ، نفترض أنك قمت بتثبيت ال composer على مستوى جميع المشاريع (<a href="https://getcomposer.org/doc/00-intro.md#globally">globally</a>) بحيث تكون أوامر ال composer متاحة لجميع المشاريع من أي مكان. أما إذا كنت تستخدم ال composer.phar لمسار محدد فقط(local directory)، فيجب عليك ضبط الأومر وفقًا لذلك.
</p>
إذا كان ال composer مثبتًا من قبل، فتأكد من استخدام إصدار حديث. يمكنك تحديث ال composer عن طريق تنفيذ الأمر التالي `composer self-update`
<p dir="rtl">
إذا كان ال composer مثبتًا من قبل، فتأكد من استخدام إصدار حديث. يمكنك تحديث ال composer عن طريق تنفيذ الأمر التالي <code>composer self-update</code>
</p>
<blockquote><p dir="rtl">
<blockquote class="note"><p dir="rtl">
ملاحظة مهمة: أثناء تثبيت ال Yii ، سيحتاج ال composer إلى طلب(request) الكثير من المعلومات من ال Github Api. يعتمد عدد الطلبات على عدد dependencies التي يمتلكها التطبيق الخاص بك، وقد يكون هذا العدد أكبر من الحد المسموح به من قبل ال Github Api <b>(Github API rate limit)</b>. إذا وصلت الى الحد الأعلى المسموح به من الطلبات، فقد يطلب منك ال composer بيانات تسجيل الدخول إلى Github، وذلك للحصول على رمز (token) للدخول إلى Github Api. اذا كانت عمليات الإتصال سريعة، فقد تصل إلى هذا الحد(limit) قبل أن يتمكن ال composer من التعامل معه ، لذالك نوصي بتكوين رمز الدخول(access token) قبل تثبيت ال Yii. يرجى الرجوع إلى التوثيق الخاص بال Composer والإطلاع على التعليمات الخاصة <a href="https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens">Github API tokens</a> للحصول على الإرشادات اللازمة للقيام بذلك.
</p></blockquote>
@ -62,19 +64,19 @@ composer create-project --prefer-dist yiisoft/yii2-app-basic basic
سطر الأوامر السابق سيقوم بتثبيت أحدث نسخة مستقرة(stable) من إطار العمل Yii داخل مسار جديد اسمه basic، ويمكنك التعديل على سطر الأوامر السابق لتغيير اسم المشروع لأي اسم ترغب فيه.
</p>
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: اذا واجهتك أي مشكلة عند تنفيذ السطر `composer create-project` فيمكنك الذهاب إلى <a href="https://getcomposer.org/doc/articles/troubleshooting.md">قسم استكشاف الأخطاء في ال composer</a>.
في معظم الأخطاء الشائعة، وعند حل المشكلة أو الخطأ، يمكنك إكمال التثبيت من خلال الدخول الى المسار `basic` ومن ثم تنفيذ الأمر التالي: `composer update`.
</p></blockquote>
<blockquote><p dir="rtl">
<blockquote class="tip"><p dir="rtl">
تلميح: اذا كنت ترغب بتثبيت أحدث نسخة خاصة بالمطورين من ال Yii، فيمكنك ذلك من خلال إضافة الخيار <a href="https://getcomposer.org/doc/04-schema.md#minimum-stability">stability</a> وذلك من خلال سطر الأوامر التالي:
</p></blockquote>
```bash
composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
```
<blockquote><p dir="rtl">
<blockquote class="note"><p dir="rtl">
ملاحظة: نسخة المطورين من ال Yii يجب أن يتم إستخدامها للمواقع الإلكترونية التي لن تصدر كنسخة نهائية للمستخدم(Not for production) لأن ذلك يمكن أن يسبب بإيقاف المشروع أو الشيفرة البرمجية الخاصة بك.
</p></blockquote>
@ -87,7 +89,7 @@ composer create-project --prefer-dist yiisoft/yii2-app-basic basic
<ol dir="rtl">
<li> تثبت الملف من خلال الموقع الرسمي <a href="http://www.yiiframework.com/download/">yiiframework.com</a>.</li>
<li> قم بفك ضغط الملف الذي تم تنزيله إلى مجلد يمكن الوصول إليه عبر الويب.</li>
<li> قم بتعديل ملف `config / web.php` عن طريق إدخال secret key ل` cookieValidationKey`
<li> قم بتعديل ملف <code>config/web.php</code> عن طريق إدخال secret key ل<code> cookieValidationKey</code>
(يتم ذلك تلقائيًا إذا قمت بتثبيت ال Yii باستخدام Composer): </li>
</ol>
@ -119,9 +121,9 @@ composer create-project --prefer-dist yiisoft/yii2-app-basic basic
--------------------------
<p dir="rtl">
تعتمد ال Yii على حزم <a href="http://bower.io/">Bower</a> و / أو <a href="https://www.npmjs.org/">NPM</a> لتثبيت مكتبات ال (CSS و JavaScript). ويستخدم ال composer للحصول على هذه المكتبات ، مما يسمح بالحصول على إصدارات ال PHP و CSS / JavaScript في نفس الوقت. ويمكن تحقيق ذلك إما عن طريق استخدام <a href="https://asset-packagist.org/">asset-packagist.org</a> أو من خلال ال <a href="https://github.com/francoispluchino/composer-asset-plugin/">composer asset plugin</a>، يرجى الرجوع إلى <a href="../guide/structure-assets.md">Assets documentation</a> لمزيد من التفاصيل.
تعتمد ال Yii على حزم <a href="http://bower.io/">Bower</a> و/أو <a href="https://www.npmjs.org/">NPM</a> لتثبيت مكتبات ال (CSS و JavaScript). ويستخدم ال composer للحصول على هذه المكتبات ، مما يسمح بالحصول على إصدارات ال PHP و CSS/JavaScript في نفس الوقت. ويمكن تحقيق ذلك إما عن طريق استخدام <a href="https://asset-packagist.org/">asset-packagist.org</a> أو من خلال ال <a href="https://github.com/francoispluchino/composer-asset-plugin/">composer asset plugin</a>، يرجى الرجوع إلى <a href="../guide/structure-assets.md">Assets documentation</a> لمزيد من التفاصيل.
<br /><br />
قد ترغب في إدارة ال assets عبر ال native Bower / NPM أو استخدام ال CDN أو تجنب تثبيت ال assets بالكامل من حلال ال Composer ، ويمكن ذلك من خلال إضافة الأسطر التالية إلى "composer.json":
قد ترغب في إدارة ال assets عبر ال native Bower/NPM أو استخدام ال CDN أو تجنب تثبيت ال assets بالكامل من حلال ال Composer ، ويمكن ذلك من خلال إضافة الأسطر التالية إلى "composer.json":
</p>
```json
@ -133,7 +135,7 @@ composer create-project --prefer-dist yiisoft/yii2-app-basic basic
},
```
<blockquote><p dir="rtl">
<blockquote class="note"><p dir="rtl">
ملاحظة: في حالة تجاوز تثبيت ال assets عبر ال Composer، فأنت المسؤول عن تثبيت ال assets وحل مشكلات التعارض بين الإصدارات والمكتبات المختلفة. وكن مستعدًا لعدم تناسق محتمل بين ملفات ال asstes والإضافات المختلفة.
</p></blockquote>
@ -148,7 +150,7 @@ composer create-project --prefer-dist yiisoft/yii2-app-basic basic
php yii serve
```
<blockquote><p dir="rtl">
<blockquote class="note"><p dir="rtl">
ملاحظة: افتراضيًا ال HTTP-server يعمل على البورت 8080. ومع ذلك ، إذا كان هذا البورت قيد الاستخدام بالفعل أو كنت ترغب في تشغيل أكثر من تطبيق بهذه الطريقة، حينها سيلزمك تحديد البورت الذي يجب استخدامه. ما عليك سوى إضافة --port:
</p></blockquote>
@ -170,21 +172,21 @@ http://localhost:8080/
</p>
<ul dir="rtl">
<li>قم بنسخ الملف <pre>/requirements.php</pre> الى المسار <pre>/web/requirements.php</pre> بحيث يمكنك الوصول الى الصفحة من خلال الرابط التالي: <pre>http://localhost/requirements.php</pre></li>
<li>قم بتنفيذ الأوامر التالية: <br /><pre>
<li>قم بنسخ الملف <code>/requirements.php</code> الى المسار <code>/web/requirements.php</code> بحيث يمكنك الوصول الى الصفحة من خلال الرابط التالي: <code>http://localhost/requirements.php</code></li>
<li>قم بتنفيذ الأوامر التالية: <br /><code>
cd basic
php requirements.php</pre></li>
</code><br /><code>php requirements.php</code></li>
</ul>
<p dir="rtl">
يجب عليك أن تقوم بتثبيت وإعداد ال PHP الخاص بك بحيث تلبي الحد الأدنى من متطلبات ال Yii. الأهم من ذلك يجب أن يكون الإصدار الخاص بال PHP أعلى أو يساوي 5.4. من الناحية المثالية أحدث إصدار يعمل مع ال Yii هو ال PHP 7. يجب عليك أيضًا تثبيت ال <a href="http://www.php.net/manual/en/pdo.installation.php">PDO PHP Extension</a>.
يجب عليك أن تقوم بتثبيت وإعداد ال PHP الخاص بك بحيث تلبي الحد الأدنى من متطلبات ال Yii. الأهم من ذلك يجب أن يكون الإصدار الخاص بال PHP أعلى أو يساوي 5.4. من الناحية المثالية أحدث إصدار يعمل مع ال Yii هو ال PHP 7. يجب عليك أيضًا تثبيت ال <a href="https://secure.php.net/manual/en/pdo.installation.php">PDO PHP Extension</a>.
</p>
### <div dir="rtl">إعداد ال Web Servers</div> <span id="configuring-web-servers"></span>
-----------------------
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: يمكنك تخطي هذا الجزء الآن إذا كنت تختبر فقط إطار العمل Yii دون أي نية لنشر هذا التطبيق على الويب(بدون رفع التطبيق على production server).
</p></blockquote>
@ -194,18 +196,18 @@ http://localhost:8080/
<p dir="rtl">
على ال production server، قد ترغب في إعداد خادم الويب الخاص بك بحيث يمكن الوصول إلى التطبيق
الخاص بك عبر ال URL التالي <code>http: // www.example.com / index.php</code> بدلاً من <code>http: // www.example.com / basic / web / index.php</code>. هذا الكلام يتطلب إنشاء إعداد يقوم بتوجيه ال document root الموجود على ال web server الى مجلد ال basic/web، كما قد ترغب أيضا بإخفاء ال <code>index.php</code> من ال URL كما هو موضح في ال <a href="../guide/runtime-routing.md">Routing and URL Creation</a>. في هذا الموضوع ستتعلم كيف يمكنك إعداد ال Apache أو ال Nginx server لتحقيق هذه الأهداف.
الخاص بك عبر ال URL التالي <code>http://www.example.com/index.php</code> بدلاً من <code>http://www.example.com/basic/web/index.php</code>. هذا الكلام يتطلب إنشاء إعداد يقوم بتوجيه ال document root الموجود على ال web server الى مجلد ال basic/web، كما قد ترغب أيضا بإخفاء ال <code>index.php</code> من ال URL كما هو موضح في ال <a href="../guide/runtime-routing.md">Routing and URL Creation</a>. في هذا الموضوع ستتعلم كيف يمكنك إعداد ال Apache أو ال Nginx server لتحقيق هذه الأهداف.
</p>
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: من خلال تعيين ال <code>basic/web</code> ك <code>document root</code>، فإنك بذلك تمنع أيضًا المستخدمين النهائيين من الوصول الى الشيفرة البرمجية الخاصة بالتطبيق الخاص بك، وتمنعهم من الوصول الى الملفات الحساسة والمهمة والمخزنة في sibling directories من <code>basic/web</code>، ويعبر رفض الوصول الى المجلدات الأخرى تحسينا أمنيا مهما، يساعد في الحفاظ على مستوى أعلى من الحماية.
</p></blockquote>
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: إذا كان سيتم تشغيل التطبيق الخاص بك في بيئة استضافة مشتركة(shared hosting) حيث ليس لديك الصلاحية لتعديل الإعدادات الخاصة بال web server، ستحتاج حينها الى تعديل في البنية الخاصة بالمشروع للحصول على أفضل أمان ممكن. يرجى الرجوع إلى <a href="../guide/tutorial-shared-hosting.md">Shared Hosting Environment</a> لمزيد من المعلومات.
</p></blockquote>
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: إذا كنت تقوم بتشغيل تطبيق ال Yii بوجود ال proxy، فقد تحتاج إلى إعداد التطبيق ليكون ضمن ال <a href="../guide/runtime-requests.md#trusted-proxies">trusted proxies and header</a>.
</p></blockquote>
@ -214,7 +216,7 @@ http://localhost:8080/
<p dir="rtl">
استخدم الإعدادات التالية في ملف ال <code>httpd.conf</code> في Apache أو ضمن إعدادات ال virtual host.
ملاحظة: يجب عليك استبدال المسار التالي <code>path / to / basic / web</code> بالمسار الفعلي للتطبيق الخاص بك وصولا الى ال <code>basic / web</code>.
ملاحظة: يجب عليك استبدال المسار التالي <code>path/to/basic/web</code> بالمسار الفعلي للتطبيق الخاص بك وصولا الى ال <code>basic/web</code>.
</p>
```apache
@ -242,7 +244,7 @@ DocumentRoot "path/to/basic/web"
-----------------------
<p dir="rtl">
لاستخدام <a href="http://wiki.nginx.org/">Nginx</a>، يجب تثبيت PHP على أنه <a href="http://php.net/install.fpm">FPM SAPI</a>، ويمكنك استخدام إعدادات ال Nginx التالية، مع الإنتباه على استبدال المسار من <code>path / to / basic / web</code> الى المسار الفعلي وصولا إلى <code>basic / web</code> بالإضافة الى إستبدال <code>mysite.test</code> إلى ال hostname الخاص بالتطبيق.
لاستخدام <a href="http://wiki.nginx.org/">Nginx</a>، يجب تثبيت PHP على أنه <a href="https://secure.php.net/install.fpm">FPM SAPI</a>، ويمكنك استخدام إعدادات ال Nginx التالية، مع الإنتباه على استبدال المسار من <code>path/to/basic/web</code> الى المسار الفعلي وصولا إلى <code>basic/web</code> بالإضافة الى إستبدال <code>mysite.test</code> إلى ال hostname الخاص بالتطبيق.
</p>

6
docs/guide-ar/start-prerequisites.md

@ -7,19 +7,19 @@
## <div dir="rtl">PHP</div>
<p dir="rtl">
ال Yii هو إطار عمل PHP، لذا تأكد من قراءة وفهم المرجع الرسمي الخاص باللغة (http://php.net/manual/en/langref.php). عند البدء بتطوير المشاريع أو التطبيقات باستخدام ال Yii ، ستكتب التعليمات البرمجية بطريقة كائنية التوجه OOP، لذا تأكد من أنك على دراية بـمفاهيم ال OOP (https://secure.php.net/manual/en/language.oop5.basic.php) وكذلك ال namespaces (https://secure.php.net/manual/en/language.namespaces.php).
ال Yii هو إطار عمل PHP، لذا تأكد من قراءة وفهم المرجع الرسمي الخاص بلغة ال <a href="https://secure.php.net/manual/en/langref.php">PHP</a>. عند البدء بتطوير المشاريع أو التطبيقات باستخدام ال Yii ، ستكتب التعليمات البرمجية بطريقة كائنية التوجه OOP، لذا تأكد من أنك على دراية بـمفاهيم ال <a href="https://secure.php.net/manual/en/language.oop5.basic.php">OOP</a> وكذلك ال <a href="https://secure.php.net/manual/en/language.namespaces.php">namespaces</a>.
</p>
## <div dir="rtl">البرمجة كائنية التوجه object oriented programming</div>
<p dir="rtl">
كمبرمج أو مطور يرغب بالعمل على ال Yii، يجب عليك أن تمتلك المعرفة الأساسية للبرمجة كائنية التوجه OOP. إذا لم تكن على دراية بها ، فيمكنك تعلم ذلك من خلال واحدة من هذه الدورات المنتشرة مثل (https://code.tutsplus.com/tutorials/object-oriented-php-for-beginners--net-12762).<br />
كمبرمج أو مطور يرغب بالعمل على ال Yii، يجب عليك أن تمتلك المعرفة الأساسية للبرمجة كائنية التوجه OOP. إذا لم تكن على دراية بها ، فيمكنك تعلم ذلك من خلال واحدة من هذه الدورات المنتشرة مثل هذه الدورة من <a href="https://code.tutsplus.com/tutorials/object-oriented-php-for-beginners--net-12762">tuts+</a>.<br />
ملاحظة: كلما زاد تعقيد التطبيق أو المشروع الذي تعمل عليه، كلما احتجت الى مستوى أعلى وإحترافي أكثر من مفاهيم ال OOP لحل وإدارة التعقديات التي ستترب على مثل هذه المشاريع.
</p>
## <div dir="rtl">Command line and composer</div>
<p dir="rtl">تستخدم ال Yii بشكل كبير de-facto standard PHP package manager، ال Composer (https://getcomposer.org/)، لذلك تأكد من قرائتك وفهمك لهذا الموضوع قبل أن تبدء. بالإضافة الى ذلك إذا لم تكن على دراية باستخدام سطر الأوامر (command line) ، فقد حان الوقت لبدء المحاولة. بمجرد تعلم الأساسيات ، لن ترغب في العمل بدون إستخدام سطر الأوامر.<br />
<p dir="rtl">تستخدم ال Yii بشكل كبير de-facto standard PHP package manager، ال <a href="https://getcomposer.org/">Composer</a>، لذلك تأكد من قرائتك وفهمك لهذا الموضوع قبل أن تبدء. بالإضافة الى ذلك إذا لم تكن على دراية باستخدام سطر الأوامر (command line) ، فقد حان الوقت لبدء المحاولة. بمجرد تعلم الأساسيات ، لن ترغب في العمل بدون إستخدام سطر الأوامر.<br />
ال composer: ويترجم حرفيا الى كلمة "الملحن"، وهي عبارة عن أداة لإدارة المشاريع البرمجية والتي تسمح لك بتحديث وتنزيل المكتبات البرمجية المطلوبة للمشروع الخاص بك.
</p>

2
docs/guide-ar/start-workflow.md

@ -6,7 +6,7 @@
الخاصة بك (إعدادت ال web server). في هذا الجزء سنستعرض الوظائف ال built-in الموجودة في التطبيق الإفتراضي لإطار العمل Yii، وكيف يقوم بتنظيم الشيفرة البرمجية، وكيف يعالج (handling) هذا التطبيق الطلبات (requests) بشكل عام.
</p>
<blockquote><p dir="rtl">
<blockquote class="info"><p dir="rtl">
معلومة: من أجل تبسيط الطرح، ومن خلال هذا البرنامج التعليمي " Getting Started - البداية من هنا"، من المفترض أنك قمت بتعيين <code>basic/web</code> ك <code>document root</code> لل Web server، وقد قمت أيضا بإعداد ال Url الذي يسمح لك بالوصول الى التطبيق المثبت من خلاله ليكون على الشكل التالي: <code>http://hostname/index.php</code> أو ما شابه ذلك.
اذا لم تقم بذلك، ولتلبية إحتياجاتك في هذا البرنامج التعليمي، يرجى ضبط ال Url كما هو موضح في هذه الصفحة.
يمكنك معرفة الضبط الخاص بال Web server من هنا: <a href="start-installation.md">تثبيت ال Yii </a>

6
docs/guide-es/caching-data.md

@ -72,13 +72,13 @@ el código que utiliza la caché. Por ejemplo, podrías modificar la configuraci
Yii proporciona varios componentes de caché que pueden almacenar datos en diferentes medios. A continuación
se muestra un listado con los componentes de caché disponibles:
* [[yii\caching\ApcCache]]: utiliza la extensión de PHP [APC](http://php.net/manual/es/book.apc.php). Esta opción puede ser considerada como la más rápida de entre todas las disponibles para una aplicación centralizada. (ej. un servidor, no dedicado al balance de carga, etc).
* [[yii\caching\ApcCache]]: utiliza la extensión de PHP [APC](https://secure.php.net/manual/es/book.apc.php). Esta opción puede ser considerada como la más rápida de entre todas las disponibles para una aplicación centralizada. (ej. un servidor, no dedicado al balance de carga, etc).
* [[yii\caching\DbCache]]: utiliza una tabla de base de datos para almacenar los datos. Por defecto, se creará y usará como base de datos [SQLite3](http://sqlite.org/) en el directorio runtime. Se puede especificar explícitamente que base de datos va a ser utilizada configurando la propiedad `db`.
* [[yii\caching\DummyCache]]: dummy cache (caché tonta) que no almacena en caché nada. El propósito de este componente es simplificar el código necesario para chequear la disponibilidad de caché. Por ejemplo, durante el desarrollo o si el servidor no tiene soporte de caché actualmente, puede utilizarse este componente de caché. Cuando este disponible un soporte en caché, puede cambiarse el componente correspondiente. En ambos casos, puede utilizarse el mismo código `Yii::$app->cache->get($key)` para recuperar un dato sin la preocupación de que `Yii::$app->cache` pueda ser `null`.
* [[yii\caching\FileCache]]: utiliza un fichero estándar para almacenar los datos. Esto es adecuado para almacenar grandes bloques de datos (como páginas).
* [[yii\caching\MemCache]]: utiliza las extensiones de PHP [memcache](http://php.net/manual/es/book.memcache.php) y [memcached](http://php.net/manual/es/book.memcached.php). Esta opción puede ser considerada como la más rápida cuando la caché es manejada en una aplicación distribuida (ej. con varios servidores, con balance de carga, etc..)
* [[yii\caching\MemCache]]: utiliza las extensiones de PHP [memcache](https://secure.php.net/manual/es/book.memcache.php) y [memcached](https://secure.php.net/manual/es/book.memcached.php). Esta opción puede ser considerada como la más rápida cuando la caché es manejada en una aplicación distribuida (ej. con varios servidores, con balance de carga, etc..)
* [[yii\redis\Cache]]: implementa un componente de caché basado en [Redis](http://redis.io/) que almacenan pares clave-valor (requiere la versión 2.6.12 de redis).
* [[yii\caching\WinCache]]: utiliza la extensión de PHP [WinCache](http://iis.net/downloads/microsoft/wincache-extension) ([ver también](http://php.net/manual/es/book.wincache.php)).
* [[yii\caching\WinCache]]: utiliza la extensión de PHP [WinCache](http://iis.net/downloads/microsoft/wincache-extension) ([ver también](https://secure.php.net/manual/es/book.wincache.php)).
* [[yii\caching\XCache]] _(deprecated)_: utiliza la extensión de PHP [XCache](http://xcache.lighttpd.net/).
* [[yii\caching\ZendDataCache]] _(deprecated)_: utiliza [Zend Data Cache](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm) como el medio fundamental de caché.

2
docs/guide-es/caching-http.md

@ -130,7 +130,7 @@ especifican en `session.cache_limiter` de la configuración INI de PHP. Estas ca
el almacenamiento de caché que desees de `HttpCache`. Para evitar este problema, por defecto `HttpCache` deshabilitará
automáticamente el envío de estas cabeceras. Si deseas modificar este comportamiento, tienes que configurar la propiedad
[[yii\filters\HttpCache::sessionCacheLimiter]]. La propiedad puede tomar un valor de cadena, incluyendo `public`, `private`,
`private_no_expire`, and `nocache`. Por favor, consulta el manual PHP acerca de [session_cache_limiter()](http://www.php.net/manual/es/function.session-cache-limiter.php)
`private_no_expire`, and `nocache`. Por favor, consulta el manual PHP acerca de [session_cache_limiter()](https://secure.php.net/manual/es/function.session-cache-limiter.php)
para una mejor explicación sobre esos valores.

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

@ -1,7 +1,7 @@
Autocarga de clases
===================
Yii depende del [mecanismo de autocarga de clases](http://www.php.net/manual/es/language.oop5.autoload.php) para localizar
Yii depende del [mecanismo de autocarga de clases](https://secure.php.net/manual/es/language.oop5.autoload.php) para localizar
e incluir los archivos de las clases requiridas. Proporciona un cargador de clases de alto rendimiento que cumple con el
[estandard PSR-4](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md).
El cargador se instala cuando incluyes el archivo `Yii.php`.

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

@ -309,7 +309,7 @@ $user->touch('login_time');
Comparación con Traits <span id="comparison-with-traits"></span>
----------------------
Mientras que los comportamientos son similares a [traits](http://www.php.net/traits) en cuanto que ambos "inyectan" sus
Mientras que los comportamientos son similares a [traits](https://secure.php.net/traits) en cuanto que ambos "inyectan" sus
métodos y propiedades a la clase primaria, son diferentes en muchos aspectos. Tal y como se describe abajo, los dos
tienen sus ventajas y desventajas. Son más como complementos el uno al otro en lugar de alternativas.

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

@ -14,7 +14,7 @@ de ID:
* Inyección de constructores;
* Inyección de setters y propiedades;
* Inyección de [llamadas de retorno PHP](http://php.net/manual/es/language.types.callable.php);
* Inyección de [llamadas de retorno PHP](https://secure.php.net/manual/es/language.types.callable.php);
### Inyección de Constructores <span id="constructor-injection"></span>

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

@ -13,7 +13,7 @@ Gestor de Eventos <span id="event-handlers"></span>
-----------------
Un gestor de eventos es una
[llamada de retorno PHP (PHP callback)](http://php.net/manual/es/language.types.callable.php) que se ejecuta cuando se
[llamada de retorno PHP (PHP callback)](https://secure.php.net/manual/es/language.types.callable.php) que se ejecuta cuando se
lanza el evento al que corresponde. Se puede usar cualquier llamada de retorno de las enumeradas a continuación:
- una función de PHP global especificada como una cadena de texto (sin paréntesis), ej. `'trim'`;

6
docs/guide-es/db-dao.md

@ -1,7 +1,7 @@
Objetos de Acceso a Bases de Datos
==================================
Construido sobre [PDO](http://php.net/manual/es/book.pdo.php), Yii DAO (Objetos de Acceso a Bases de Datos) proporciona una
Construido sobre [PDO](https://secure.php.net/manual/es/book.pdo.php), Yii DAO (Objetos de Acceso a Bases de Datos) proporciona una
API orientada a objetos para el acceso a bases de datos relacionales. Es el fundamento para otros métodos de acceso a bases de datos
más avanzados, incluyendo el [constructor de consultas](db-query-builder.md) y [active record](db-active-record.md).
@ -60,7 +60,7 @@ Puedes acceder a la conexión DB mediante la expresión `Yii::$app->db`.
Cuando configuras una conexión DB, deberías siempre especificar el Nombre de Origen de Datos (DSN) mediante la
propiedad [[yii\db\Connection::dsn|dsn]]. El formato del DSN varia para cada diferente base de datos. Por favor consulte el
[manual de PHP](http://www.php.net/manual/es/function.PDO-construct.php) para más detalles. Abajo están algunos ejemplos:
[manual de PHP](https://secure.php.net/manual/es/function.PDO-construct.php) para más detalles. Abajo están algunos ejemplos:
* MySQL, MariaDB: `mysql:host=localhost;dbname=mydatabase`
* SQLite: `sqlite:/path/to/database/file`
@ -185,7 +185,7 @@ $post = $db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status',
->queryOne();
```
La vinculación parámetros es implementada mediante [sentencias preparadas (prepared statements)](http://php.net/manual/es/mysqli.quickstart.prepared-statements.php).
La vinculación parámetros es implementada mediante [sentencias preparadas (prepared statements)](https://secure.php.net/manual/es/mysqli.quickstart.prepared-statements.php).
Además de prevenir ataques de inyección de SQL, también puede mejorar el rendimiento preparando una sola vez una sentencia SQL y ejecutándola múltiples veces con diferentes
parámetros. Por ejemplo,

2
docs/guide-es/glossary.md

@ -52,7 +52,7 @@ Módulo es una sub-aplicación que contiene elementos MVC en sí mismo, como mod
## namespace
Namespace (espacio de nombres) se refiere a una [característica de PHP](http://php.net/manual/es/language.namespaces.php) activamente utilizada en Yii 2.
Namespace (espacio de nombres) se refiere a una [característica de PHP](https://secure.php.net/manual/es/language.namespaces.php) activamente utilizada en Yii 2.
# P

8
docs/guide-es/helper-array.md

@ -1,7 +1,7 @@
ArrayHelper
===========
Adicionalmente al [rico conjunto de funciones para arrays de PHP](http://php.net/manual/es/book.array.php), el array helper de Yii proporciona
Adicionalmente al [rico conjunto de funciones para arrays de PHP](https://secure.php.net/manual/es/book.array.php), el array helper de Yii proporciona
métodos estáticos adicionales permitiendo trabajar con arrays de manera más eficiente.
@ -66,7 +66,7 @@ Después de ejecutar el código el `$array` contendrá `['options' => [1, 2]]` y
## Comprobando la Existencia de Claves <span id="checking-existence-of-keys"></span>
`ArrayHelper::keyExists` funciona de la misma manera que [array_key_exists](http://php.net/manual/es/function.array-key-exists.php)
`ArrayHelper::keyExists` funciona de la misma manera que [array_key_exists](https://secure.php.net/manual/es/function.array-key-exists.php)
excepto que también soporta case-insensitive para la comparación de claves. Por ejemplo,
```php
@ -270,7 +270,7 @@ El tercer argumento es la dirección. En caso de ordenar por una clave podría s
direcciones de ordenación.
El último argumento es un PHP sort flag que toma los mismos valores que los pasados a
PHP [sort()](http://php.net/manual/es/function.sort.php).
PHP [sort()](https://secure.php.net/manual/es/function.sort.php).
## Detectando Tipos de Array <span id="detecting-array-types"></span>
@ -373,7 +373,7 @@ A pesar de que PHP ofrece `in_array()`, este no soporta sub-grupos u objetos de
Para ayudar en este tipo de pruebas, [[yii\helpers\ArrayHelper]] provee [[yii\helpers\ArrayHelper::isIn()|isIn()]]
y [[yii\helpers\ArrayHelper::isSubset()|isSubset()]] con la misma firma del método
[in_array()](http://php.net/manual/en/function.in-array.php).
[in_array()](https://secure.php.net/manual/en/function.in-array.php).
```php
// true

6
docs/guide-es/helper-html.md

@ -3,7 +3,7 @@ Clase auxiliar Html (Html helper)
Todas las aplicaciones web generan grandes cantidades de marcado HTML (HTML markup). Si el marcado es estático, se
puede realizar de forma efectiva
[mezclando PHP y HTML en un mismo archivo](http://php.net/manual/es/language.basic-syntax.phpmode.php) pero cuando se
[mezclando PHP y HTML en un mismo archivo](https://secure.php.net/manual/es/language.basic-syntax.phpmode.php) pero cuando se
generan dinámicamente empieza a complicarse su gestión sin ayuda extra. Yii ofrece esta ayuda en forma de una clase auxiliar Html
que proporciona un conjunto de métodos estáticos para gestionar las etiquetas HTML más comúnmente usadas, sus opciones y contenidos.
@ -96,8 +96,8 @@ eliminara una propiedad, se puede especificar como una cadena de texto.
Para que el contenido se muestre correctamente y de forma segura con caracteres especiales HTML el contenido debe ser
codificado. En PHP esto se hace con [htmlspecialchars](http://www.php.net/manual/es/function.htmlspecialchars.php) y
[htmlspecialchars_decode](http://www.php.net/manual/es/function.htmlspecialchars-decode.php). El problema con el uso
codificado. En PHP esto se hace con [htmlspecialchars](https://secure.php.net/manual/es/function.htmlspecialchars.php) y
[htmlspecialchars_decode](https://secure.php.net/manual/es/function.htmlspecialchars-decode.php). El problema con el uso
de estos métodos directamente es que se tiene que especificar la codificación y opciones extra cada vez. Ya que las
opciones siempre son las mismas y la codificación debe coincidir con la de la aplicación para prevenir problemas de
seguridad, Yii proporciona dos métodos simples y compactos:

2
docs/guide-es/input-file-upload.md

@ -123,7 +123,7 @@ También puedes subir varios archivos a la vez, con algunos ajustes en el códig
Primero debes ajustar la clase del modelo, agregando la opción `maxFiles` en la regla de validación `file` para limitar
el número máximo de archivos a subir. Definir `maxFiles` como `0` significa que no hay límite en el número de archivos
a subir simultáneamente. El número máximo de archivos permitidos para subir simultáneamente está también limitado
por la directiva PHP [`max_file_uploads`](http://php.net/manual/en/ini.core.php#ini.max-file-uploads),
por la directiva PHP [`max_file_uploads`](https://secure.php.net/manual/en/ini.core.php#ini.max-file-uploads),
cuyo valor por defecto es 20. El método `upload()` debería también ser modificado para guardar los archivos uno a uno.
```php

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

@ -29,15 +29,15 @@ Yii 2.0 requiere PHP 5.4 o mayor, lo que es un gran progreso ya que Yii 1.1 func
Como resultado, hay muchas diferencias a nivel del lenguaje a las que deberías prestar atención.
Abajo hay un resumen de los mayores cambios en relación a PHP:
- [Namespaces](http://php.net/manual/es/language.namespaces.php).
- [Funciones anónimas](http://php.net/manual/es/functions.anonymous.php).
- [Namespaces](https://secure.php.net/manual/es/language.namespaces.php).
- [Funciones anónimas](https://secure.php.net/manual/es/functions.anonymous.php).
- La sintaxis corta de Arrays `[...elementos...]` es utilizada en vez de `array(...elementos...)`.
- Etiquetas cortas de `echo`. Ahora en las vistas se usa `<?=`. Esto se puede utilizar desde PHP 5.4.
- [SPL - Biblioteca estándar de PHP](http://php.net/manual/es/book.spl.php).
- [Enlace estático en tiempo de ejecución](http://php.net/manual/es/language.oop5.late-static-bindings.php).
- [Fecha y Hora](http://php.net/manual/es/book.datetime.php).
- [Traits](http://php.net/manual/es/language.oop5.traits.php).
- [intl](http://php.net/manual/es/book.intl.php). Yii 2.0 utiliza la extensión `intl` de PHP
- [SPL - Biblioteca estándar de PHP](https://secure.php.net/manual/es/book.spl.php).
- [Enlace estático en tiempo de ejecución](https://secure.php.net/manual/es/language.oop5.late-static-bindings.php).
- [Fecha y Hora](https://secure.php.net/manual/es/book.datetime.php).
- [Traits](https://secure.php.net/manual/es/language.oop5.traits.php).
- [intl](https://secure.php.net/manual/es/book.intl.php). Yii 2.0 utiliza la extensión `intl` de PHP
como soporte para internacionalización.
@ -291,7 +291,7 @@ Por favor consulta la sección [Comandos de Consola](tutorial-console.md) para m
I18N
----
Yii 2.0 remueve el formateador de fecha y números previamente incluido en favor del [módulo de PHP PECL intl](http://pecl.php.net/package/intl).
Yii 2.0 remueve el formateador de fecha y números previamente incluido en favor del [módulo de PHP PECL intl](https://pecl.php.net/package/intl).
La traducción de mensajes ahora es ejecutada vía el componente `i18n` de la aplicación.
Este componente maneja un grupo de mensajes origen, lo que te permite utilizar diferentes mensajes

4
docs/guide-es/intro-yii.md

@ -55,6 +55,6 @@ Yii 2.0 requiere PHP 5.4.0 o una versión posterior y corre de mejor manera en l
ejecutando el script de comprobación incluido en cada lanzamiento de Yii.
Para utilizar Yii se requieren conocimientos básicos de programación orientada a objetos (POO), porque el framework Yii se basa íntegramente en esta tecnología.
Yii 2.0 hace uso también de las últimas características de PHP, como [namespaces](http://www.php.net/manual/es/language.namespaces.php)
y [traits](http://www.php.net/manual/es/language.oop5.traits.php). Comprender estos conceptos te ayudará a entender mejor Yii 2.0.
Yii 2.0 hace uso también de las últimas características de PHP, como [namespaces](https://secure.php.net/manual/es/language.namespaces.php)
y [traits](https://secure.php.net/manual/es/language.oop5.traits.php). Comprender estos conceptos te ayudará a entender mejor Yii 2.0.

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

@ -19,6 +19,6 @@ Debido a que el trabajo de bootstrapping se tiene que ejecutar antes de gestiona
Intenta no registrar demasiados componentes de bootstrapping. Un componente de bootstrapping sólo es necesario si tiene que interaccionar en todo el ciclo de vida de la gestión de la petición. Por ejemplo, si un modulo necesita registrar reglas de análisis de URL adicionales, se debe incluirse en la [propiedad bootstrap](structure-applications.md#bootstrap) para que la nueva regla de URL tenga efecto antes de que sea utilizada para resolver peticiones.
En modo de producción, hay que habilitar la cache bytecode, así como [APC](http://php.net/manual/es/book.apc.php), para minimizar el tiempo necesario para incluir y analizar archivos PHP.
En modo de producción, hay que habilitar la cache bytecode, así como [APC](https://secure.php.net/manual/es/book.apc.php), para minimizar el tiempo necesario para incluir y analizar archivos PHP.
Algunas grandes aplicaciones tienen [configuraciones](concept-configurations.md) de aplicación muy complejas que están dividida en muchos archivos de configuración más pequeños.

2
docs/guide-es/security-passwords.md

@ -7,7 +7,7 @@ pero el hardware moderno hace posible que ese tipo de hash e incluso más fuerte
Para poder proveer de una seguridad mayor para los passwords de los usuarios, incluso en el peor de los escenarios (tu aplicación sufre una brecha de seguridad),
necesitas utilizar un algoritmo que resista los ataques de fuerza bruta. La mejor elección actualmente es `bcrypt`.
En PHP, puedes generar un hash `bcrypt` utilizando la [función crypt](http://php.net/manual/en/function.crypt.php). Yii provee
En PHP, puedes generar un hash `bcrypt` utilizando la [función crypt](https://secure.php.net/manual/en/function.crypt.php). Yii provee
dos funciones auxiliares que hacen que `crypt` genere y verifique los hash más fácilmente.
Cuando un usuario provee un password por primera vez (por ej., en la registración), dicho password necesita ser pasado por un hash:

2
docs/guide-es/start-databases.md

@ -49,7 +49,7 @@ Al final, tendrás una base de datos llamada `yii2basic`, y dentro de esta, una
Configurar una conexión a la Base de Datos <span id="configuring-db-connection"></span>
------------------------------------------
Asegúrate de tener instalado la extensión de PHP [PDO](http://www.php.net/manual/es/book.pdo.php) y el driver
Asegúrate de tener instalado la extensión de PHP [PDO](https://secure.php.net/manual/es/book.pdo.php) y el driver
de PDO para el motor que estés utilizando (ej. `pdo_mysql` para MySQL). Este es un requisito básico si tu aplicación
va a utilizar bases de datos relacionales.

6
docs/guide-es/start-installation.md

@ -115,7 +115,7 @@ Puedes utilizar tu navegador para acceder a la aplicación instalada de Yii en l
```
http://localhost:8080/.
```
![Instalación Correcta de Yii](images/start-app-installed.png)
@ -131,7 +131,7 @@ de PHP satisfaga los requerimientos de Yii. Esto puedes hacerlo usando cualquier
```
Deberías configurar tu instalación de PHP para que satisfaga los requisitos mínimos de Yii. Lo que es más importante,
debes tener PHP 5.4 o mayor. También deberías instalar la [Extensión de PHP PDO](http://www.php.net/manual/es/pdo.installation.php)
debes tener PHP 5.4 o mayor. También deberías instalar la [Extensión de PHP PDO](https://secure.php.net/manual/es/pdo.installation.php)
y el correspondiente driver de base de datos (como `pdo_mysql` para bases de datos MySQL), si tu aplicación lo necesitara.
@ -187,7 +187,7 @@ DocumentRoot "path/to/basic/web"
### Configuración Recomendada de Nginx <span id="recommended-nginx-configuration"></span>
Para utilizar [Nginx](http://wiki.nginx.org/), debes instalar PHP como un [FPM SAPI](http://php.net/install.fpm).
Para utilizar [Nginx](http://wiki.nginx.org/), debes instalar PHP como un [FPM SAPI](https://secure.php.net/install.fpm).
Utiliza la siguiente configuración de Nginx, reemplazando `path/to/basic/web` con la ruta real a
`basic/web` y `mysite.test` con el hostname real a servir.

4
docs/guide-es/start-prerequisites.md

@ -6,7 +6,7 @@ pero todavía hay algunas cosas que debería aprender antes de empezar con Yii.
## PHP
Yii es un _framework_ (base estructurada de desarrollo) en PHP, así que asegúrese de
[leer y comprender la referencia del lenguaje](http://php.net/manual/es/langref.php).
[leer y comprender la referencia del lenguaje](https://secure.php.net/manual/es/langref.php).
Al desarrollar con Yii deberá escribir código de manera orientada a objetos, así que
asegúrese de estar familiarizado con
[clases y objetos](https://secure.php.net/manual/es/language.oop5.basic.php) así como con
@ -15,7 +15,7 @@ asegúrese de estar familiarizado con
## Programación orientada a objetos
Se requiere una comprensión básica de la programación orientada a objetos. Si no está
familiarizado con ella, diríjase a alguno d elos muchos tutoriales disponibles, como
familiarizado con ella, diríjase a alguno de los muchos tutoriales disponibles, como
[el de tuts+](https://code.tutsplus.com/tutorials/object-oriented-php-for-beginners--net-12762).
Observe que cuanto más complicada sea su aplicación, más conceptos avanzados de la

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

@ -335,7 +335,7 @@ Puedes encontrar más detalles de esta propiedad en la sección [Internacionaliz
#### [[yii\base\Application::timeZone|timeZone]] <span id="timeZone"></span>
Esta propiedad es provista como una forma alternativa de definir el `time zone` de PHP por defecto en tiempo de ejecución.
Configurando esta propiedad, escencialmente estás llamando a la función de PHP [date_default_timezone_set()](http://php.net/manual/es/function.date-default-timezone-set.php).
Configurando esta propiedad, escencialmente estás llamando a la función de PHP [date_default_timezone_set()](https://secure.php.net/manual/es/function.date-default-timezone-set.php).
Por ejemplo:
```php

4
docs/guide-es/structure-models.md

@ -39,8 +39,8 @@ echo $model->name;
```
También se puede acceder a los atributos como se accede a los elementos de un array, gracias al soporte para
[ArrayAccess](http://php.net/manual/es/class.arrayaccess.php) y
[ArrayIterator](http://php.net/manual/es/class.arrayiterator.php) que brinda [[yii\base\Model]]:
[ArrayAccess](https://secure.php.net/manual/es/class.arrayaccess.php) y
[ArrayIterator](https://secure.php.net/manual/es/class.arrayiterator.php) que brinda [[yii\base\Model]]:
```php
$model = new \app\models\ContactForm;

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

@ -72,7 +72,7 @@ Hay que tener en cuenta que, a diferencia de [[yii\base\Widget::widget()]] que d
representación resultante del _widget_, el método [[yii\base\Widget::begin()]] devuelve una
instancia del _widget_, que se puede usar para generar el contenido del _widget_.
> Nota: Algunos _widgets_ utilizan un [búfer de salida](http://php.net/manual/es/book.outcontrol.php)
> Nota: Algunos _widgets_ utilizan un [búfer de salida](https://secure.php.net/manual/es/book.outcontrol.php)
> para ajustar el contenido rodeado al invocar [[yii\base\Widget::end()]]. Por este motivo se espera
> que las llamadas a [[yii\base\Widget::begin()]] y [[yii\base\Widget::end()]] tengan lugar en el
> mismo fichero de vista.

2
docs/guide-es/tutorial-core-validators.md

@ -96,7 +96,7 @@ Opcionalmente, puede convertir el valor de entrada en una fecha/tiempo UNIX y al
- `format`: el formato fecha/tiempo en el que debe estar el valor a ser validado.
Esto tiene que ser un patrón fecha/tiempo descrito en [manual ICU](http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Time-Format-Syntax).
Alternativamente tiene que ser una cadena con el prefijo `php:` representando un formato que ha de ser reconocido por la clase `Datetime` de PHP. Por favor, refiérase a <http://php.net/manual/en/datetime.createfromformat.php> sobre los formatos soportados.
Alternativamente tiene que ser una cadena con el prefijo `php:` representando un formato que ha de ser reconocido por la clase `Datetime` de PHP. Por favor, refiérase a <https://secure.php.net/manual/en/datetime.createfromformat.php> sobre los formatos soportados.
Si no tiene ningún valor, ha de coger el valor de `Yii::$app->formatter->dateFormat`.
- `timestampAttribute`: el nombre del atributo al cual este validador puede asignar el fecha/hora UNIX convertida desde la entrada fecha/hora.

6
docs/guide-fr/caching-data.md

@ -91,15 +91,15 @@ Comme tous les composants de mise en cache prennent en charge le même jeux d'AP
Yii prend en charge un large panel de supports de stockage pour cache. Ce qui suit est un résumé :
* [[yii\caching\ApcCache]]: utilise l'extension PHP [APC](http://php.net/manual/en/book.apc.php). Cette option peut être considérée comme la plus rapide lorsqu'on utilise un cache pour une grosse application centralisée (p. ex. un serveur, pas d'équilibrage de charge dédié, etc.).
* [[yii\caching\ApcCache]]: utilise l'extension PHP [APC](https://secure.php.net/manual/en/book.apc.php). Cette option peut être considérée comme la plus rapide lorsqu'on utilise un cache pour une grosse application centralisée (p. ex. un serveur, pas d'équilibrage de charge dédié, etc.).
* [[yii\caching\DbCache]]: utilise une table de base de données pour stocker les données en cache. Pour utiliser ce cache, vous devez créer une table comme spécifié dans [[yii\caching\DbCache::cacheTable]].
* [[yii\caching\DummyCache]]: tient lieu de cache à remplacer qui n'assure pas de mise en cache réelle. Le but de ce composant est de simplifier le code qui a besoin de vérifier la disponibilité du cache. Par exemple, lors du développement ou si le serveur ne dispose pas de la prise en charge d'un cache, vous pouvez configurer un composant de mise en cache pour qu'il utilise ce cache. Lorsque la prise en charge réelle de la mise en cache est activée, vous pouvez basculer sur le composant de mise en cache correspondant. Dans les deux cas, vous pouvez utiliser le même code `Yii::$app->cache->get($key)` pour essayer de retrouver les données du cache sans vous préoccuper du fait que `Yii::$app->cache` puisse être `null`.
* [[yii\caching\FileCache]]: utilise des fichiers standards pour stocker les données en cache. Cela est particulièrement adapté à la mise en cache de gros blocs de données, comme le contenu d'une page.
* [[yii\caching\MemCache]]: utilise le [memcache](http://php.net/manual/en/book.memcache.php) PHP et l'extension [memcached](http://php.net/manual/en/book.memcached.php). Cette option peut être considérée comme la plus rapide lorsqu'on utilise un cache dans des applications distribuées (p. ex. avec plusieurs serveurs, l'équilibrage de charge, etc.).
* [[yii\caching\MemCache]]: utilise le [memcache](https://secure.php.net/manual/en/book.memcache.php) PHP et l'extension [memcached](https://secure.php.net/manual/en/book.memcached.php). Cette option peut être considérée comme la plus rapide lorsqu'on utilise un cache dans des applications distribuées (p. ex. avec plusieurs serveurs, l'équilibrage de charge, etc.).
* [[yii\redis\Cache]]: met en œuvre un composant de mise en cache basé sur un stockage clé-valeur [Redis](http://redis.io/)
(une version de redis égale ou supérieure à 2.6.12 est nécessaire).
* [[yii\caching\WinCache]]: utilise le [WinCache](http://iis.net/downloads/microsoft/wincache-extension) PHP
([voir aussi l'extension](http://php.net/manual/en/book.wincache.php)).
([voir aussi l'extension](https://secure.php.net/manual/en/book.wincache.php)).
* [[yii\caching\XCache]] _(deprecated)_: utilise l'extension PHP [XCache](http://xcache.lighttpd.net/).
* [[yii\caching\ZendDataCache]] _(deprecated)_: utilise le
[cache de données Zend](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm)

2
docs/guide-fr/caching-http.md

@ -100,7 +100,7 @@ Cache-Control: public, max-age=3600
## Propriété "Session Cache Limiter" <span id="session-cache-limiter"></span>
Lorsqu'une page utilise une session, PHP envoie automatiquement quelques entêtes HTTP relatifs à la mise en cache comme spécifié dans la propriété `session.cache_limiter` de PHP INI. Ces entêtes peuvent interférer ou désactiver la mise en cache que vous voulez obtenir de `HttpCache`. Pour éviter ce problème, par défaut, `HttpCache` désactive l'envoi de ces entêtes automatiquement. Si vous désirez modifier ce comportement, vous devez configurer la propriété [[yii\filters\HttpCache::sessionCacheLimiter]]. Cette propriété accepte une chaîne de caractères parmi `public`, `private`, `private_no_expire` et `nocache`. Reportez-vous au manuel de PHP à propos de [session_cache_limiter()](http://www.php.net/manual/en/function.session-cache-limiter.php) pour des explications sur ces valeurs.
Lorsqu'une page utilise une session, PHP envoie automatiquement quelques entêtes HTTP relatifs à la mise en cache comme spécifié dans la propriété `session.cache_limiter` de PHP INI. Ces entêtes peuvent interférer ou désactiver la mise en cache que vous voulez obtenir de `HttpCache`. Pour éviter ce problème, par défaut, `HttpCache` désactive l'envoi de ces entêtes automatiquement. Si vous désirez modifier ce comportement, vous devez configurer la propriété [[yii\filters\HttpCache::sessionCacheLimiter]]. Cette propriété accepte une chaîne de caractères parmi `public`, `private`, `private_no_expire` et `nocache`. Reportez-vous au manuel de PHP à propos de [session_cache_limiter()](https://secure.php.net/manual/en/function.session-cache-limiter.php) pour des explications sur ces valeurs.
## Implications SEO <span id="seo-implications"></span>

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

@ -1,7 +1,7 @@
Chargement automatique des classes
==================================
Yii compte sur le [mécanisme de chargement automatique des classes](http://www.php.net/manual/en/language.oop5.autoload.php) pour localiser et inclure tous les fichiers de classes requis. Il fournit un chargeur automatique de classes de haute performance qui est conforme à la [norme PSR-4](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md). Le chargeur automatique est installé lorsque vous incluez le fichier `Yii.php`.
Yii compte sur le [mécanisme de chargement automatique des classes](https://secure.php.net/manual/en/language.oop5.autoload.php) pour localiser et inclure tous les fichiers de classes requis. Il fournit un chargeur automatique de classes de haute performance qui est conforme à la [norme PSR-4](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md). Le chargeur automatique est installé lorsque vous incluez le fichier `Yii.php`.
> Note: pour simplifier la description, dans cette section, nous ne parlerons que du chargement automatique des classes. Néanmoins, gardez présent à l'esprit que le contenu que nous décrivons ici s'applique aussi au chargement automatique des interfaces et des traits.
@ -11,7 +11,7 @@ Utilisation du chargeur automatique de Yii <span id="using-yii-autoloader"></spa
Pour utiliser le chargeur automatique de classes de Yii, vous devez suivre deux règles simples lorsque vous créez et nommez vos classes :
* Chaque classe doit être placée sous un [espace de noms](http://php.net/manual/en/language.namespaces.php) (p. ex. `foo\bar\MyClass`)
* Chaque classe doit être placée sous un [espace de noms](https://secure.php.net/manual/en/language.namespaces.php) (p. ex. `foo\bar\MyClass`)
* Chaque classe doit être sauvegardée sous forme d'un fichier individuel dont le chemin est déterminé par l'algorithme suivant :
```php

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

@ -299,7 +299,7 @@ Il existe plusieurs comportements pré-inclus et extérieurs disponibles :
Comparaison des comportement et des traits <span id="comparison-with-traits"></span>
------------------------------------------
Bien que les comportements soient similaires aux [traits](http://www.php.net/traits) par le fait qu'ils *injectent* tous deux leurs propriétés et leurs méthodes dans la classe primaire, ils diffèrent par de nombreux aspects. Comme nous l'expliquons ci-dessous, ils ont chacun leurs avantages et leurs inconvénients. Ils sont plus des compléments l'un envers l'autre, que des alternatives.
Bien que les comportements soient similaires aux [traits](https://secure.php.net/traits) par le fait qu'ils *injectent* tous deux leurs propriétés et leurs méthodes dans la classe primaire, ils diffèrent par de nombreux aspects. Comme nous l'expliquons ci-dessous, ils ont chacun leurs avantages et leurs inconvénients. Ils sont plus des compléments l'un envers l'autre, que des alternatives.
### Raisons d'utiliser des comportements <span id="pros-for-behaviors"></span>

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

@ -410,7 +410,7 @@ $container->setDefinitions([
]
]);
$reader = $container->get('app\storage\DocumentsReader);
$reader = $container->get('app\storage\DocumentsReader');
// Se comporte exactement comme l'exemple précédent
```

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

@ -9,7 +9,7 @@ Yii introduit une classe de base appelée [[yii\base\Component]] pour prendre en
Gestionnaires d'événements <span id="event-handlers"></span>
--------------------------
Un gestionnaire d'événement est une [fonction de rappel PHP](http://www.php.net/manual/en/language.types.callable.php) qui est exécutée lorsque l'événement à laquelle elle est attachée est déclenché. Vous pouvez utiliser n'importe laquelle des fonctions de rappel suivantes :
Un gestionnaire d'événement est une [fonction de rappel PHP](https://secure.php.net/manual/en/language.types.callable.php) qui est exécutée lorsque l'événement à laquelle elle est attachée est déclenché. Vous pouvez utiliser n'importe laquelle des fonctions de rappel suivantes :
- une fonction PHP globale spécifiée sous forme de chaîne de caractères (sans les parenthèses) p. ex., `'trim'` ;
- une méthode d'objet spécifiée sous forme de tableau constitué d'un nom d'objet et d'un nom de méthode sous forme de chaîne de caractères (sans les parenthèses), p. ex., `[$object, 'methodName']`;

8
docs/guide-fr/db-active-record.md

@ -472,9 +472,9 @@ ou la méthode [[yii\db\ActiveRecord::getOldAttribute()|getOldAttribute()]].
Cela est souvent le cas lorsque le modèle reçoit des entrées utilisateur de formulaires HTML ou chacune des valeurs est représentée par une chaîne de caractères.
Pour garantir le type correct pour p. ex. des valeurs entières, vous devez appliquer un [filtre de validation](input-validation.md#data-filtering):
> `['attributeName', 'filter', 'filter' => 'intval']`.
Cela fonctionne pour toutes les fonctions de transformation de type de PHP comme [intval()](http://php.net/manual/en/function.intval.php),
[floatval()](http://php.net/manual/en/function.floatval.php),
[boolval](http://php.net/manual/en/function.boolval.php), etc...
Cela fonctionne pour toutes les fonctions de transformation de type de PHP comme [intval()](https://secure.php.net/manual/en/function.intval.php),
[floatval()](https://secure.php.net/manual/en/function.floatval.php),
[boolval](https://secure.php.net/manual/en/function.boolval.php), etc...
### Valeurs d'attribut par défaut <span id="default-attribute-values"></span>
@ -688,7 +688,7 @@ try {
```
> Note : dans le code précédent, nous utilisons deux blocs de capture pour être compatible avec PHP 5.x et PHP 7.x.
`\Exception` met en œuvre l'[interface `\Throwable`](http://php.net/manual/en/class.throwable.php)
`\Exception` met en œuvre l'[interface `\Throwable`](https://secure.php.net/manual/en/class.throwable.php)
> à partir de PHP 7.0, c'est pourquoi vous pouvez sauter la partie avec `\Exception` si votre application utilise PHP 7.0 ou une version plus récente.
La deuxième façon consiste à lister les opérations de base de données qui nécessitent une prise en charge transactionnelle dans la méthode [[yii\db\ActiveRecord::transactions()]].

8
docs/guide-fr/db-dao.md

@ -1,7 +1,7 @@
Objets d'accès aux bases de données
===================================
Construits au-dessus des [objets de bases de données PHP (PDO – PHP Data Objects)](http://www.php.net/manual/en/book.pdo.php), les objets d'accès aux bases de données de Yii (DAO – Database Access Objects) fournissent une API orientée objets pour accéder à des bases de données relationnelles. C'est la fondation pour d'autres méthodes d'accès aux bases de données plus avancées qui incluent le [constructeur de requêtes (*query builder*)](db-query-builder.md) et l'[enregistrement actif (*active record*)](db-active-record.md).
Construits au-dessus des [objets de bases de données PHP (PDO – PHP Data Objects)](https://secure.php.net/manual/en/book.pdo.php), les objets d'accès aux bases de données de Yii (DAO – Database Access Objects) fournissent une API orientée objets pour accéder à des bases de données relationnelles. C'est la fondation pour d'autres méthodes d'accès aux bases de données plus avancées qui incluent le [constructeur de requêtes (*query builder*)](db-query-builder.md) et l'[enregistrement actif (*active record*)](db-active-record.md).
Lorsque vous utilisez les objets d'accès aux bases de données de Yii, vous manipulez des requêtes SQL et des tableaux PHP. En conséquence, cela reste le moyen le plus efficace pour accéder aux bases de données. Néanmoins, étant donné que la syntaxe du langage SQL varie selon le type de base de données, l'utilisation des objets d'accès aux bases de données de Yii signifie également que vous avez à faire un travail supplémentaire pour créer une application indifférente au type de base de données.
@ -59,7 +59,7 @@ Vous pouvez ensuite accéder à la base de données via l'expression `Yii::$app-
> Tip: vous pouvez configurer plusieurs composants d'application « base de données » si votre application a besoin d'accéder à plusieurs bases de données.
Lorsque vous configurez une connexion à une base de données, vous devez toujours spécifier le nom de sa source de données (DSN – Data Source Name) via la propriété [[yii\db\Connection::dsn|dsn]]. Les formats des noms de source de données varient selon le type de base de données. Reportez-vous au [manuel de PHP](http://www.php.net/manual/en/function.PDO-construct.php) pour plus de détails. Ci-dessous, nous donnons quelques exemples :
Lorsque vous configurez une connexion à une base de données, vous devez toujours spécifier le nom de sa source de données (DSN – Data Source Name) via la propriété [[yii\db\Connection::dsn|dsn]]. Les formats des noms de source de données varient selon le type de base de données. Reportez-vous au [manuel de PHP](https://secure.php.net/manual/en/function.PDO-construct.php) pour plus de détails. Ci-dessous, nous donnons quelques exemples :
* MySQL, MariaDB: `mysql:host=localhost;dbname=mydatabase`
* SQLite: `sqlite:/path/to/database/file`
@ -164,7 +164,7 @@ $post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status
->queryOne();
```
La liaison des paramètres est implémentée via des [instructions préparées](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php). En plus d'empêcher les attaques par injection SQL, cela peut aussi améliorer la performance en préparant l'instruction SQL une seule fois et l'exécutant de multiples fois avec des paramètres différents. Par exemple :
La liaison des paramètres est implémentée via des [instructions préparées](https://secure.php.net/manual/en/mysqli.quickstart.prepared-statements.php). En plus d'empêcher les attaques par injection SQL, cela peut aussi améliorer la performance en préparant l'instruction SQL une seule fois et l'exécutant de multiples fois avec des paramètres différents. Par exemple :
```php
$command = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id');
@ -330,7 +330,7 @@ try {
En appelant la méthode [[yii\db\Connection::beginTransaction()|beginTransaction()]], une nouvelle transaction est démarrée. La transaction est représentée sous forme d'objet [[yii\db\Transaction]] stocké dans la variable `$transaction`. Ensuite, les requêtes à exécuter sont placées dans un bloc `try...catch...`. Si toutes les requêtes réussissent, la méthode [[yii\db\Transaction::commit()|commit()]] est appelée pour entériner la transaction. Autrement, si une exception a été levée et capturée, la méthode [[yii\db\Transaction::rollBack()|rollBack()]] est appelée pour défaire les changements faits par les requêtes de la transaction antérieures à celle qui a échoué. `throw $e` est alors à nouveau exécutée comme si l'exception n'avait jamais été capturée, ce qui permet au processus normal de gestion des erreurs de s'en occuper.
> Note: dans le code précédent nous avons deux blocs « catch » pour compatibilité
> avec PHP 5.x et PHP 7.x. `\Exception` met en œuvre l'[interface `\Throwable`](http://php.net/manual/en/class.throwable.php)
> avec PHP 5.x et PHP 7.x. `\Exception` met en œuvre l'[interface `\Throwable`](https://secure.php.net/manual/en/class.throwable.php)
> depuis PHP 7.0, ainsi vous pouvez sauter la partie avec `\Exception` si votre application utilise seulement PHP 7.0 et plus récent.
### Spécification de niveaux d'isolation <span id="specifying-isolation-levels"></span>

4
docs/guide-fr/db-query-builder.md

@ -326,7 +326,7 @@ Ainsi l'exemple de code suivant est vulnérable :
```php
// Code vulnérable:
$column = $request->get('column');
$value = $request->get('value);
$value = $request->get('value');
$query->where(['=', $column, $value]);
// $value est sûre, mais le nom $column n'est pas encodé !
```
@ -771,7 +771,7 @@ foreach ($query->each() as $username => $user) {
#### Limitations des requêtes par lots dans MySQL <span id="batch-query-mysql"></span>
La mise en œuvre des requêtes par lots de MySQL s'appuie sur la bibliothèque du pilote PDO. Par défaut, les requêtes MySQL sont
[`mises en tampon`](http://php.net/manual/en/mysqlinfo.concepts.buffering.php).
[`mises en tampon`](https://secure.php.net/manual/en/mysqlinfo.concepts.buffering.php).
Cela empêche d'utiliser le curseur pour obtenir les données, parce que cela n'empêche pas le jeu résultant complet d'être chargé dans la mémoire du client par le pilote.

10
docs/guide-fr/helper-array.md

@ -1,7 +1,7 @@
Classe assistante ArrayHelper
=============================
En plus du jeu riche de [fonctions de tableaux](http://php.net/manual/en/book.array.php) qu'offre PHP, la classe assistante traitant les tableaux dans Yii fournit des méthodes statiques supplémentaires qui vous permettent de traiter les tableaux avec plus d'efficacité.
En plus du jeu riche de [fonctions de tableaux](https://secure.php.net/manual/en/book.array.php) qu'offre PHP, la classe assistante traitant les tableaux dans Yii fournit des méthodes statiques supplémentaires qui vous permettent de traiter les tableaux avec plus d'efficacité.
## Obtention de valeurs <span id="getting-values"></span>
@ -61,7 +61,7 @@ Après exécution du code, `$array` contiendra `['options' => [1, 2]]` et `$type
## Tester l'existence des clés <span id="checking-existence-of-keys"></span>
`ArrayHelper::keyExists` fonctionne comme [array_key_exists](http://php.net/manual/en/function.array-key-exists.php) sauf qu'elle prend également en charge la comparaison de clés insensible à la casse. Par exemple,
`ArrayHelper::keyExists` fonctionne comme [array_key_exists](https://secure.php.net/manual/en/function.array-key-exists.php) sauf qu'elle prend également en charge la comparaison de clés insensible à la casse. Par exemple,
```php
$data1 = [
@ -252,7 +252,7 @@ ArrayHelper::multisort($data, function($item) {
Le troisième argument précise la direction. Dans le cas d'un tri selon une clé unique, il s'agit soit de `SORT_ASC`, soit de `SORT_DESC`. Si le tri se fait selon des valeurs multiples, vous pouvez préciser des directions de tri différentes pour chacune des clés en présentant ces directions sous forme de tableau.
Le dernier argument est une option de tri de PHP qui peut prendre les mêmes valeurs que celles acceptées par la fonction [sort()](http://php.net/manual/en/function.sort.php) de PHP.
Le dernier argument est une option de tri de PHP qui peut prendre les mêmes valeurs que celles acceptées par la fonction [sort()](https://secure.php.net/manual/en/function.sort.php) de PHP.
## Détection des types de tableau <span id="detecting-array-types"></span>
@ -284,7 +284,7 @@ Seules les valeurs sont encodées par défaut. En passant un deuxième argument
## Fusion de tableaux <span id="merging-arrays"></span>
La fonction [[yii\helpers\ArrayHelper::merge()|ArrayHelper::merge()]] vous permet de fusionner deux, ou plus, tableaux en un seul de manière récursive. Si chacun des tableaux possède un élément avec la même chaîne clé valeur, le dernier écrase le premier (ce qui est un fonctionnement différent de [array_merge_recursive()](http://php.net/manual/en/function.array-merge-recursive.php)).
La fonction [[yii\helpers\ArrayHelper::merge()|ArrayHelper::merge()]] vous permet de fusionner deux, ou plus, tableaux en un seul de manière récursive. Si chacun des tableaux possède un élément avec la même chaîne clé valeur, le dernier écrase le premier (ce qui est un fonctionnement différent de [array_merge_recursive()](https://secure.php.net/manual/en/function.array-merge-recursive.php)).
La fusion récursive est entreprise si les deux tableaux possèdent un élément de type tableau avec la même clé. Pour des éléments dont la clé est un entier, les éléments du deuxième tableau sont ajoutés aux éléments du premier tableau. Vous pouvez utiliser l'objet [[yii\helpers\UnsetArrayValue]] pour supprimer la valeur du premier tableau ou [[yii\helpers\ReplaceArrayValue]] pour forcer le remplacement de la première valeur au lieu de la fusion récursive.
Par exemple :
@ -391,7 +391,7 @@ Il est possible de fournir une manière par défaut de convertir un objet en tab
Souvent, vous devez savoir si un élément se trouve dans un tableau ou si un jeu d'éléments est un sous-ensemble d'un autre. Bien que PHP offre la fonction `in_array()`, cette dernière ne prend pas en charge les sous-ensembles ou les objets `\Traversable`.
Pour faciliter ce genre de tests, [[yii\helpers\ArrayHelper]] fournit les méthodes [[yii\helpers\ArrayHelper::isIn()|isIn()]]
et [[yii\helpers\ArrayHelper::isSubset()|isSubset()]] avec la même signature que [in_array()](http://php.net/manual/en/function.in-array.php).
et [[yii\helpers\ArrayHelper::isSubset()|isSubset()]] avec la même signature que [in_array()](https://secure.php.net/manual/en/function.in-array.php).
```php
// true

6
docs/guide-fr/helper-html.md

@ -1,7 +1,7 @@
Classe assistante Html
======================
Toutes les applications Web génèrent un grand nombre de balises HTML. Si le code HTML est statique, il peut être créé efficacement sous forme de [mélange de code PHP et de code HTML dans un seul fichier](http://php.net/manual/en/language.basic-syntax.phpmode.php), mais lorsqu'il est généré dynamiquement, cela commence à être compliqué à gérer sans une aide supplémentaire. Yii fournit une telle aide sous la forme de la classe assistante Html, qui offre un jeu de méthodes statiques pour manipuler les balises Html les plus courantes, leurs options et leur contenu.
Toutes les applications Web génèrent un grand nombre de balises HTML. Si le code HTML est statique, il peut être créé efficacement sous forme de [mélange de code PHP et de code HTML dans un seul fichier](https://secure.php.net/manual/en/language.basic-syntax.phpmode.php), mais lorsqu'il est généré dynamiquement, cela commence à être compliqué à gérer sans une aide supplémentaire. Yii fournit une telle aide sous la forme de la classe assistante Html, qui offre un jeu de méthodes statiques pour manipuler les balises Html les plus courantes, leurs options et leur contenu.
> Note: si votre code HTML est presque statique, il vaut mieux utiliser HTML directement. Il n'est pas nécessaire d'envelopper tout dans des appels aux méthodes de la classe assistante Html.
@ -134,8 +134,8 @@ accepte un tableau de propriétés à retirer. S'il s'agit d'une propriété uni
### Encodage et décodage du contenu <span id="encoding-and-decoding-content"></span>
Pour que le contenu puisse être affiché en HTML de manière propre et en toute sécurité, les caractères spéciaux du contenu doivent être encodés. En PHP, cela s'obtient avec [htmlspecialchars](http://www.php.net/manual/en/function.htmlspecialchars.php) et
[htmlspecialchars_decode](http://www.php.net/manual/en/function.htmlspecialchars-decode.php). Le problème rencontré en utilisant ces méthodes directement est que vous devez spécifier l'encodage et des options supplémentaires tout le temps. Comme ces options restent toujours les mêmes et que l'encodage doit correspondre à celui de l'application pour éviter les problèmes de sécurité, Yii fournit deux méthodes compactes et faciles à utiliser :
Pour que le contenu puisse être affiché en HTML de manière propre et en toute sécurité, les caractères spéciaux du contenu doivent être encodés. En PHP, cela s'obtient avec [htmlspecialchars](https://secure.php.net/manual/en/function.htmlspecialchars.php) et
[htmlspecialchars_decode](https://secure.php.net/manual/en/function.htmlspecialchars-decode.php). Le problème rencontré en utilisant ces méthodes directement est que vous devez spécifier l'encodage et des options supplémentaires tout le temps. Comme ces options restent toujours les mêmes et que l'encodage doit correspondre à celui de l'application pour éviter les problèmes de sécurité, Yii fournit deux méthodes compactes et faciles à utiliser :
```php
$userName = Html::encode($user->name);

2
docs/guide-fr/input-file-upload.md

@ -107,7 +107,7 @@ Dans le code ci-dessus, lorsque le formulaire est soumis, la méthode [[yii\web\
Vous pouvez également charger sur le serveur plusieurs fichiers à la fois, avec quelques ajustements au code présenté dans les sous-sections précédentes.
Tout d'abord, vous devez ajuster la classe du modèle en ajoutant l'option `maxFiles` dans la règle de validation de `file` pour limiter le nombre maximum de fichiers à charger simultanément. Définir `maxFiles` à `0` signifie que ce nombre n'est pas limité. Le nombre maximal de fichiers que l'on peut charger simultanément est aussi limité par la directive PHP [`max_file_uploads`](http://php.net/manual/en/ini.core.php#ini.max-file-uploads), dont la valeur par défaut est 20. La méthode `upload()` doit aussi être modifiée pour permettre la sauvegarde des fichiers un à un.
Tout d'abord, vous devez ajuster la classe du modèle en ajoutant l'option `maxFiles` dans la règle de validation de `file` pour limiter le nombre maximum de fichiers à charger simultanément. Définir `maxFiles` à `0` signifie que ce nombre n'est pas limité. Le nombre maximal de fichiers que l'on peut charger simultanément est aussi limité par la directive PHP [`max_file_uploads`](https://secure.php.net/manual/en/ini.core.php#ini.max-file-uploads), dont la valeur par défaut est 20. La méthode `upload()` doit aussi être modifiée pour permettre la sauvegarde des fichiers un à un.
```php
namespace app\models;

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

@ -31,15 +31,15 @@ Yii 2.0 requiert PHP 5.4 ou plus, ce qui est une grosse amélioration par rappor
Par conséquent, il y a beaucoup de différences au niveau du langage auxquelles vous devriez prêter attention.
Voici un résumé des principaux changements concernant PHP:
- [Espaces de noms](http://php.net/manual/fr/language.namespaces.php).
- [Fonctions anonymes](http://php.net/manual/fr/functions.anonymous.php).
- [Espaces de noms](https://secure.php.net/manual/fr/language.namespaces.php).
- [Fonctions anonymes](https://secure.php.net/manual/fr/functions.anonymous.php).
- Syntaxe courte pour les tableaux : `[...éléments...]` est utilisé au lieu de `array(...éléments...)`.
- Syntaxe courte pour echo : `<?=` est utilisé dans les vues. Cela ne pose aucun problème à partir de PHP 5.4.
- [Classes SPL et interfaces](http://php.net/manual/fr/book.spl.php).
- [Late Static Bindings (résolution statique à la volée)](http://php.net/manual/fr/language.oop5.late-static-bindings.php).
- [Date et heure](http://php.net/manual/fr/book.datetime.php).
- [Traits](http://php.net/manual/fr/language.oop5.traits.php).
- [intl](http://php.net/manual/fr/book.intl.php). Yii 2.0 utilise l'extension PHP `intl` pour les fonctionnalités
- [Classes SPL et interfaces](https://secure.php.net/manual/fr/book.spl.php).
- [Late Static Bindings (résolution statique à la volée)](https://secure.php.net/manual/fr/language.oop5.late-static-bindings.php).
- [Date et heure](https://secure.php.net/manual/fr/book.datetime.php).
- [Traits](https://secure.php.net/manual/fr/language.oop5.traits.php).
- [intl](https://secure.php.net/manual/fr/book.intl.php). Yii 2.0 utilise l'extension PHP `intl` pour les fonctionnalités
d'internationalisation.
@ -293,7 +293,7 @@ Reportez-vous à la section [Commandes console](tutorial-console.md) pour plus d
I18N
----
Yii 2.0 supprime les fonctionnalités internes de formatage des dates et des nombres, en faveur du [module PHP PECL intl](http://pecl.php.net/package/intl).
Yii 2.0 supprime les fonctionnalités internes de formatage des dates et des nombres, en faveur du [module PHP PECL intl](https://pecl.php.net/package/intl).
La traduction des messages est désormais effectuée via le composant d'application `i18n`.
Ce composant gère un ensemble de sources de messages, ce qui vous permet d'utiliser différentes

2
docs/guide-fr/intro-yii.md

@ -51,6 +51,6 @@ Yii 2.0 nécessite PHP 5.4.0 ou plus. Vous pouvez trouver plus de détails sur l
en utilisant le script de test de la configuration inclus dans chaque distribution de Yii.
Utiliser Yii requiert des connaissances de base sur la programmation objet (OOP), en effet Yii est un framework basé sur ce type de programmation.
Yii 2.0 utilise aussi des fonctionnalités récentes de PHP, telles que les [espaces de noms](http://www.php.net/manual/fr/language.namespaces.php) et les [traits](http://www.php.net/manual/fr/language.oop5.traits.php).
Yii 2.0 utilise aussi des fonctionnalités récentes de PHP, telles que les [espaces de noms](https://secure.php.net/manual/fr/language.namespaces.php) et les [traits](https://secure.php.net/manual/fr/language.oop5.traits.php).
Comprendre ces concepts vous aidera à mieux prendre en main Yii.

6
docs/guide-fr/output-data-widgets.md

@ -4,7 +4,7 @@ Composants graphiques d'affichage de données
Yii fournit un jeu de [composants graphiques](structure-widgets.md) utilisables pour afficher des données. Tandis que le componsant graphique [DetailView](#detail-view) (vue détaillée) peut être utilisé pour afficher un enregistrement unique, les composants graphiques [ListView](#list-view) (vue en liste) et [GridView](#grid-view) (vue en grille) peuvent être utilisés pour afficher plusieurs enregistrements en liste ou en grille assortis de fonctionnalités telles que la pagination, le tri et le filtrage.
Vue détaillée (classe *DetailView*) <a name="detail-view"></a>
Vue détaillée (classe *DetailView*) <span id="detail-view"></span>
----------------------------------
Le composant graphique [[yii\widgets\DetailView|DetailView]] (vue détaillée) affiche les détails d'un [[yii\widgets\DetailView::$model|modèle]] de données unique.
@ -30,7 +30,7 @@ echo DetailView::widget([
]);
```
Vue en liste (class *ListView*)<a name="list-view"></a>
Vue en liste (class *ListView*)<span id="list-view"></span>
------------------------------
Le composant graphique [[yii\widgets\ListView|ListView]] (vue en liste) est utilisé pour afficher des données issues d'un [fournisseur de données](output-data-providers.md). Chacun des modèles est rendu en utilisant le composant [[yii\widgets\ListView::$itemView|ListView]] (vue en liste) spécifié. Comme ce composant fournit des fonctionnalités telles que la pagination, le tri et le filtrage de base, il est pratique, à la fois pour afficher des informations et pour créer des interfaces utilisateur de gestion des données.
@ -90,7 +90,7 @@ echo ListView::widget([
Celles-ci sont alors disponibles aussi dans la vue en tant que variables.
Vue en grille (classe *GridView*)<a name="grid-view"></a>
Vue en grille (classe *GridView*)<span id="grid-view"></span>
--------------------------------
La vue en grille, ou composant [[yii\grid\GridView|GridView]], est un des composants les plus puissants de Yii. Ce composant est extrêmement utile si vous devez rapidement construire l'interface d'administration du système. Il accepte des données d'un [fournisseur de données](output-data-providers.md) et rend chacune des lignes en utilisant un jeu de [[yii\grid\GridView::columns|columns]] (colonnes), présentant ainsi l'ensemble des données sous forme d'une grille.

8
docs/guide-fr/output-formatting.md

@ -35,7 +35,7 @@ echo Yii::$app->formatter->format('2014-01-01', 'date');
echo Yii::$app->formatter->format(0.125, ['percent', 2]);
```
> Note: le composant de formatage est conçu pour formater des valeurs à présenter à l'utilisateur. Si vous voulez convertir des entrées utilisateur en un format lisible par la machine, ou simplement formater une date dans un format lisible par la machine, le formateur n'est pas l'outil adapté à cela. Pour convertir une entrée utilisateur pour une date et un temps, vous pouvez utiliser [[yii\validators\DateValidator]] et [[yii\validators\NumberValidator]] respectivement. Pour une simple conversion entre les formats lisibles par la machine de date et de temps, la fonction PHP [date()](http://php.net/manual/en/function.date.php) suffit.
> Note: le composant de formatage est conçu pour formater des valeurs à présenter à l'utilisateur. Si vous voulez convertir des entrées utilisateur en un format lisible par la machine, ou simplement formater une date dans un format lisible par la machine, le formateur n'est pas l'outil adapté à cela. Pour convertir une entrée utilisateur pour une date et un temps, vous pouvez utiliser [[yii\validators\DateValidator]] et [[yii\validators\NumberValidator]] respectivement. Pour une simple conversion entre les formats lisibles par la machine de date et de temps, la fonction PHP [date()](https://secure.php.net/manual/en/function.date.php) suffit.
## Configuration du formateur <span id="configuring-formatter"></span>
@ -71,7 +71,7 @@ Le formateur prend en charge les formats de sortie suivants en relation avec les
Les formats par défaut pour les dates et les temps utilisés pour les méthodes [[yii\i18n\Formatter::asDate()|date]], [[yii\i18n\Formatter::asTime()|time]],
et [[yii\i18n\Formatter::asDatetime()|datetime]] peuvent être configurés globalement en configurant [[yii\i18n\Formatter::dateFormat|dateFormat]], [[yii\i18n\Formatter::timeFormat|timeFormat]], et [[yii\i18n\Formatter::datetimeFormat|datetimeFormat]].
Vous pouvez spécifier les formats de date et de temps en utilisant la [syntaxe ICU](http://userguide.icu-project.org/formatparse/datetime). Vous pouvez aussi utiliser la [syntaxe date() de PHP](http://php.net/manual/en/function.date.php) avec le préfixe `php:` pour la différentier de la syntaxe ICU. Par exemple :
Vous pouvez spécifier les formats de date et de temps en utilisant la [syntaxe ICU](http://userguide.icu-project.org/formatparse/datetime). Vous pouvez aussi utiliser la [syntaxe date() de PHP](https://secure.php.net/manual/en/function.date.php) avec le préfixe `php:` pour la différentier de la syntaxe ICU. Par exemple :
```php
// format ICU
@ -125,7 +125,7 @@ Pour les nombres, le formateur prend en charge les formats de sortie suivants :
Le format pour un nombre peut être ajusté en utilisant [[yii\i18n\Formatter::decimalSeparator|decimalSeparator (séparateur de décimales)]] et
[[yii\i18n\Formatter::thousandSeparator|thousandSeparator (séparateur de milliers) ]], qui prennent tous les deux les valeurs par défaut déterminées par la [[yii\i18n\Formatter::locale|locale]] courante.
Pour une configuration plus avancée, [[yii\i18n\Formatter::numberFormatterOptions]] et [[yii\i18n\Formatter::numberFormatterTextOptions]] peuvent être utilisés pour configurer la classe [NumberFormater (formateur de nombres)](http://php.net/manual/en/class.numberformatter.php) utilisée en interne pour implémenter le formateur. Par exemple, pour ajuster la valeur minimum et maximum des chiffres fractionnaires, vous pouvez configurer la propriété [[yii\i18n\Formatter::numberFormatterOptions]] comme ceci :
Pour une configuration plus avancée, [[yii\i18n\Formatter::numberFormatterOptions]] et [[yii\i18n\Formatter::numberFormatterTextOptions]] peuvent être utilisés pour configurer la classe [NumberFormater (formateur de nombres)](https://secure.php.net/manual/en/class.numberformatter.php) utilisée en interne pour implémenter le formateur. Par exemple, pour ajuster la valeur minimum et maximum des chiffres fractionnaires, vous pouvez configurer la propriété [[yii\i18n\Formatter::numberFormatterOptions]] comme ceci :
```php
'numberFormatterOptions' => [
@ -172,7 +172,7 @@ echo Yii::$app->formatter->asDate('2014-01-01'); // affiche : 1 января 20
Par défaut, la [[yii\i18n\Formatter::locale|locale]] est déterminée par la valeur de [[yii\base\Application::language]]. Vous pouvez la redéfinir en définissant la propriété [[yii\i18n\Formatter::locale]] explicitement.
> Note: le formateur de Yii a besoin de l'[extension intl de PHP](http://php.net/manual/en/book.intl.php) pour prendre en charge la localisation des formats de données. Parce que différentes versions de la bibliothèque ICU compilées par PHP produisent des résultats de formatage différents, il est recommandé que vous utilisiez la même version de la bibliothèque ICU pour tous vos environnements. Pour plus de détails, reportez-vous au tutoriel [Configuration de votre environnement PHP pour l'internationalisation](tutorial-i18n.md#setup-environment).
> Note: le formateur de Yii a besoin de l'[extension intl de PHP](https://secure.php.net/manual/en/book.intl.php) pour prendre en charge la localisation des formats de données. Parce que différentes versions de la bibliothèque ICU compilées par PHP produisent des résultats de formatage différents, il est recommandé que vous utilisiez la même version de la bibliothèque ICU pour tous vos environnements. Pour plus de détails, reportez-vous au tutoriel [Configuration de votre environnement PHP pour l'internationalisation](tutorial-i18n.md#setup-environment).
>
> Si l'extension intl extension n'est pas installée, les données ne sont pas localisées.
>

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

@ -21,7 +21,7 @@ Comme le travail d'amorçage doit être fait avant *chacune* des requêtes, il e
Dans le mode production, activez un cache bytecode, tel que [PHP OPcache] ou [APC], pour minimiser le temps nécessaire à l'inclusion et à l'analyse des fichiers PHP.
[PHP OPcache]: http://php.net/manual/en/intro.opcache.php
[APC]: http://php.net/manual/en/book.apc.php
[PHP OPcache]: https://secure.php.net/manual/en/intro.opcache.php
[APC]: https://secure.php.net/manual/en/book.apc.php
Quelques applications volumineuses ont des [configurations](concept-configurations.md) d'application très complexes qui sont divisées en fichiers de configuration plus petits. Si c'est le cas, envisagez de mettre tout le tableau de configuration en cache et de le charger directement à partir cache avant la création de l'instance d'application dans le script d'entrée.

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

@ -93,7 +93,7 @@ et avant le nom du script d'entrée.
## Enntêtes HTTP <span id="http-headers"></span>
## Entêtes HTTP <span id="http-headers"></span>
Vous pouvez obtenir les entêtes HTTP via la [[yii\web\HeaderCollection|collection d'entêtes]] qui est retournée par la propriété [[yii\web\Request::headers]]. Par exemple :

2
docs/guide-fr/security-passwords.md

@ -5,7 +5,7 @@ La plupart des développeurs savent que les mots de passe ne peuvent pas être s
Pour apporter une sécurité améliorée pour les mots de passe des utilisateurs, même dans le pire des scénario (une brèche est ouverte dans votre application), vous devez utiliser des algorithmes de hachage qui résistent aux attaques en force brute. Le choix le meilleur couramment utilisé est `bcrypt`.
En PHP, vous pouvez créer une valeur de hachage `bcrypt` à l'aide de la [fonction crypt](http://php.net/manual/en/function.crypt.php). Yii fournit deux fonctions d'aide qui facilitent l'utilisation de `crypt` pour générer et vérifier des valeurs de hachage de manière sure.
En PHP, vous pouvez créer une valeur de hachage `bcrypt` à l'aide de la [fonction crypt](https://secure.php.net/manual/en/function.crypt.php). Yii fournit deux fonctions d'aide qui facilitent l'utilisation de `crypt` pour générer et vérifier des valeurs de hachage de manière sure.
Quand un utilisateur fournit un mot de passe pour la première fois (p. ex. à l'enregistrement), le mot de passe doit être haché :

2
docs/guide-fr/start-databases.md

@ -53,7 +53,7 @@ Configurer une Connexion à la BDD <span id="configuring-db-connection"></span>
---------------------------
Avant de continuer, vérifiez que vous avez installé à la fois l'extension PHP
[PDO](http://www.php.net/manual/fr/book.pdo.php) et le pilote PDO pour la base de données que vous utilisez (c'est
[PDO](https://secure.php.net/manual/fr/book.pdo.php) et le pilote PDO pour la base de données que vous utilisez (c'est
à dire `pdo_mysql` pour MySQL). C'est une exigence de base si votre application utilise une base de données relationnelle.
Une fois ces éléments installés, ouvrez le fichier `config/db.php` et modifiez les paramètres pour qu'ils correspondent à votre base de données. Par défaut, le fichier contient ce qui suit :

27
docs/guide-fr/start-installation.md

@ -15,14 +15,14 @@ Dans cette section et quelques-unes de ses suivantes, nous décrirons comment in
Installer via Composer <span id="installing-via-composer"></span>
----------------------
###Installer Composer
### Installer Composer
Si vous n'avez pas déjà installé Composer, vous pouvez le faire en suivant les instructions du site [getcomposer.org](https://getcomposer.org/download/).
Sous Linux et Mac OS X, vous pouvez exécuter les commandes :
```bash
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
```
Sous Windows, téléchargez et exécutez [Composer-Setup.exe](https://getcomposer.org/Composer-Setup.exe).
@ -39,12 +39,12 @@ Si Composer était déjà installé auparavant, assurez-vous d'utiliser une vers
> Reportez-vous à la [documentation de Composer sur les jetons de l'API Github](https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens)
> pour savoir comment procéder.
###Installer Yii <span id="installing-from-composer"></span>
### Installer Yii <span id="installing-from-composer"></span>
Avec Composer installé, vous pouvez installer le modèle de projet Yii en exécutant la commande suivante dans un dossier accessible via le Web :
```bash
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
```
Cette commande installera la dernière version stable du modèle de projet Yii dans le dossier `basic`. Vous êtes libre de choisir un autre dossier si vous le désirez.
@ -53,11 +53,10 @@ Cette commande installera la dernière version stable du modèle de projet Yii d
> [Troubleshooting (résolution des problèmes) de la documentation de Composer](https://getcomposer.org/doc/articles/troubleshooting.md)
> pour les erreurs communes. Une fois l'erreur corrigée, vous pouvez reprendre l'installation avortée en exécutant `composer update` dans le dossier `basic` (ou celui que vous aviez choisi).
> Tip: si vous souhaitez installer la dernière version de développement de Yii, vous pouvez utiliser la commande suivante qui ajoutera l'[option stability](https://getcomposer.org/doc/04-schema.md#minimum-stability) :
>
>```bash
> composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
>composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
>```
>
> Notez que la version de développement de Yii ne doit pas être utilisée en production, vu qu'elle pourrait *casser* votre code existant.
@ -73,9 +72,9 @@ Installer Yii depuis une archive se fait en trois étapes :
3. Modifier le fichier `config/web.php` en entrant une clé secrète pour la configuration de `cookieValidationKey` (cela est fait automatiquement si vous installez Yii avec Composer) :
```php
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => 'enter your secret key here',
```
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => 'enter your secret key here',
```
Autres options d'installation <span id="other-installation-options"></span>
@ -116,7 +115,7 @@ Afin d'empêcher l'installation des « assets » via Composer, ajoutez les lig
Vérifier l'installation <span id="verifying-installation"></span>
-----------------------
Après l'installation, vous pouvez, soit configurer votre serveur Web (voir section suivante), soit utiliser le [serveur PHP web incorporé](https://secure.php.net/manual/fr/features.commandline.webserver.php) en utilisant la commande en console suivante depuis le dossier `web` de votre projet :
Après l'installation, vous pouvez, soit configurer votre serveur Web (voir section suivante), soit utiliser le [serveur PHP web incorporé](https://secure.php.net/manual/fr/features.commandline.webserver.php) en utilisant la commande en console suivante depuis le dossier racine de votre projet :
```bash
php yii serve
@ -146,7 +145,7 @@ Vous devriez voir dans votre navigateur la page ci-dessus. Sinon, merci de véri
php requirements.php
```
Vous devez configurer votre installation de PHP afin qu'elle réponde aux exigences minimales de Yii. Le plus important étant que vous ayez PHP 5.4 ou plus, idéalement PHP 7. Si votre application a besoin d'une base de données, vous devez également installer l'[extension PHP PDO](http://www.php.net/manual/fr/pdo.installation.php) ainsi qu'un pilote correspondant à votre système de base de données (par exemple `pdo_mysql` pour MySQL).
Vous devez configurer votre installation de PHP afin qu'elle réponde aux exigences minimales de Yii. Le plus important étant que vous ayez PHP 5.4 ou plus, idéalement PHP 7. Si votre application a besoin d'une base de données, vous devez également installer l'[extension PHP PDO](https://secure.php.net/manual/fr/pdo.installation.php) ainsi qu'un pilote correspondant à votre système de base de données (par exemple `pdo_mysql` pour MySQL).
Configuration du serveur Web <span id="configuring-web-servers"></span>
@ -195,7 +194,7 @@ DocumentRoot "path/to/basic/web"
### Configuration Nginx recommandée <span id="recommended-nginx-configuration"></span>
Pour utiliser Nginx, vous devez avoir installé PHP en utilisant [FPM SAPI](http://php.net/install.fpm).
Pour utiliser Nginx, vous devez avoir installé PHP en utilisant [FPM SAPI](https://secure.php.net/install.fpm).
Utilisez la configuration Nginx suivante, en remplaçant `path/to/basic/web` par le chemin vers le dossier `basic/web` et `mysite.test` par le nom d'hôte de votre serveur.
```nginx

2
docs/guide-fr/start-prerequisites.md

@ -4,7 +4,7 @@ La courbe d'apprentissage de Yii n’est pas aussi raide que celle des autres fr
## PHP
Yii un framework (base structurée de développement) en PHP. C’est pourquoi vous devez vous assurer de [maîtriser ce langage en comprenant sa référence](http://php.net/manual/fr/langref.php).
Yii un framework (base structurée de développement) en PHP. C’est pourquoi vous devez vous assurer de [maîtriser ce langage en comprenant sa référence](https://secure.php.net/manual/fr/langref.php).
Lors de votre développement avec Yii, vous écrirez du code dans le style « orienté objet ». Vous devez donc être familiarisé avec les [Classes et Objets](https://secure.php.net/manual/fr/language.oop5.basic.php), ainsi qu'avec les [espaces de noms](https://secure.php.net/manual/fr/language.namespaces.php).
## Programmation orientée Objet

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

@ -306,7 +306,7 @@ Pour plus d'informations sur cette propriété, reportez-vous à la section [Int
Cette propriété est fournie comme une manière alternative de définir le fuseau horaire par défaut au moment de l'exécution du script PHP.
En configurant cette propriété, vous ne faites essentiellement qu'appeler la fonction PHP
[date_default_timezone_set()](http://php.net/manual/en/function.date-default-timezone-set.php). Par exemple :
[date_default_timezone_set()](https://secure.php.net/manual/en/function.date-default-timezone-set.php). Par exemple :
```php
[

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

@ -88,6 +88,7 @@ Yii fournit un jeu de filtres couramment utilisés, que l'on trouve en premier l
*AccessControl* (contrôle d'accès) fournit un contrôle d'accès simple basé sur un jeu de [[yii\filters\AccessControl::rules|règles]]. En particulier, avant qu'une action ne soit exécutée, *AccessControl* examine les règles listées et trouve la première qui correspond aux variables du contexte courant (comme l'adresse IP, l'état de connexion de l'utilisateur, etc.). La règle qui correspond détermine si l'exécution de l'action requise doit être autorisée ou refusée. Si aucune des règles ne correspond, l'accès est refusé.
L'exemple suivant montre comment autoriser les utilisateurs authentifiés à accéder aux actions `create` et `update` tout en refusant l'accès à ces actions aux autres utilisateurs.
```php
use yii\filters\AccessControl;
@ -141,6 +142,7 @@ Les filtres de méthode d'authentification sont communément utilisés dans la m
*ContentNegotiator* (négociateur de contenu) prend en charge la négociation des formats de réponse et la négociation de langue d'application. Il essaye de déterminer le format de la réponse et/ou la langue en examinant les paramètres de la méthode `GET` et ceux de l'entête HTTP `Accept`.
Dans l'exemple qui suit, le filtre *ContentNegotiator* est configuré pour prendre en charge JSON et XML en tant que formats de réponse, et anglais (États-Unis) et allemand en tant que langues.
```php
use yii\filters\ContentNegotiator;
use yii\web\Response;

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

@ -31,7 +31,7 @@ $model->name = 'example';
echo $model->name;
```
Vous pouvez également accéder aux attributs comme aux éléments d'un tableau, grâce à la prise en charge de [ArrayAccess](http://php.net/manual/en/class.arrayaccess.php) et [ArrayIterator](http://php.net/manual/en/class.arrayiterator.php)
Vous pouvez également accéder aux attributs comme aux éléments d'un tableau, grâce à la prise en charge de [ArrayAccess](https://secure.php.net/manual/en/class.arrayaccess.php) et [ArrayIterator](https://secure.php.net/manual/en/class.arrayiterator.php)
par la classe [[yii\base\Model]]:
```php

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

@ -52,7 +52,7 @@ use yii\helpers\Html;
Notez que contrairement à la méthode [[yii\base\Widget::widget()]] qui retourne le résultat du rendu d'un objet graphique, la méthode [[yii\base\Widget::begin()]] retourne une instance de l'objet graphique que vous pouvez utiliser pour construire le contenu de l'objet d'interface.
> Note: quelques objets graphiques utilisent [la mise en tampon de sortie](http://php.net/manual/en/book.outcontrol.php)
> Note: quelques objets graphiques utilisent [la mise en tampon de sortie](https://secure.php.net/manual/en/book.outcontrol.php)
> pour ajuster le contenu inclus quand la méthode [[yii\base\Widget::end()]] est appelée.
> Pour cette raison, l'appel des méthodes [[yii\base\Widget::begin()]] et
> [[yii\base\Widget::end()]] est attendu dans le même fichier de vue.

10
docs/guide-fr/tutorial-i18n.md

@ -149,7 +149,7 @@ $price = 100;
echo \Yii::t('app', 'Price: {0,number,currency}', $price);
```
> Note: le formatage des valeurs de remplacement nécessite l'installation de [extension intl de PHP](http://www.php.net/manual/en/intro.intl.php).
> Note: le formatage des valeurs de remplacement nécessite l'installation de [extension intl de PHP](https://secure.php.net/manual/en/intro.intl.php).
Vous pouvez utiliser, soit la forme raccourcie, soit la forme complète pour spécifier une valeur à remplacer avec un format :
```
@ -582,7 +582,7 @@ Si [[yii\i18n\MissingTranslationEvent::translatedMessage]] est défini par le ge
> Note: chacune des sources de messages gère ses traductions manquantes séparément. Si vous avez recours à plusieurs sources de messages et que vous voulez qu'elles gèrent les messages manquants de la même manière, vous devez assigner le gestionnaire d'événement correspondant à chacune d'entre-elles.
### Utilisation de la commande `message`<a name="message-command"></a>
### Utilisation de la commande `message`<span id="message-command"></span>
Les traductions peuvent être stockées dans des [[yii\i18n\PhpMessageSource|fichiers php]], des [[yii\i18n\GettextMessageSource|fichiers .po ]] ou dans une [[yii\i18n\DbMessageSource|bases de données]]. Reportez-vous aux classes spécifiques pour connaître les options supplémentaires.
@ -637,9 +637,9 @@ Reportez-vous à la section [Formatage des données](output-formatting.md) pour
## Configuration de l'environnement PHP <span id="setup-environment"></span>
Yii utilise l'[extension intl de PHP](http://php.net/manual/en/book.intl.php) pour fournir la plupart de ses fonctionnalités d'internationalisation, telles que le formatage des dates et des nombres de la classe [[yii\i18n\Formatter]] et le formatage des messages de la classe [[yii\i18n\MessageFormatter]].
Yii utilise l'[extension intl de PHP](https://secure.php.net/manual/en/book.intl.php) pour fournir la plupart de ses fonctionnalités d'internationalisation, telles que le formatage des dates et des nombres de la classe [[yii\i18n\Formatter]] et le formatage des messages de la classe [[yii\i18n\MessageFormatter]].
Les deux classes fournissent un mécanisme de remplacement lorsque l'extension `intl` n'est pas installée. Néanmoins, l'implémentation du mécanisme de remplacement ne fonctionne bien que quand la langue cible est l'anglais. C'est pourquoi, il est fortement recommandé d'installer `intl` quand c'est nécessaire.
L'[extension intl de PHP](http://php.net/manual/en/book.intl.php) est basée sur la [bibliothèque ICU](http://site.icu-project.org/) qui fournit la base de connaissances et les règles de formatage pour les différentes locales. Des versions différentes d'ICU peuvent conduire à des formatages différents des dates et des nombres. Pour être sûr que votre site Web donne les même résultats dans tous les environnements, il est recommandé d'installer la même version de l'extension `intl` (et par conséquent la même version d'ICU) dans tous les environnements.
L'[extension intl de PHP](https://secure.php.net/manual/en/book.intl.php) est basée sur la [bibliothèque ICU](http://site.icu-project.org/) qui fournit la base de connaissances et les règles de formatage pour les différentes locales. Des versions différentes d'ICU peuvent conduire à des formatages différents des dates et des nombres. Pour être sûr que votre site Web donne les même résultats dans tous les environnements, il est recommandé d'installer la même version de l'extension `intl` (et par conséquent la même version d'ICU) dans tous les environnements.
Pour savoir quelle version d'ICU est utilisée par PHP, vous pouvez exécuter le script suivant, qui vous restitue la version de PHP et d'ICU en cours d'utilisation.
@ -652,4 +652,4 @@ echo "ICU Data: " . INTL_ICU_DATA_VERSION . "\n";
Il est également recommandé d'utiliser une version d'ICU supérieure ou égale à 48. Cela garantit que toutes les fonctionnalités décrites dans ce document sont utilisables. Par exemple, une version d'ICU inférieure à 49 ne prend pas en charge la valeur à remplacer `#` dans les règles de pluralisation. Reportez-vous à <http://site.icu-project.org/download> pour obtenir une liste complète des versions d'ICU disponibles. Notez que le numérotage des versions a changé après la version 4.8 (p. ex., ICU 4.8, ICU 49, ICU 50, etc.)
En outre, les informations dans la base de donnée des fuseaux horaires fournie par la bibliothèque ICU peuvent être surannées. Reportez-vous au [manuel d'ICU](http://userguide.icu-project.org/datetime/timezone#TOC-Updating-the-Time-Zone-Data) pour les détails sur la manière de mettre la base de données des fuseaux horaires à jour. Bien que la base de données des fuseaux horaires d'ICU soit utilisée pour le formatage, celle de PHP peut aussi être d'actualité. Vous pouvez la mettre à jour en installant la dernière version du [paquet `timezonedb` de pecl](http://pecl.php.net/package/timezonedb).
En outre, les informations dans la base de donnée des fuseaux horaires fournie par la bibliothèque ICU peuvent être surannées. Reportez-vous au [manuel d'ICU](http://userguide.icu-project.org/datetime/timezone#TOC-Updating-the-Time-Zone-Data) pour les détails sur la manière de mettre la base de données des fuseaux horaires à jour. Bien que la base de données des fuseaux horaires d'ICU soit utilisée pour le formatage, celle de PHP peut aussi être d'actualité. Vous pouvez la mettre à jour en installant la dernière version du [paquet `timezonedb` de pecl](https://pecl.php.net/package/timezonedb).

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

@ -29,15 +29,15 @@ Yii 2.0 membutuhkan PHP 5.4 atau versi lebih tinggi, yang merupakan perbaikan be
Akibatnya, ada banyak perbedaan pada tingkat bahasa yang harus Anda perhatikan.
Di bawah ini adalah ringkasan perubahan utama mengenai PHP:
- [Namespaces](http://php.net/manual/en/language.namespaces.php).
- [Anonymous fungsi](http://php.net/manual/en/functions.anonymous.php).
- [Namespaces](https://secure.php.net/manual/en/language.namespaces.php).
- [Anonymous fungsi](https://secure.php.net/manual/en/functions.anonymous.php).
- Sintaks array pendek `[... elemen ...]` digunakan sebagai pengganti `array (... elemen ...)`.
- Tags echo pendek `<=` digunakan dalam tampilan file. Ini aman digunakan mulai dari PHP 5.4.
- [Class SPL dan interface](http://php.net/manual/en/book.spl.php).
- [Late Static Bindings](http://php.net/manual/en/language.oop5.late-static-bindings.php).
- [Tanggal dan Waktu](http://php.net/manual/en/book.datetime.php).
- [Traits](http://php.net/manual/en/language.oop5.traits.php).
- [Intl](http://php.net/manual/en/book.intl.php). Yii 2.0 menggunakan `ekstensi PHP intl`
- [Class SPL dan interface](https://secure.php.net/manual/en/book.spl.php).
- [Late Static Bindings](https://secure.php.net/manual/en/language.oop5.late-static-bindings.php).
- [Tanggal dan Waktu](https://secure.php.net/manual/en/book.datetime.php).
- [Traits](https://secure.php.net/manual/en/language.oop5.traits.php).
- [Intl](https://secure.php.net/manual/en/book.intl.php). Yii 2.0 menggunakan `ekstensi PHP intl`
  untuk mendukung fitur internasionalisasi.
@ -292,7 +292,7 @@ Silakan lihat bagian [Console Commands](tutorial-console.md) untuk lebih jelasny
I18N
----
Yii 2,0 menghilangkan formater tanggal dan angka terpasang bagian dari [PECL modul intl PHP](http://pecl.php.net/package/intl).
Yii 2,0 menghilangkan formater tanggal dan angka terpasang bagian dari [PECL modul intl PHP](https://pecl.php.net/package/intl).
Penterjemahan pesan sekarang dilakukan melalui komponen aplikasi `i18n`.
Komponen ini mengelola satu set sumber pesan, yang memungkinkan Anda untuk menggunakan pesan yang berbeda

2
docs/guide-id/intro-yii.md

@ -48,5 +48,5 @@ Yii 2.0 memerlukan PHP 5.4.0 atau versi lebih tinggi. Anda dapat menemukan persy
dengan menjalankan pengecek persyaratan yang diikutsertakan dalam setiap rilis Yii.
Menggunakan Yii memerlukan pengetahuan dasar tentang pemrograman berorientasi objek (OOP), mengingat Yii adalah framework berbasis OOP murni.
Yii 2.0 juga memanfaatkan fitur terbaru dari PHP, seperti [namespace](http://www.php.net/manual/en/language.namespaces.php) dan [traits](http://www.php.net/manual/en/language.oop5.traits.php).
Yii 2.0 juga memanfaatkan fitur terbaru dari PHP, seperti [namespace](https://secure.php.net/manual/en/language.namespaces.php) dan [traits](https://secure.php.net/manual/en/language.oop5.traits.php).
Memahami konsep-konsep ini akan membantu Anda lebih mudah memahami Yii 2.0.

2
docs/guide-id/start-databases.md

@ -49,7 +49,7 @@ Hingga saat ini, anda memiliki database bernama `yii2basic`, dan didalamnya terd
Konfigurasi Koneksi Database <span id="configuring-db-connection"></span>
---------------------------
Sebelum melanjutkan, pastikan anda memasang ekstensi PHP [PDO](http://www.php.net/manual/en/book.pdo.php) dan
Sebelum melanjutkan, pastikan anda memasang ekstensi PHP [PDO](https://secure.php.net/manual/en/book.pdo.php) dan
driver PDO untuk database yang anda gunakan (misal, `pdo_mysql` untuk MySQL). Ini adalah kebutuhan mendasar
jika aplikasi anda menggunakan _relational database_.

4
docs/guide-id/start-installation.md

@ -131,7 +131,7 @@ persyaratan Yii. Anda dapat memeriksa apakah persyaratan minimumnya cocok dengan
  ```
Anda harus mengkonfigurasi instalasi PHP Anda sehingga memenuhi persyaratan minimal Yii. Yang paling penting, Anda
harus memiliki PHP versi 5.4 atau lebih. Anda juga harus menginstal [PDO PHP Ekstensi](http://www.php.net/manual/en/pdo.installation.php)
harus memiliki PHP versi 5.4 atau lebih. Anda juga harus menginstal [PDO PHP Ekstensi](https://secure.php.net/manual/en/pdo.installation.php)
dan driver database yang sesuai (seperti `pdo_mysql` untuk database MySQL), jika aplikasi Anda membutuhkan database.
@ -187,7 +187,7 @@ DocumentRoot "path/to/basic/web"
### Konfigurasi Nginx yang Direkomendasikan<span id="recommended-nginx-configuration"></span>
Untuk menggunakan [Nginx](http://wiki.nginx.org/), Anda harus menginstal PHP sebagai [FPM SAPI](http://php.net/install.fpm).
Untuk menggunakan [Nginx](http://wiki.nginx.org/), Anda harus menginstal PHP sebagai [FPM SAPI](https://secure.php.net/install.fpm).
Anda dapat menggunakan konfigurasi Nginx berikut, menggantikan `path/to/basic/web` dengan path yang sebenarnya untuk
`basic/web` dan `mysite.test` dengan hostname yang sebenarnya untuk server.

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

@ -356,7 +356,7 @@ Untuk informasi lebih lanjut mengenai _property_ ini bisa anda pelajari pada bag
_Property_ ini disediakan sebagai cara alternatif untuk menentukan zona waktu default dari _PHP runtime_.
Dengan menentukan _property_ ini, pada dasarnya anda memanggil _function_ PHP
[date_default_timezone_set()](http://php.net/manual/en/function.date-default-timezone-set.php). Sebagi contoh:
[date_default_timezone_set()](https://secure.php.net/manual/en/function.date-default-timezone-set.php). Sebagi contoh:
```php
[

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

@ -28,15 +28,15 @@ Yii 2.0 richiede PHP 5.4 o superiore, il che è un passaggio notevole rispetto a
Di conseguenza ci sono diverse differenze a livello di linguaggio a cui devi fare attenzione.
Di seguito un riepilogo delle principali differenze relative a PHP:
- [Namespace](http://php.net/manual/en/language.namespaces.php).
- [Funzioni anonime](http://php.net/manual/en/functions.anonymous.php).
- [Namespace](https://secure.php.net/manual/en/language.namespaces.php).
- [Funzioni anonime](https://secure.php.net/manual/en/functions.anonymous.php).
- La sintassi breve per gli array `[...elementi...]` è utilizzabile invece di `array(...elementi...)`.
- Le tag brevi per le echo `<?=` sono utilizzabili nei file delle viste. Il loro utilizzo è sicuro da PHP 5.4.
- [Interfacce e classi SPL](http://php.net/manual/en/book.spl.php).
- [Late Static Bindings](http://php.net/manual/en/language.oop5.late-static-bindings.php).
- [Data e ora](http://php.net/manual/en/book.datetime.php).
- [Trait](http://php.net/manual/en/language.oop5.traits.php).
- [intl](http://php.net/manual/en/book.intl.php). Yii 2.0 utilizza l'estensione PHP `intl` per le funzionalità di
- [Interfacce e classi SPL](https://secure.php.net/manual/en/book.spl.php).
- [Late Static Bindings](https://secure.php.net/manual/en/language.oop5.late-static-bindings.php).
- [Data e ora](https://secure.php.net/manual/en/book.datetime.php).
- [Trait](https://secure.php.net/manual/en/language.oop5.traits.php).
- [intl](https://secure.php.net/manual/en/book.intl.php). Yii 2.0 utilizza l'estensione PHP `intl` per le funzionalità di
internazionalizzazione.
@ -285,7 +285,7 @@ Fai riferimento alla sezione [Console Commands](tutorial-console.md) per ulterio
I18N
----
Yii 2.0 ha rimosso la formattazione interna di date e numeri in favore del [modulo PECL di PHP](http://pecl.php.net/package/intl).
Yii 2.0 ha rimosso la formattazione interna di date e numeri in favore del [modulo PECL di PHP](https://pecl.php.net/package/intl).
La traduzione dei messaggi viene effettuata dal componente `i18n`.
Questo componente gestisce una serie di sorgenti di messaggi, il che ti consente di usare diverse sorgenti di messaggio basate sulle

4
docs/guide-it/intro-yii.md

@ -54,6 +54,6 @@ Yii 2.0 richiede PHP 5.4.0 o successivo. Puoi trovare maggiori dettagli sulle ri
eseguendo lo script di verifica requisiti incluso in ogni versione di Yii.
L'uso di Yii richiede una conoscenza base della programmazione ad oggetti (OOP), dato che Yii è un framework puramente OOP.
Yii 2.0 fa uso delle più recenti funzionalità di PHP, come i [namespace](http://www.php.net/manual/it/language.namespaces.php) e
[trait](http://www.php.net/manual/it/language.oop5.traits.php). La compresione di questi concetti ti aiuterà a semplificare
Yii 2.0 fa uso delle più recenti funzionalità di PHP, come i [namespace](https://secure.php.net/manual/it/language.namespaces.php) e
[trait](https://secure.php.net/manual/it/language.oop5.traits.php). La compresione di questi concetti ti aiuterà a semplificare
l'uso di Yii 2.0.

4
docs/guide-it/start-installation.md

@ -106,7 +106,7 @@ di Yii. Puoi verificare le richieste in due modi:
```
Devi configurare la tua installazione di PHP in modo che soddisfi le richieste minime di Yii. E' molto importante che tu stia usando
PHP 5.4 o successivo. Devi inoltre installare le [estensioni PDO di PHP](http://www.php.net/manual/en/pdo.installation.php) e un driver
PHP 5.4 o successivo. Devi inoltre installare le [estensioni PDO di PHP](https://secure.php.net/manual/en/pdo.installation.php) e un driver
di database di PDO (come ad esempio `pdo_mysql` per i database MySQL), se la tua applicazione richiede un database.
@ -160,7 +160,7 @@ DocumentRoot "path/to/basic/web"
### Configurazione consigliata di Nginx <span id="recommended-nginx-configuration"></span>
Devi aver installato PHP con il demone [FPM](http://php.net/install.fpm) per usare [Nginx](http://wiki.nginx.org/).
Devi aver installato PHP con il demone [FPM](https://secure.php.net/install.fpm) per usare [Nginx](http://wiki.nginx.org/).
Usa questa configurazione per Nginx, sostituendo `path/to/basic/web` con il percorso reale di `basic/web` e `mysite.test` con
il nome reale del server web.

8
docs/guide-ja/caching-data.md

@ -103,7 +103,7 @@ $data = $cache->getOrSet($key, function () use ($user_id) {
Yii はさまざまなキャッシュ・ストレージをサポートしています。以下がその概要です:
* [[yii\caching\ApcCache]]: PHP の [APC](http://php.net/manual/ja/book.apc.php) 拡張モジュールを使用します。
* [[yii\caching\ApcCache]]: PHP の [APC](https://secure.php.net/manual/ja/book.apc.php) 拡張モジュールを使用します。
集中型の重厚なアプリケーションのキャッシュを扱うときには最速の一つとして考えることができます
(例えば、サーバが一台で、専用のロード・バランサを持っていない、などの場合)。
* [[yii\caching\DbCache]]: キャッシュされたデータを格納するためにデータベースのテーブルを使用します。
@ -120,14 +120,14 @@ Yii はさまざまなキャッシュ・ストレージをサポートしてい
データを取得するために同じコード `Yii::$app->cache->get($key)` を使用できます。
* [[yii\caching\FileCache]]: キャッシュされたデータを保存するために通常のファイルを使用します。
これはページ・コンテントなど大きなかたまりのデータに特に適しています。
* [[yii\caching\MemCache]]: PHP の [Memcache](http://php.net/manual/ja/book.memcache.php) と
[Memcached](http://php.net/manual/ja/book.memcached.php) 拡張モジュールを使用します。
* [[yii\caching\MemCache]]: PHP の [Memcache](https://secure.php.net/manual/ja/book.memcache.php) と
[Memcached](https://secure.php.net/manual/ja/book.memcached.php) 拡張モジュールを使用します。
分散型のアプリケーションでキャッシュを扱うときには最速の一つとして考えることができます
(例えば、複数台のサーバで、ロード・バランサがある、などの場合) 。
* [[yii\redis\Cache]]: [Redis](http://redis.io/) の key-value ストアに基づいてキャッシュ・コンポーネントを実装しています。
(Redis の バージョン 2.6.12 以降が必要とされます) 。
* [[yii\caching\WinCache]]: PHP の [WinCache](http://iis.net/downloads/microsoft/wincache-extension) エクステンションを使用します。
([参照リンク](http://php.net/manual/ja/book.wincache.php))
([参照リンク](https://secure.php.net/manual/ja/book.wincache.php))
* [[yii\caching\XCache]] _(非推奨)_: PHP の [XCache](http://xcache.lighttpd.net/) 拡張モジュールを使用します。
* [[yii\caching\ZendDataCache]] _(非推奨)_:
キャッシュ・メディアとして [Zend Data Cache](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm)

2
docs/guide-ja/caching-http.md

@ -131,7 +131,7 @@ Cache-Control: public, max-age=3600
この問題を防止するために、`HttpCache` はこれらのヘッダの送信をデフォルトで自動的に無効化します。
この動作を変更したい場合は [[yii\filters\HttpCache::sessionCacheLimiter]] プロパティを設定します。
このプロパティには `public`、`private`、`private_no_expire`、そして `nocache` などの文字列の値を使用することができます。
これらの値についての説明は [session_cache_limiter()](http://www.php.net/manual/ja/function.session-cache-limiter.php)
これらの値についての説明は [session_cache_limiter()](https://secure.php.net/manual/ja/function.session-cache-limiter.php)
を参照してください。

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

@ -2,7 +2,7 @@
==========================
Yiiは、必要となるすべてのクラス・ファイルを特定してインクルードするにあたり、
[クラスのオートローディング・メカニズム](http://www.php.net/manual/ja/language.oop5.autoload.php) を頼りにします。
[クラスのオートローディング・メカニズム](https://secure.php.net/manual/ja/language.oop5.autoload.php) を頼りにします。
Yii は、[PSR-4 標準](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md) に準拠した、高性能なクラスのオートローダを提供しています。
このオートローダは、あなたが `Yii.php` ファイルをインクルードするときにインストールされます。
@ -15,7 +15,7 @@ Yii オートローダを使用する <span id="using-yii-autoloader"></span>
Yii のクラス・オートローダを使用するには、クラスを作成して名前を付けるとき、次の二つの単純なルールに従わなければなりません:
* 各クラスは [名前空間](http://php.net/manual/ja/language.namespaces.php) の下になければなりません (例 `foo\bar\MyClass`)
* 各クラスは [名前空間](https://secure.php.net/manual/ja/language.namespaces.php) の下になければなりません (例 `foo\bar\MyClass`)
* 各クラスは次のアルゴリズムで決定される個別のファイルに保存されなければなりません:
```php

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

@ -329,7 +329,7 @@ $user->touch('login_time');
ビヘイビアとトレイトの比較 <span id="comparison-with-traits"></span>
--------------------------
ビヘイビアは、主となるクラスにそのプロパティやメソッドを「注入する」という点で [トレイト](http://www.php.net/traits)
ビヘイビアは、主となるクラスにそのプロパティやメソッドを「注入する」という点で [トレイト](https://secure.php.net/traits)
に似ていますが、これらは多くの面で異なります。以下に説明するように、それらは互いに長所と短所を持っています。
それらは代替手段というよりも、むしろ相互補完関係のようなものです。

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

@ -169,6 +169,9 @@ $container->set('yii\mail\MailInterface', 'yii\swiftmailer\Mailer');
// Connection のインスタンスを作成できます
$container->set('foo', 'yii\db\Connection');
// `Instance::of` を使ってエイリアスの登録。
$container->set('bar', Instance::of('foo'));
// 構成情報をともなうクラスの登録。クラスが get() でインスタンス化
// されるとき構成情報が適用されます
$container->set('yii\db\Connection', [
@ -179,7 +182,7 @@ $container->set('yii\db\Connection', [
]);
// クラスの構成情報をともなうエイリアス名の登録
// この場合、クラスを指定する "class" 要素が必要です
// この場合、クラスを指定する "class" または "__class" 要素が必要です
$container->set('db', [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
@ -188,11 +191,12 @@ $container->set('db', [
'charset' => 'utf8',
]);
// PHP コーラブルの登録
// コーラブルなクロージャまたは配列の登録
// このコーラブルは $container->get('db') が呼ばれるたびに実行されます
$container->set('db', function ($container, $params, $config) {
return new \yii\db\Connection($config);
});
$container->set('db', ['app\db\DbFactory', 'create']);
// コンポーネント・インスタンスの登録
// $container->get('pageCache') は呼ばれるたびに毎回同じインスタンスを返します
@ -215,7 +219,6 @@ $container->setSingleton('yii\db\Connection', [
]);
```
依存を解決する <span id="resolving-dependencies"></span>
--------------
@ -372,6 +375,24 @@ class HotelController extends Controller
これで、あなたが再びコントローラにアクセスするときは、`app\components\BookingService`
のインスタンスが作成され、コントローラのコンストラクタに3番目のパラメータとして注入されるようになります。
Yii 2.0.36 以降は、PHP 7 を使う場合に、ウェブおよびコンソール両方のコントローラでアクション・インジェクションを利用することが出来ます。
```php
namespace app\controllers;
use yii\web\Controller;
use app\components\BookingInterface;
class HotelController extends Controller
{
public function actionBook($id, BookingInterface $bookingService)
{
$result = $bookingService->book($id);
// ...
}
}
```
高度な実際の使用方法 <span id="advanced-practical-usage"></span>
--------------------
@ -427,7 +448,7 @@ $container->setDefinitions([
}
]);
$reader = $container->get('app\storage\DocumentsReader);
$reader = $container->get('app\storage\DocumentsReader');
// 構成情報に書かれている依存とともに DocumentReader オブジェクトが生成されます
```
@ -440,32 +461,27 @@ $reader = $container->get('app\storage\DocumentsReader);
[依存を解決する](#resolving-dependencies) のセクションで説明したように、[[yii\di\Container::set()|set()]] と [[yii\di\Container::setSingleton()|setSingleton()]] は、
オプションで、第三の引数として依存のコンストラクタのパラメータを取ることが出来ます。
コンストラクタのパラメータを設定するために、以下の構成情報配列の形式を使うことが出来ます。
- `key`: クラス名、インタフェイス名、または、エイリアス名。
このキーが [[yii\di\Container::set()|set()]] メソッドの最初の引数 `$class` として渡されます。
- `value`: 二つの要素を持つ配列。最初の要素は [[set()]] メソッドに二番目のパラメータ `$definition`
として渡され、第二の要素が `$params` として渡されます。
コンストラクタのパラメータを設定するために、`__construct()` オプションを使うことが出来ます。
では、私たちの例を修正しましょう。
```php
$container->setDefinitions([
'tempFileStorage' => [ // 便利なようにエイリアスを作りました
['class' => 'app\storage\FileStorage'],
['/var/tempfiles'] // 何らかの構成ファイルから抽出することも可能
'class' => 'app\storage\FileStorage',
'__construct()' => ['/var/tempfiles'], // 何らかの構成ファイルから抽出することも可能
],
'app\storage\DocumentsReader' => [
['class' => 'app\storage\DocumentsReader'],
[Instance::of('tempFileStorage')]
'class' => 'app\storage\DocumentsReader',
'__construct()' => [Instance::of('tempFileStorage')],
],
'app\storage\DocumentsWriter' => [
['class' => 'app\storage\DocumentsWriter'],
[Instance::of('tempFileStorage')]
'class' => 'app\storage\DocumentsWriter',
'__construct()' => [Instance::of('tempFileStorage')]
]
]);
$reader = $container->get('app\storage\DocumentsReader);
$reader = $container->get('app\storage\DocumentsReader');
// 前の例と全く同じオブジェクトが生成されます
```
@ -488,19 +504,19 @@ $reader = $container->get('app\storage\DocumentsReader);
```php
$container->setSingletons([
'tempFileStorage' => [
['class' => 'app\storage\FileStorage'],
['/var/tempfiles']
'class' => 'app\storage\FileStorage',
'__construct()' => ['/var/tempfiles']
],
]);
$container->setDefinitions([
'app\storage\DocumentsReader' => [
['class' => 'app\storage\DocumentsReader'],
[Instance::of('tempFileStorage')]
'class' => 'app\storage\DocumentsReader',
'__construct()' => [Instance::of('tempFileStorage')],
],
'app\storage\DocumentsWriter' => [
['class' => 'app\storage\DocumentsWriter'],
[Instance::of('tempFileStorage')]
'class' => 'app\storage\DocumentsWriter',
'__construct()' => [Instance::of('tempFileStorage')],
]
]);

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

@ -13,7 +13,7 @@ Yiiはイベントをサポートするために、 [[yii\base\Component]] と
イベント・ハンドラ <span id="event-handlers"></span>
------------------
イベント・ハンドラとは、アタッチされたイベントがトリガされたときに実行される [PHP コールバック](http://www.php.net/manual/ja/language.types.callable.php)
イベント・ハンドラとは、アタッチされたイベントがトリガされたときに実行される [PHP コールバック](https://secure.php.net/manual/ja/language.types.callable.php)
です。次のコールバックのいずれも使用可能です:
- 文字列で指定されたグローバル PHP 関数 (括弧を除く)、例えば `'trim'`

8
docs/guide-ja/db-active-record.md

@ -473,8 +473,8 @@ $post->updateCounters(['view_count' => 1]);
> HTML フォームでは全ての値が文字列として表現されるからです。
> 入力値が正しい型、例えば整数値となることを保証するために、`['attributeName', 'filter', 'filter' => 'intval']` のように
> [検証フィルタ](input-validation.md#data-filtering) を適用することが出来ます。
> このフィルタは、[intval()](http://php.net/manual/ja/function.intval.php), [floatval()](http://php.net/manual/ja/function.floatval.php),
> [boolval](http://php.net/manual/ja/function.boolval.php) など、PHP の全てのタイプキャスト関数で動作します。
> このフィルタは、[intval()](https://secure.php.net/manual/ja/function.intval.php), [floatval()](https://secure.php.net/manual/ja/function.floatval.php),
> [boolval](https://secure.php.net/manual/ja/function.boolval.php) など、PHP の全てのタイプキャスト関数で動作します。
### デフォルト属性値 <span id="default-attribute-values"></span>
@ -689,7 +689,7 @@ try {
```
> Note: 上記のコードでは、PHP 5.x と PHP 7.x との互換性のために、二つの catch ブロックを持っています。
> `\Exception` は PHP 7.0 以降では、[`\Throwable` インタフェイス](http://php.net/manual/ja/class.throwable.php) を実装しています。
> `\Exception` は PHP 7.0 以降では、[`\Throwable` インタフェイス](https://secure.php.net/manual/ja/class.throwable.php) を実装しています。
> 従って、あなたのアプリケーションが PHP 7.0 以上しか使わない場合は、`\Exception` の部分を省略することが出来ます。
第二の方法は、トランザクションのサポートが必要な DB 操作を [[yii\db\ActiveRecord::transactions()]]
@ -1154,7 +1154,7 @@ $customers = Customer::find()->with([
> ```
### リレーションを使ってテーブルを結合する <a name="joining-with-relations">
### リレーションを使ってテーブルを結合する <span id="joining-with-relations"></span>
> Note: この項で説明されていることは、MySQL、PostgreSQL など、
リレーショナル・データベースに対してのみ適用されます。

26
docs/guide-ja/db-dao.md

@ -1,7 +1,7 @@
データベース・アクセス・オブジェクト
====================================
[PDO](http://www.php.net/manual/ja/book.pdo.php) の上に構築された Yii DAO (データベース・アクセス・オブジェクト) は、
[PDO](https://secure.php.net/manual/ja/book.pdo.php) の上に構築された Yii DAO (データベース・アクセス・オブジェクト) は、
リレーショナル・データベースにアクセスするためのオブジェクト指向 API を提供するものです。
これは、データベースにアクセスする他のもっと高度な方法、例えば [クエリ・ビルダ](db-query-builder.md) や [アクティブ・レコード](db-active-record.md) の基礎でもあります。
@ -19,12 +19,6 @@ Yii 2.0 では、DAO は下記の DBMS のサポートを内蔵しています
- [Oracle](http://www.oracle.com/us/products/database/overview/index.html)
- [MSSQL](https://www.microsoft.com/en-us/sqlserver/default.aspx): バージョン 2008 以上。
> Info: Yii 2.1 以降では、CUBRID、Oracle および MSSQL に対する DAO サポートは、フレームワーク内蔵のコア・コンポーネント
としては提供されていません。それらは、独立した [エクステンション](structure-extensions.md) としてインストールされる
必要があります。[yiisoft/yii2-oracle](https://www.yiiframework.com/extension/yiisoft/yii2-oracle) および
[yiisoft/yii2-mssql](https://www.yiiframework.com/extension/yiisoft/yii2-mssql) が
[公式エクステンション](https://www.yiiframework.com/extensions/official) として提供されています。
> Note: PHP 7 用の pdo_oci の新しいバージョンは、現在、ソース・コードとしてのみ存在します。
[コミュニティによる説明](https://github.com/yiisoft/yii2/issues/10975#issuecomment-248479268) に従ってコンパイルするか、
または、[PDO エミュレーション・レイヤ](https://github.com/taq/pdooci) を使って下さい。
@ -68,7 +62,7 @@ return [
DB 接続を構成するときは、つねに [[yii\db\Connection::dsn|dsn]] プロパティによってデータ・ソース名 (DSN) を指定しなければなりません。
DSN の形式はデータベースによってさまざまに異なります。
詳細は [PHP マニュアル](http://www.php.net/manual/ja/function.PDO-construct.php) を参照して下さい。下記にいくつかの例を挙げます。
詳細は [PHP マニュアル](https://secure.php.net/manual/ja/function.PDO-construct.php) を参照して下さい。下記にいくつかの例を挙げます。
* MySQL, MariaDB: `mysql:host=localhost;dbname=mydatabase`
* SQLite: `sqlite:/path/to/database/file`
@ -113,6 +107,18 @@ ODBC 経由でデータベースに接続しようとする場合は、[[yii\db\
> ]
> ```
MS SQL Server でバイナリ・データを正しく処理するためには追加の接続オプションが必要になります。
```php
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'sqlsrv:Server=localhost;Database=mydatabase',
'attributes' => [
\PDO::SQLSRV_ATTR_ENCODING => \PDO::SQLSRV_ENCODING_SYSTEM
]
],
```
## SQL クエリを実行する <span id="executing-sql-queries"></span>
@ -184,7 +190,7 @@ $post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status
->queryOne();
```
パラメータ・バインディングは [プリペアド・ステートメント](http://php.net/manual/ja/mysqli.quickstart.prepared-statements.php) によって実装されています。
パラメータ・バインディングは [プリペアド・ステートメント](https://secure.php.net/manual/ja/mysqli.quickstart.prepared-statements.php) によって実装されています。
パラメータ・バインディングには、SQL インジェクション攻撃を防止する以外にも、SQL 文を一度だけ準備して異なるパラメータで複数回実行することにより、
パフォーマンスを向上させる効果もあります。例えば、
@ -378,7 +384,7 @@ try {
そして、`throw $e` が、まるでそれをキャッチしなかったかのように、例外を再スローしますので、通常のエラー処理プロセスがその例外の面倒を見ることになります。
> Note: 上記のコードでは、PHP 5.x と PHP 7.x との互換性のために、二つのcatch ブロックを持っています。
> `\Exception` は PHP 7.0 以降では、[`\Throwable` インタフェイス](http://php.net/manual/ja/class.throwable.php) を実装しています。
> `\Exception` は PHP 7.0 以降では、[`\Throwable` インタフェイス](https://secure.php.net/manual/ja/class.throwable.php) を実装しています。
> 従って、あなたのアプリケーションが PHP 7.0 以上しか使わない場合は、`\Exception` の部分を省略することが出来ます。

30
docs/guide-ja/db-migrations.md

@ -690,6 +690,7 @@ class m150101_185401_create_news_table extends Migration
* [[yii\db\Migration::insert()|insert()]]: 一行を挿入
* [[yii\db\Migration::batchInsert()|batchInsert()]]: 複数行を挿入
* [[yii\db\Migration::update()|update()]]: 行を更新
* [[yii\db\Migration::upsert()|upsert()]]: 一行を挿入または既に存在していれば更新 (2.0.14 以降)
* [[yii\db\Migration::delete()|delete()]]: 行を削除
* [[yii\db\Migration::createTable()|createTable()]]: テーブルを作成
* [[yii\db\Migration::renameTable()|renameTable()]]: テーブルの名前を変更
@ -722,7 +723,6 @@ class m150101_185401_create_news_table extends Migration
> }
> ```
## マイグレーションを適用する <span id="applying-migrations"></span>
データベースを最新の構造にアップグレードするためには、利用できる全ての新しいマイグレーションを適用するために、次のコマンドを使わなければなりません。
@ -943,7 +943,7 @@ return [
適切にエスケープしなければならないことに注意して下さい。例えば、
```
yii migrate/create 'app\\migrations\\createUserTable'
yii migrate/create app\\migrations\\createUserTable
```
> Note: [[yii\console\controllers\MigrateController::migrationPath|migrationPath]] によって指定されたマイグレーションは、
@ -956,6 +956,32 @@ yii migrate/create 'app\\migrations\\createUserTable'
これらのマイグレーションは、主として、他の開発者による Yii エクステンションなど、外部ソースに由来するものであり、
新しい手法を使い始めようとしても、名前空間を使うように変更することが簡単には出来ないものだからです。
#### 名前空間を持つマイグレーションを生成する
名前空間を持つマイグレーションは "CamelCase" の命名規則 `M<YYMMDDHHMMSS><Name>` (例えば `M190720100234CreateUserTable`) を持ちます。
このようなマイグレーションを生成するときは、テーブル名が "CamenCase" 形式から "アンダースコア" 形式に変換されることを
覚えておいて下さい。例えば、
```
yii migrate/create app\\migrations\\DropGreenHotelTable
```
上記のコマンドは、名前空間 `app\migrations` の中で、`green_hotel` というテーブルを削除するマイグレーションを生成します。そして、
```
yii migrate/create app\\migrations\\CreateBANANATable
```
というコマンドは、名前空間 `app\migrations` の中で `b_a_n_a_n_a` というテーブルを作成するマイグレーションを生成します。
テーブル名が大文字と小文字を含む(例えば `studentsExam`) ときは、名前の先頭にアンダースコアを付ける必要があります。
```
yii migrate/create app\\migrations\\Create_studentsExamTable
```
このコマンドは、名前空間 `app\migrations` の中で `studentsExam` というテーブルを作成するマイグレーションを生成します。
### 分離されたマイグレーション <span id="separated-migrations"></span>
プロジェクトのマイグレーション全体に単一のマイグレーション履歴を使用することが望ましくない場合もあります。

31
docs/guide-ja/db-query-builder.md

@ -230,7 +230,7 @@ $query->where(['id' => $userQuery]);
ハッシュ形式を使う場合、Yii は内部的にパラメータ・バインディングを使用します。
従って、[文字列形式](#string-format) とは対照的に、ここでは手動でパラメータを追加する必要はありません。ただし、Yii はカラム名を決してエスケープしないことに注意して下さい。
従って、ユーザから取得した変数を何ら追加のチェックをすることなくカラム名として渡すと、SQL インジェクション攻撃に対して脆弱になります。
アプリケーションを安全に保つためには、カラム名として変数を使わないこと、または、変数をホワイト・リストによってフィルターすることが必要です。
アプリケーションを安全に保つためには、カラム名として変数を使わないこと、または、変数を許容リストによってフィルターすることが必要です。
カラム名をユーザから取得する必要がある場合は、ガイドの [データをフィルタリングする](output-data-widgets.md#filtering-data) という記事を読んで下さい。
例えば、次のコードは脆弱です。
@ -281,6 +281,7 @@ $query->where([$column => $value]);
このメソッドは、カラム名を適切に引用符で囲み、値域の値をエスケープします。
`in` 演算子はまた複合カラムをもサポートしています。
その場合、オペランド 1 はカラム名の配列とし、オペランド 2 は配列の配列、または、複合カラムの値域を表す `Query` オブジェクトでなければなりません。
例えば、`['in', ['id', 'name'], [['id' => 1, 'name' => 'oy']]]` は `(id, name) IN ((1, 'oy'))` を生成します。
- `not in`: 生成される条件において `IN``NOT IN` に置き換えられる以外は、`in` と同じです。
@ -320,14 +321,14 @@ $query->where([$column => $value]);
演算子形式を使う場合、Yii は値に対して内部的にパラメータ・バインディングを使用します。
従って、[文字列形式](#string-format) とは対照的に、ここでは手動でパラメータを追加する必要はありません。
ただし、Yii はカラム名を決してエスケープしないことに注意して下さい。従って、変数をカラム名として渡すと、アプリケーションは SQL インジェクション攻撃に対して脆弱になります。
アプリケーションを安全に保つためには、カラム名として変数を使わないこと、または、変数をホワイト・リストによってフィルターすることが必要です。
アプリケーションを安全に保つためには、カラム名として変数を使わないこと、または、変数を許容リストによってフィルターすることが必要です。
カラム名をユーザから取得する必要がある場合は、ガイドの [データをフィルタリングする](output-data-widgets.md#filtering-data) という記事を読んで下さい。
例えば、次のコードは脆弱です。
```php
// 脆弱なコード:
$column = $request->get('column');
$value = $request->get('value);
$value = $request->get('value');
$query->where([$column => $value]);
// $value は安全です。しかし、$column の名前はエンコードされません。
```
@ -601,6 +602,28 @@ $query1->union($query2);
[[yii\db\Query::union()|union()]] を複数回呼んで、`UNION` 句をさらに追加することが出来ます。
### [[yii\db\Query::withQuery()|withQuery()]] <span id="with-query"></span>
[[yii\db\Query::withQuery()|withQuery()]] メソッドは SQL クエリの `WITH` プレフィックスを指定するものです。サブクエリの代りに `WITH` を使うと読みやすさを向上させ、ユニークな機能(再帰 CTE)を利用することが出来ます。詳細は [modern-sql](https://modern-sql.com/feature/with) を参照して下さい。例えば、次のクエリは `admin` の持つ権限をその子も含めて全て再帰的に取得します。
```php
$initialQuery = (new \yii\db\Query())
->select(['parent', 'child'])
->from(['aic' => 'auth_item_child'])
->where(['parent' => 'admin']);
$recursiveQuery = (new \yii\db\Query())
->select(['aic.parent', 'aic.child'])
->from(['aic' => 'auth_item_child'])
->innerJoin('t1', 't1.child = aic.parent');
$mainQuery = (new \yii\db\Query())
->select(['parent', 'child'])
->from('t1')
->withQuery($initialQuery->union($recursiveQuery), 't1', true);
```
[[yii\db\Query::withQuery()|withQuery()]] を複数回呼び出してさらなる CTE をメイン・クエリに追加することが出来ます。クエリはアタッチされたのと同じ順序でプリペンドされます。クエリのうちの一つが再帰的である場合は CTE 全体が再帰的になります。
## クエリ・メソッド <span id="query-methods"></span>
@ -772,7 +795,7 @@ foreach ($query->each() as $username => $user) {
#### MySQL におけるバッチ・クエリの制約 <span id="batch-query-mysql"></span>
MySQL のバッチ・クエリの実装は PDO ドライバのライブラリに依存しています。デフォルトでは、MySQL のクエリは
[`バッファ・モード`](http://php.net/manual/ja/mysqlinfo.concepts.buffering.php) で実行されます。
[`バッファ・モード`](https://secure.php.net/manual/ja/mysqlinfo.concepts.buffering.php) で実行されます。
このことが、カーソルを使ってデータを取得する目的を挫折させます。というのは、バッファ・モードでは、
ドライバによって結果セット全体がクライアントのメモリに読み込まれることを防止できないからです。

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

Loading…
Cancel
Save