@@ -11,34 +11,11 @@ The framework is easy to adjust to meet your needs, because Yii has been designe
[](https://packagist.org/packages/yiisoft/yii2)
[](https://packagist.org/packages/yiisoft/yii2)
-[](http://travis-ci.org/yiisoft/yii2)
+[](https://travis-ci.org/yiisoft/yii2)
[](https://scrutinizer-ci.com/g/yiisoft/yii2/)
[](https://scrutinizer-ci.com/g/yiisoft/yii2/)
[](https://codeclimate.com/github/yiisoft/yii2)
-分支说明
--------
-* master:主分支
-* doc:文档翻译分支
-* api:api 翻译分支
-
-## 官方新版本发布
-doc branch:
-```
-git merge upstream/master
-```
-api branch:
-```
-git merge upstream/master
-```
-master branch:
-```
-git merge doc
-git merge api
-```
-> 注意:禁止提交 pull request 至 master 分支,文档修改请提交至 doc 分支,api 修改请提交至 api 分支。
-
-
Installation
------------
@@ -76,7 +53,7 @@ You may join us and:
- [Report an issue](docs/internals/report-an-issue.md)
- [Translate documentation or messages](docs/internals/translation-workflow.md)
-- [Give us feedback or start a design discussion](http://www.yiiframework.com/forum/index.php/forum/42-general-discussions-for-yii-20/)
+- [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)
### Reporting Security issues
@@ -112,5 +89,5 @@ If you are using Yii 2 as part of an OpenSource project, a way to acknowledge it
If your code is hosted at GitHub, you can place the following in your README.md file to get the badge:
```
-[](http://www.yiiframework.com/)
+[](https://www.yiiframework.com/)
```
diff --git a/ROADMAP.md b/ROADMAP.md
new file mode 100644
index 0000000000..8e66e79c34
--- /dev/null
+++ b/ROADMAP.md
@@ -0,0 +1,32 @@
+Framework development for versions 3.0 and further moved to [Yii Framework Core repository](https://github.com/yiisoft/yii-core).
+
+Please see ROADMAP there:
+https://github.com/yiisoft/yii-core/blob/master/ROADMAP.md
+
+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.
+
+## Additional releases
+
+We can tag additional releases in case someone will take the role of release manager. Otherwise we'll focus on 3.0.
+
+## 2.0.17 (4th quarter of 2018)
+
+- Bugfixes.
+- Announce bugfixes EOL (a year more?).
+- Security fixes only.
+
+## 2.0.16 (3rd quarter of 2018)
+
+- Bugfixes.
+
+## 2.0.15 (2nd quarter of 2018)
+
+- Since this release main focus is bug fixing.
+- No full-branch merges into 3.0.
+- No enhancements are accepted.
+
+## 2.0.14 (1st quarter of 2018)
+
+Will be last release with features and enhancements the last one that will be merged into 3.0 directly.
diff --git a/build/controllers/ReleaseController.php b/build/controllers/ReleaseController.php
index 95f6f1f860..75b1b6c9bb 100644
--- a/build/controllers/ReleaseController.php
+++ b/build/controllers/ReleaseController.php
@@ -822,7 +822,7 @@ class ReleaseController extends Controller
$v = str_replace('\\-', '[\\- ]', preg_quote($version, '/'));
$headline = $version . ' ' . date('F d, Y');
$this->sed(
- '/' . $v . ' under development\n(-+?)\n/',
+ '/' . $v . ' under development\R(-+?)\R/',
$headline . "\n" . str_repeat('-', \strlen($headline)) . "\n",
$this->getChangelogs($what)
);
@@ -987,7 +987,7 @@ class ReleaseController extends Controller
protected function updateYiiVersion($frameworkPath, $version)
{
$this->sed(
- '/function getVersion\(\)\n \{\n return \'(.+?)\';/',
+ '/function getVersion\(\)\R \{\R return \'(.+?)\';/',
"function getVersion()\n {\n return '$version';",
$frameworkPath . '/BaseYii.php');
}
diff --git a/composer.json b/composer.json
index 5b0ca429c6..83de878388 100644
--- a/composer.json
+++ b/composer.json
@@ -75,7 +75,7 @@
"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.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable",
+ "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/inputmask": "~3.2.2 | ~3.3.5",
"bower-asset/punycode": "1.3.*",
"bower-asset/yii2-pjax": "~2.0.1"
@@ -83,7 +83,8 @@
"require-dev": {
"phpunit/phpunit": "4.8.34",
"cebe/indent": "~1.0.2",
- "friendsofphp/php-cs-fixer": "~2.2.3"
+ "friendsofphp/php-cs-fixer": "~2.2.3",
+ "johnkary/phpunit-speedtrap": "^1.0"
},
"repositories": [
{
diff --git a/composer.lock b/composer.lock
index ccd7209dfa..631f0e86a0 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1,10 +1,10 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "c5363e83fd40667959bed938186dbdf2",
+ "content-hash": "20618e7e02e835f9f1ee41b339f2b61a",
"packages": [
{
"name": "bower-asset/inputmask",
@@ -52,35 +52,23 @@
"version": "v1.3.2",
"source": {
"type": "git",
- "url": "https://github.com/bestiejs/punycode.js.git",
+ "url": "git@github.com:bestiejs/punycode.js.git",
"reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3",
"reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3",
- "shasum": ""
+ "shasum": null
},
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": "punycode.js",
- "bower-asset-ignore": [
- "coverage",
- "tests",
- ".*",
- "component.json",
- "Gruntfile.js",
- "node_modules",
- "package.json"
- ]
- }
+ "type": "bower-asset"
},
{
"name": "bower-asset/yii2-pjax",
"version": "2.0.7.1",
"source": {
"type": "git",
- "url": "https://github.com/yiisoft/jquery-pjax.git",
+ "url": "git@github.com:yiisoft/jquery-pjax.git",
"reference": "aef7b953107264f00234902a3880eb50dafc48be"
},
"dist": {
@@ -698,6 +686,56 @@
],
"time": "2014-11-20T16:49:30+00:00"
},
+ {
+ "name": "johnkary/phpunit-speedtrap",
+ "version": "v1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/johnkary/phpunit-speedtrap.git",
+ "reference": "76a26f8a903a9434608cdad2b41c40cd134ea326"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/johnkary/phpunit-speedtrap/zipball/76a26f8a903a9434608cdad2b41c40cd134ea326",
+ "reference": "76a26f8a903a9434608cdad2b41c40cd134ea326",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "3.7.*|~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "JohnKary": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "John Kary",
+ "email": "john@johnkary.net"
+ }
+ ],
+ "description": "Find slow tests in your PHPUnit test suite",
+ "homepage": "https://github.com/johnkary/phpunit-speedtrap",
+ "keywords": [
+ "phpunit",
+ "profile",
+ "slow"
+ ],
+ "time": "2015-09-13T19:01:00+00:00"
+ },
{
"name": "paragonie/random_compat",
"version": "v2.0.11",
diff --git a/docs/guide-ar/README.md b/docs/guide-ar/README.md
new file mode 100644
index 0000000000..62f66da00e
--- /dev/null
+++ b/docs/guide-ar/README.md
@@ -0,0 +1,205 @@
+ Yii 2.0 الدليل التقني الخاص ببيئة العمل
+===============================
+
+تم تحرير هذا الملف اعتمادا على [الشروط الخاصة بتوثيف ال Yii](http://www.yiiframework.com/doc/terms/).
+
+جميع الحقوق محفوظة
+
+2014 (c) Yii Software LLC.
+
+
+المقدمة
+------------
+
+* [عن بيئة العمل Yii](intro-yii.md)
+* [التحديث من الإصدار 1.1](../guide/intro-upgrade-from-v1.md)
+
+
+البداية من هنا
+---------------
+
+* [ماذا يجب أن تعرف عن بيئة العمل](start-prerequisites.md)
+* [تثبيت ال Yii](start-installation.md)
+* [تشغيل التطبيقات - Running Applications](start-workflow.md)
+* [قل مرحبا - المشروع الأول](start-hello.md)
+* [العمل مع ال forms](start-forms.md)
+* [العمل مع قواعد البيانات](../guide/start-databases.md)
+* [إنشاء الشيفرة البرمجية من خلال ال gii](../guide/start-gii.md)
+* [ماذا الآن - الخطوة القادمة](../guide/start-looking-ahead.md)
+
+
+الهيكلية الخاصة بالتطبيق (Application Structure)
+---------------------
+
+* [نظرة عامة عن الهيكلية الخاصة بالتطبيق](../guide/structure-overview.md)
+* [Entry Scripts](../guide/structure-entry-scripts.md)
+* [التطبيقات](../guide/structure-applications.md)
+* [مكونات التطبيقات](../guide/structure-application-components.md)
+* [Controllers](../guide/structure-controllers.md)
+* [Models](../guide/structure-models.md)
+* [Views](../guide/structure-views.md)
+* [Modules](../guide/structure-modules.md)
+* [Filters](../guide/structure-filters.md)
+* [Widgets](../guide/structure-widgets.md)
+* [Assets](../guide/structure-assets.md)
+* [Extensions](../guide/structure-extensions.md)
+
+
+التعامل مع ال requests
+-----------------
+
+* [نظرة عامة عن التعامل مع ال requests](../guide/runtime-overview.md)
+* [Bootstrapping](../guide/runtime-bootstrapping.md)
+* [Routing and URL Creation](../guide/runtime-routing.md)
+* [Requests](../guide/runtime-requests.md)
+* [Responses](../guide/runtime-responses.md)
+* [Sessions and Cookies](../guide/runtime-sessions-cookies.md)
+* [Handling Errors - التحكم بالأخطاء](../guide/runtime-handling-errors.md)
+* [Logging - تسجيل الحركات](../guide/runtime-logging.md)
+
+
+المفاهيم الرئيسية (Key Concepts)
+------------
+
+* [Components](../guide/concept-components.md)
+* [Properties](../guide/concept-properties.md)
+* [Events](../guide/concept-events.md)
+* [Behaviors](../guide/concept-behaviors.md)
+* [Configurations](../guide/concept-configurations.md)
+* [Aliases](../guide/concept-aliases.md)
+* [Class Autoloading](../guide/concept-autoloading.md)
+* [Service Locator](../guide/concept-service-locator.md)
+* [Dependency Injection Container](../guide/concept-di-container.md)
+
+
+التعامل مع قواعد البيانات
+----------------------
+
+* [Database Access Objects](../guide/db-dao.md): Connecting to a database, basic queries, transactions, and schema manipulation
+* [Query Builder](../guide/db-query-builder.md): Querying the database using a simple abstraction layer
+* [Active Record](../guide/db-active-record.md): The Active Record ORM, retrieving and manipulating records, and defining relations
+* [Migrations](../guide/db-migrations.md): Apply version control to your databases in a team development environment
+* [Sphinx](https://www.yiiframework.com/extension/yiisoft/yii2-sphinx/doc/guide)
+* [Redis](https://www.yiiframework.com/extension/yiisoft/yii2-redis/doc/guide)
+* [MongoDB](https://www.yiiframework.com/extension/yiisoft/yii2-mongodb/doc/guide)
+* [ElasticSearch](https://www.yiiframework.com/extension/yiisoft/yii2-elasticsearch/doc/guide)
+
+
+الحصول على البيانات من خلال المستخدمين
+-----------------------
+
+* [Creating Forms](../guide/input-forms.md)
+* [Validating Input](../guide/input-validation.md)
+* [Uploading Files](../guide/input-file-upload.md)
+* [Collecting Tabular Input](../guide/input-tabular-input.md)
+* [Getting Data for Multiple Models](../guide/input-multiple-models.md)
+* [Extending ActiveForm on the Client Side](../guide/input-form-javascript.md)
+
+
+عرض البيانات
+---------------
+
+* [Data Formatting](../guide/output-formatting.md)
+* [Pagination](../guide/output-pagination.md)
+* [Sorting](../guide/output-sorting.md)
+* [Data Providers](../guide/output-data-providers.md)
+* [Data Widgets](../guide/output-data-widgets.md)
+* [Working with Client Scripts](../guide/output-client-scripts.md)
+* [Theming](../guide/output-theming.md)
+
+
+الامان والحماية
+--------
+
+* [Security Overview](../guide/security-overview.md)
+* [Authentication](../guide/security-authentication.md)
+* [Authorization](../guide/security-authorization.md)
+* [Working with Passwords](../guide/security-passwords.md)
+* [Cryptography](../guide/security-cryptography.md)
+* [Auth Clients](https://www.yiiframework.com/extension/yiisoft/yii2-authclient/doc/guide)
+* [Best Practices](../guide/security-best-practices.md)
+
+
+Caching التخزين المؤقت
+-------
+
+* [Caching Overview](../guide/caching-overview.md)
+* [Data Caching](../guide/caching-data.md)
+* [Fragment Caching](../guide/caching-fragment.md)
+* [Page Caching](../guide/caching-page.md)
+* [HTTP Caching](../guide/caching-http.md)
+
+
+RESTful Web Services
+--------------------
+
+* [Quick Start](../guide/rest-quick-start.md)
+* [Resources](../guide/rest-resources.md)
+* [Controllers](../guide/rest-controllers.md)
+* [Routing](../guide/rest-routing.md)
+* [Response Formatting](../guide/rest-response-formatting.md)
+* [Authentication](../guide/rest-authentication.md)
+* [Rate Limiting](../guide/rest-rate-limiting.md)
+* [Versioning](../guide/rest-versioning.md)
+* [Error Handling](../guide/rest-error-handling.md)
+
+
+الأدوات المساعدة أثناء تطوير التطبيقات
+-----------------
+
+* [Debug Toolbar and Debugger](https://www.yiiframework.com/extension/yiisoft/yii2-debug/doc/guide)
+* [Generating Code using Gii](https://www.yiiframework.com/extension/yiisoft/yii2-gii/doc/guide)
+* [Generating API Documentation](https://www.yiiframework.com/extension/yiisoft/yii2-apidoc)
+
+
+فحص واختبار التطبيقات
+-------
+
+* [Testing Overview](../guide/test-overview.md)
+* [Testing environment setup](../guide/test-environment-setup.md)
+* [Unit Tests](../guide/test-unit.md)
+* [Functional Tests](../guide/test-functional.md)
+* [Acceptance Tests](../guide/test-acceptance.md)
+* [Fixtures](../guide/test-fixtures.md)
+
+
+مواضيع وعناوين مميزة
+--------------
+
+* [Advanced Project Template](https://www.yiiframework.com/extension/yiisoft/yii2-app-advanced/doc/guide)
+* [Building Application from Scratch](../guide/tutorial-start-from-scratch.md)
+* [Console Commands](../guide/tutorial-console.md)
+* [Core Validators](../guide/tutorial-core-validators.md)
+* [Docker](../guide/tutorial-docker.md)
+* [Internationalization](../guide/tutorial-i18n.md)
+* [Mailing](../guide/tutorial-mailing.md)
+* [Performance Tuning](../guide/tutorial-performance-tuning.md)
+* [Shared Hosting Environment](../guide/tutorial-shared-hosting.md)
+* [Template Engines](../guide/tutorial-template-engines.md)
+* [Working with Third-Party Code](../guide/tutorial-yii-integration.md)
+* [Using Yii as a micro framework](../guide/tutorial-yii-as-micro-framework.md)
+
+
+Widgets
+-------
+
+* [GridView](https://www.yiiframework.com/doc-2.0/yii-grid-gridview.html)
+* [ListView](https://www.yiiframework.com/doc-2.0/yii-widgets-listview.html)
+* [DetailView](https://www.yiiframework.com/doc-2.0/yii-widgets-detailview.html)
+* [ActiveForm](https://www.yiiframework.com/doc-2.0/guide-input-forms.html#activerecord-based-forms-activeform)
+* [Pjax](https://www.yiiframework.com/doc-2.0/yii-widgets-pjax.html)
+* [Menu](https://www.yiiframework.com/doc-2.0/yii-widgets-menu.html)
+* [LinkPager](https://www.yiiframework.com/doc-2.0/yii-widgets-linkpager.html)
+* [LinkSorter](https://www.yiiframework.com/doc-2.0/yii-widgets-linksorter.html)
+* [Bootstrap Widgets](https://www.yiiframework.com/extension/yiisoft/yii2-bootstrap/doc/guide)
+* [jQuery UI Widgets](https://www.yiiframework.com/extension/yiisoft/yii2-jui/doc/guide)
+
+
+Helpers
+-------
+
+* [Helpers Overview](../guide/helper-overview.md)
+* [ArrayHelper](../guide/helper-array.md)
+* [Html](../guide/helper-html.md)
+* [Url](../guide/helper-url.md)
+
diff --git a/docs/guide-ar/intro-yii.md b/docs/guide-ar/intro-yii.md
new file mode 100644
index 0000000000..7177d094b8
--- /dev/null
+++ b/docs/guide-ar/intro-yii.md
@@ -0,0 +1,57 @@
+#
ما هي بيئة العمل Yii
+
+
Yii هو إطار PHP عالي الأداء يعتمد على المكونات لتطوير تطبيقات الويب الحديثة بسرعة.
+إن الاسم "Yii" (يُنطق بـ "يي" أو "[جي:]" يعني "بسيطًا وتطوريًا" باللغة الصينية. ومن الممكن ايضا
+ اعتباره اختصارًا لـ Yes It Is!
+
+
+#
ما هي أفضل التطبيقات أو البرمجيات التي يمكن برمجتها وتتناسب مع ال Yii
+
+
+Yii هو إطار عام لبرمجة الويب ، مما يعني أنه يمكن استخدامه لتطوير كافة أنواع
+تطبيقات الويب باستخدام PHP. وذلك بسبب البنية القائمة على البنية التركيبة لبيئة العمل وترابطها مع المكونات والتخزين المؤقت، وهو مناسب بشكل خاص لتطوير portals, forums, content management systems (CMS), e-commerce projects, RESTful Web services. وما إلى ذلك.
+
+
+
+#
كيف يمكن مقارنة بيئة العمل الخاصة بال Yii مع الأطر أو بيئات العمل الأخرى؟
+
+
+ إذا كنت بالفعل على دراية بإطار العمل الأخرى ، فيمكنك معرفة كيف تتم مقارنة ال Yii:
+
+
+
مثل معظم أطر عمل ال PHP ، يطبق Yii النمط المعماري MVC (Model-View-Controller).
+
ال Yii يتبنى الفلسفة التي تقول أن الشيفرة البرمجية يجب أن تكتب بأسهل طريقها وادقها، ولكنها بذات الوقت يجب أن تكون أنيقة الكتابة مظهرا ومضمونا (شكلا وتطيبقا).
+
ال Yii هو إطار متكامل (full stack) يوفر العديد من الميزات الجاهزة للإستخدام والمعدة مسبقا، مثل ال query builders وال ActiveRecord لقواعد البيانات العلاقئية (relational) وغير العلائقية (Nosql)، بالإضافة الى دعم وتجهيز ال RESTful API والتخزين المؤقت (caching) وغيرها الكثير.
+
من مميزات ال Yii إمكانية التعديل (استبدال جزء معين أو تخيصيص وإضافة) جزء معين على أغلب ال Yii core code، وبالإضافة الى هذا، يمكنك بناء ملحقات برمجية اعتمادا على ال core code، ومن ثم نشر هذه الشيفرة وتوزيعها واستخدامها دون وجود أي مشاكل أو صعوبة تذكر.
+
الأداء العالي هو الهدف الأساسي من ال Yii.
+
+
+
+
+ال Yii إطار عمل صمم من قبل فريق برمجي متكامل، فهو ليس مجرد عمل فردي ، بل يتكون من فريق تطوير أساسي وقوي(http://www.yiiframework.com/team/) ، بالإضافة إلى منتدى كبير
+من المهنيين الذين يساهمون باستمرار في تطوير هذا الإطار. فريق المطورين الخاص بال Yii
+يراقب عن كثب أحدث اتجاهات تطوير الويب وأفضل الممارسات والمميزات التي
+وجدت في الأطر والمشاريع الأخرى. وتدرج بانتظام بإضافة أفضل الممارسات والميزات الى ال Yii عبر واجهات بسيطة وأنيقة.
+
+
+
+
+#
الإصدارات الخاصة بال Yii
+
+
+ يتوفر لدى Yii حاليًا إصداران رئيسيان: 1.1 و 2.0. الإصدار 1.1 هو الجيل القديم وهو الآن في وضع الصيانة. الإصدار 2.0 هو إعادة كتابة وهيكلة كاملة لل Yii، تم اعتماد أحدث التقنيات والبروتوكولات فيها مثل including Composer, PSR, namespaces, traits والكثير من الأمور الأخرى، وفي هذه الإرشادات، سيكون الكلام كله موجها الى الإصدار الثاني من بيئة العمل ال Yii.
+
+
+#
المتطلبات الأساسية للعمل على إطار ال Yii
+
+
+
+
الإصدار PHP 5.4.0 أو أكثر
+
المعرفة الأساسية بمفاهيم البرمجة كائنية التوجه OOP
+
المعرفة بآخر وأحدث التقنيات الموجودة بال php مثل ال namespaces, traits، الفهم لهذه المفاهيم سيسهل عليك العمل كثيرا
+
+
+
+
+ ملاحظة: يمكن التحقق من توافق المتطلبات الخاصة بك مع ال yii من خلال الدخول الى الصفحة requirement الموجودة بال yii
+
diff --git a/docs/guide-ar/start-forms.md b/docs/guide-ar/start-forms.md
new file mode 100644
index 0000000000..ecbbda98e1
--- /dev/null
+++ b/docs/guide-ar/start-forms.md
@@ -0,0 +1,253 @@
+#
العمل مع ال Forms
+
+
+في هذا الموضوع سنتعلم كيفية إنشاء صفحة تحتوي على form للحصول على البيانات من خلال المستخدمين، وستعرض هذه الصفحة form يحتوي على حقل لإدخال الإسم وحقل إدخال للبريد الإلكتروني.
+وبعد الحصول على المعلومات الخاصة بهذه الحقول من المستخدم، ستقوم الصفحة بطباعة القيم التي تم إدخالها.
+
+
+
+ في هذا الشرح، ستقوم بإضافة action وصحفتين views، وستتعرف أيضا على طريقة إنشاء ال model.
+
+
+
+من خلال هذا البرنامج التعليمي ، ستتعلم كيفية:
+
+
+
+
إنشاء model لتمثيل البيانات التي تم إدخالها من خلال المستخدم عن طريق ال form.
+
إنشاء rules للتحقق من صحة البيانات التي تم إدخالها.
+
بناء html form داخل صفحة ال view.
+
+
+##
إنشاء ال Model
+
+
+ يتم تمثيل البيانات التي يتم طلبها من خلال المستخدم عن طريق ال EntryForm model class كما هو موضح أدناه، ويتم حفظ هذا الملف داخل المسار models، ويكون إسم ال model ومساره في مثالنا هذا هو models/EntryForm.php. يرجى الرجوع إلى صفحة ال Class Autoloading للحصول على مزيد من التفاصيل حول طريقة التعامل مع التسمية الخاصة بال class في Yii.
+
+
+```php
+
+ هذا ال class يرث ال [[yii\base\Model]], وهو base class تم تصميمه من خلال ال Yii, وبشكل عام وظيفته هي تثمثيل البيانات الخاصة بأي نموذج.
+
+
+
+معلومة: يتم إستخدام ال [[yii\base\Model]] كأصل لل model class ولا يرتبط بجداول قواعد البيانات. ويستخدم ال [[yii\db\ActiveRecord]] بالشكل الإعتيادي ليكون هو الأصل الذي من خلاله يتم الإرتباط بجداول بقواعد البيانات.
+
+
+
+ يحتوي class ال EntryForm على متغيرين إثنين من نوع Public، هما name و email، واللذان يستخدمان في تخزين البيانات التي أدخلها المستخدم. كما يحتوي أيضًا على method باسم rules()، والتي تُرجع مجموعة
+الشروط الخاصة بالبيانات للتحقق من صحتها. والشيفرة البرمجية الموجودة داخل ال rules method تعني:
+
+
+
+
كل من ال name وال email حقول الزامية (required).
+
ال email حقل يجب أن يحتوي بداخله قيمة صحيحة تعبر عن البريد الإلكتروني (القواعد النحوية لكتابة البريد الإلكتروني).
+
+
+
+ إذا كان لديك object من ال EntryForm ويحتوي على البيانات التي أدخلها المستخدم، فيمكنك حينها إستدعاء الدالة [[yii\base\Model::validate()|validate()]] للتحقق من صحة البيانات. اذا فشلت عملية التحقق من صحة البيانات، فسيؤدي ذلك إلى تغيير قيمة ال [[yii\base\Model::hasErrors|hasErrors]] إلى true ، بالإضافة الى ذلك يمكنك التعرف الى الأخطاء المتعلقة بهذه البيانات من خلال الدالة [[yii\base\Model::getErrors|errors]].
+
+ الآن، ستحتاج إلى إنشاء action جديد في ال site controller وليكن إسمه entry، والذي سيقوم بدوره باستخدام ال model الجديد الذي قمنا بإنشائه. هذه العملية تم شرحها سابقا في الجزء التالي من التوثيق Saying Hello - قل مرحبا.
+
+
+```php
+load(Yii::$app->request->post()) && $model->validate()) {
+ // valid data received in $model
+
+ // do something meaningful here about $model ...
+
+ return $this->render('entry-confirm', ['model' => $model]);
+ } else {
+ // either the page is initially displayed or there is some validation error
+ return $this->render('entry', ['model' => $model]);
+ }
+ }
+}
+```
+
+ أولا، يقوم ال action بإنشاء object من ال EntryForm. ثم يحاول تعبئة البيانات لل object من خلال ال $ _POST، والتي يتم تقديمها في ال Yii من خلال ال [[yii\web\Request::post()]].
+إذا تم ملء ال object بنجاح (على سبيل المثال، إذا قام المستخدم بإدخال البيانات داخل ال form ومن ثم قام بإرسالها(submitted html form))، فسيتم استدعاء ال [[yii\base\Model::validate()|validate()]] من خلال ال action للتأكد من صلاحية القيم المدخلة.
+
+
+
+
+ معلومة: يمثل التعبير Yii::$app ال Application instance الذي يمكن الوصول اليه من خلال ال singleton (singleton globally accessible). وهو أيضا service locator بحيث يوفر الدعم لل components مثل ال request, response, db..الخ، لدعم وظائف محددة. مثلا في المثال الموجود في الأعلى، فإن ال request هو component من ال application instance والذي يستخدم للوصول الى البيانات الموجودة داخل ال $_POST.
+
+
+
+ إذا كان كل شيء على ما يرام، فسوف يقوم ال action بجلب ال view التالية: entry-confirm، وذلك لتأكيد أن العملية قد تمت بنجاح بالنسبة للمستخدم، أما إن كانت البيانات غير صحيحة، أو لم يتم إرسال أي بيانات، فإن ال view entry هي التي سيتم جلبها وعرضها للمستخدم، حيث يتم عرض ال Html form، مع أي رسائل تحذير بخصوص الأخطاء التي تم العثور عليها من عملية التحقق.
+
+
+
+ملاحظة: في هذا المثال البسيط، نعرض صفحة التأكيد فقط عند إرسال البيانات بشكل صحيح. عند الممارسة العملية، يجب عليك استخدام [[yii\web\Controller::refresh()|refresh()]] أو [[yii\web\Controller::redirect()|redirect()]] لتجنب أي مشكلة تحصل عن طريق ال resubmission والتي تندرج تحت العنوان form resubmission problems.
+
+
+##
إنشاء ال views
+
+
+ أخيرا، سنقوم بإنشاء صفحتين لل views الأولى بإسم entry-confirm والثانية entry. وهاتين الصفحتين سيتم جلبهم من خلال ال entry action.
+
+
+
+ ال entry-confirm ستقوم بكل بساطة بعرض الإسم والبريد الإلكتروني الذي تم إدخالهم من قبل المستخدم. ويجب حفظ هذه الصفحة بالمسار التالي: views/site/entry-confirm.php
+
+
+```php
+
+
You have entered the following information:
+
+
+
: = Html::encode($model->name) ?>
+
: = Html::encode($model->email) ?>
+
+```
+
+ صفحة ال entry ستقوم بعرض ال HTML form. هذه الصفحة يجب أن يتم حفظها داخل المسار التالي: views/site/entry.php
+
+ تستخدم ال view أسلوب مميز لبناء ال Forms، وذلك عن طريق ال widget الذي يسمى ب [[yii\widgets\ActiveForm|ActiveForm]]. إن الأسلوب المستخدم في هذا ال widget يقوم على إستخدام كل من الدالة begin() و end() لجلب ال opening وال closing form tags على التوالي (فتحة ال tag، ثم الإغلاق الخاص بهذا ال tag)، وبين الفتحة والإغلاق يمكنك إنشاء الحقول عن طريق إستخدام الدالة [[yii\widgets\ActiveForm::field()|field()]]. في هذا المثال كان الحقل الأول في ال form يشير الى name data، والثاني يشير الى ال email data، وبعد هذه الحقول ستجد الدالة المستخدمة لإنشاء ال Submit button وهي [[yii\helpers\Html::submitButton()]].
+
+
+##
لنجرب المثال
+
+
+ لتشاهد آلية العمل لهذا المثال، والنتائج المتعلقة به، يمكنك إستخدام المتصفح والدخول الى الرابط التالي:
+
+عند دخولك الى الرابط السابق، سترى صفحة تعرض Html form يحتوي على حقلين لإدخال المعلومات. أمام كل حقل إدخال ستجد label يشير إلى البيانات المطلوب إدخالها. إذا قمت بالنقر فوق الزر "submit" بدون
+أي إدخال، أو إذا لم تقم بكتابة عنوان البريد الإلكتروني بشكل صحيح، فستظهر لك رسالة خطأ بجوار الحقل المقصود.
+
+
+
+
+
+ بعد إدخالك لإسم وبريد الكتروني صحيح، وقيامك بالنقر على زر submit، فإنك ستشاهد صفحة جديدة تقوم بعرض البيانات التي قمت بإدخالها.
+
+
+
+
+##
كيف ظهر الخطأ؟ هل هو سحر؟!
+
+
+قد تتساءل كيف يعمل ال Html form بالخفاء، وقد يبدو ذلك سحرا للوهلة الأولى، فهو يعرض ال label لكل حقل إدخال، ويعرض رسائل الخطأ إذا لم تقم بإدخال البيانات بشكل صحيح، وكل ذلك دون الحاجة لإعادة تحميل الصفحة.
+
+
+
+ إن السحر الموجود لدينا هنا، هو كيفية العمل الخاصة بالشيفرة البرمجية لل form، والتي تعمل بالخفاء، إن إجراء التحقق عن صحة البيانات يتم في البداية من جانب العميل -client side- وذلك باستخدام الجافا سكربت، ومن ثم -بعد تجاوز التحقق الخاص بالجافا سكربت- بتم تنفيذ التحقق من جانب ال server-side عبر ال PHP. ال [[yii\widgets\ActiveForm]] ذكية بما فيه الكفاية لاستخراج ال rule الخاصة بالتحقق والتي قمت بإنشائها وتعريفها داخل ال EntryForm، ومن ثم تحويل هذه القواعد إلى شيفرة برمجية بالجافا سكربت قابلة للتنفيذ، ومن ثم استخدام هذه الشيفرة من قبل الجافا سكربت لإجراء التحقق من صحة البيانات. في حال قمت بإيقاف الجافا سكربت في المتصفح الخاص بك، سوف يستمر إجراء التحقق من جانب الخادم -server side-، كما هو موضح في ال action المسمى actionEntry(). وهذا يضمن صحة البيانات في جميع الظروف.
+
+
+
+ تحذير: التحقق من جانب العميل -client side- يوفر تجربة أفضل للمستخدم، لكن يجب الأخذ بعين الإعتبار أن التحقق من جانب الخادم -server- مطلوب دائمًا، سواء تم التحقق من جانب العميل أم لا.
+
+
+
+ يتم إنشاء ال labels الخاصة بحقول الإدخال بواسطة الدالة field()، وذلك من خلال إستخدام أسماء ال property الموجودة داخل ال model. على سبيل المثال، سيتم إنشاء ال label التالي Name للproperty التالية: name.
+
+
+
+ كما يمكنك تعديل ال label الإفتراضي لأي حقل من خلال الشيفرة البرمجية التالية:
+
+ معلومة: يوفر ال Yii العديد من ال widgets لمساعدتك في إنشاء views معقدة وديناميكية بسرعة. كما أنك ستتعلم في وقت لاحق كيف يمكنك إنشاء widget جديد، وستكتشف أن الموضوع سهل وبسيط، مما سيدفعك إلى كتابة الشيفرة البرمجية الخاصة بك داخل ال widget، والذي بدوره سيجعل من هذه الشيفرة قابلة للتطوير والإستخدام في أكثر من مكان في المستقبل.
+
+
+##
الخلاصة
+
+
+ في هذا الجزء من التوثيق، تحدثنا عن كل جزء في ال MVC architectural pattern، لقد تعلمت الآن كيف يمكنك إنشاء model class ليقوم بتمثيل البيانات الخاصة بالمستخدمين، ومن ثم التحقق منها.
+
+
+
+ لقد تعلمت أيضًا كيفية الحصول على البيانات من المستخدمين، وكيفية عرض البيانات مرة أخرى في المتصفح. هذه المهمة يمكن أن تأخذ الكثير من الوقت عند تطوير أي تطبيق، ولكن، يوفر ال Yii العديد من ال widgets القوية، والتي تجعل من هذه المهمة أمرا سهلا للغاية.
+
+
+
+ في الجزء القادم من هذا التوثيق، ستتعلم كيف يمكنك التعامل مع قواعد البيانات، والتي سنحتاجها -غالبا- مع كل تطبيق ستعمل عليه تقريبا.
+
diff --git a/docs/guide-ar/start-hello.md b/docs/guide-ar/start-hello.md
new file mode 100644
index 0000000000..86bfbd236e
--- /dev/null
+++ b/docs/guide-ar/start-hello.md
@@ -0,0 +1,149 @@
+#
قل مرحبا - Saying Hello
+
+
+ في هذا الموضوع سنتعرف على كيفية إنشاء صفحة "Hello" جديدة في التطبيق الذي قمت بتثبيته، ولتحقيق ذلك، يجب عليك القيام بإنشاء action و view لهذه الصفحة:
+
+
+
+
سيقوم التطبيق بإرسال ال request الخاص بالصفحة إلى ال action.
+
وسيقوم ال action بدوره في جلب ال view التي تعرض كلمة "Hello" إلى المستخدم النهائي.
+
+
+
+ من خلال هذا البرنامج التعليمي ، ستتعلم ثلاثة أشياء:
+
+
+
+
كيفية إنشاء action ليقوم بإستقبال ال request ومن ثم الرد (respond) عليها.
و كيفية إنشاء التطبيق لل requests التي يوجهها لل actions.
+
+
+##
إنشاء ال Action
+
+
+ لإنشاء صفحة "Hello"، ستقوم بإنشاء sayaction والذي بدوره سيقوم بقراءة ال message parameter من ال request، ومن ثم عرض ال message مرة أخرى إلى المستخدم. إذا كان ال request لا يحمل معه ال message parameter فإن ال action سيقوم بطباعة message إفتراضية وهي "Hello".
+
+
+
+ معلومة: ال Actions هي الكائنات(objects) التي يمكن للمستخدمين من الوصول اليها وتنفيذ ما في بداخلها بشكل مباشر. يتم تجميع هذه ال Actions بواسطة ال controllers. ونتيجة لذلك فإن ال response الراجعة للمستخدم ستكون هي نتيجة التنفيذ الخاصة بال action.
+
+
+
+ يجب تعريف ال actions داخل ال controller، ولتبسيط الفكرة، سنقوم بتعريف ال say action داخل أحد ال controller الموجود مسبقا وهو ال siteController. هذا ال controller ستجده داخل المسار controllers/siteController.php. ومن هنا سنبدأ بإضافة ال action الجديد:
+
+ في الشيفرة البرمجية السابقة ، تم تعريف ال say action من خلال إنشاء الدالة actionSay داخل الكلاس siteController. يستخدم ال Yii كلمة action ك prefix للدوال للتميز بين الدوال ال action و ال non-action في ال controller، كما يستخدم الإسم الخاص بال action مباشرة بعد ال prefix، ويتم عمل mapping بين ال action method name وال action id ليستطيع المستخدم من الوصول للدالة المنشئة من خلال ال action id.
+
+
+
+ عندما يتعلق الأمر بتسمية ال action الخاصة بك، يجب عليك أن تفهم كيف يقوم ال Yii بالتعامل مع ال action id، ال action id يجب أن يكون دائما أحرف lower case، وإذا إحتوى ال action id على عدة كلمات فإن الفاصل بينهم سيكون الداش (dashes) مثل create-comment، ويتم ربط ال action id بال action method name من خلال حذف ال dashes من ال IDs، ويتم عمل capitalizing لأول خرف من كل كلمة، وإضافة ال prefix الى الناتج السابق من التحويل. مثال: ال action id المسمى ب create-comment سيتم تحويله الى ال action method name التالي: actionCreateComment.
+
+
+
+ في المثال السابق، يقوم ال action method على إستقبال parameter يسمى ب $message، والذي يملك قيمة إفتراضية وهي "Hello" (وهي مشابة تماما لطريقة وضع القيم الإفتراضية لل argument في ال PHP). عندما يستقبل التطبيق ال request ويحدد أن ال action المطلوب للتعامل مع الطلب (request) هو say، فإن التطبيق سيقوم بإسناد القيمة الموجودة بال request الى ال parameter الموجود بال action بشرط أن يكون الإسم الموجود بال request هو نفسه الموجود في ال action. ولتبسيط الموضوع يمكن القول أن ال request اذا احتوى على كلمة message وقيمة هذا ال parameter هي "GoodBye"، فإن ال $message الموجودة في ال action ستصبح قيمتها "GoodBye".
+
+
+
+
+ من خلال ال action method، يتم استدعاء ال [[yii\web\Controller::render()|render()]] لتقديم
+الملف الخاص بال view والمسمى هنا ب say. أيضا فإن ال message يتم تمرريرها الى ال view مما يسمح لك باستخدام هذا ال parameter داخل ال view. النتيجة المرجعة لل view تتم معالجتها وإرجاعها من خلال ال action method، وهذه النتائج سيتم إستقبالها من خلال المتصفح الخاص بالمستخدم ليتم عرضها وكأنها (جزء من صفحة Html كاملة).
+
+
+##
إنشاء ال View
+
+
+ ال Views هي شيفرات برمجية كتبت ﻹنشاء المحتوى المناسب بنائا على ال response الراجع اليها من خلال ال action.
+ بالنسبة إلى مثال "Hello" ، الآن سنقوم بإنشاء view مسمى ب say، والذي سيقوم بدوره بطباعة ال message التي تم إستلامها من ال action، شاهد المثال:
+
+ صفحة ال view say يجب أن يتم حفظها داخل المسار التالي: views/site/say.php. عندما يتم إستدعاء الدالة [[yii\web\Controller::render()|render()]] من قبل ال action، فإنه سينظر للمسار على الشكل التالي: views/ControllerID/ViewName.php، بحيث يكون في مثالنا السابق ال ContollerID هو ال site وال viewName هو say.
+
+
+
+ ملاحظة: في الشيفرة البرمجية أعلاه، تكون ال message مضمنة داخل ال [[yii\helpers\Html::encode()]] قبل أن يتم طباعتها، هذا الأمر ضروري لأن ال parameter التي تأتي من المستخدم النهائي لا يجب الوثوق بها، فهي يمكن أن تحتوي على شيفرات برمجية تستغل الضعف الحاص بك بموضوع الأمان مثل vulnerable to XSS attack عن طريق دمج JS code مع ال parameter.
+
+
+
+ وبطبيعة الحال، يمكنك وضع المزيد من المحتوى في صفحة ال say view. ويمكن أن يتكون هذا المحتوى من HTML tag و plain text وحتى PHP statements.
+في الواقع، تعد ال say view مجرد شيفرة برمجية بلغة ال PHP والتي يتم تنفيذها بواسطة [[yii\web\Controller::render()|render()]].
+المحتوى الذي سيتم طباعته من خلال ال view سيتم إرجاعه الى التطبيق من خلال ال response، وسيقوم التطبيق بدوره بإخراج هذه النتيجة إلى المستخدم النهائي.
+
+
+
+##
تطبيق المثال
+-------------
+
+
+بعد إنشاء ال action وصفحة ال view، يمكنك الوصول إلى الصفحة الجديدة عن طريق عنوان URL التالي:
+
+ سينتج عن هذا ال URL صفحة تعرض "Hello World". هذه الصفحة لديها نفس ال Header و ال Footer لصفحات التطبيق الأخرى.
+
+
+
+ إذا قمت بحذف ال message parameter من ال URL ، فسترى الصفحة تعرض كلمة " Hello " فقط. ويرجع ذلك إلى أن "message" يتم تمريرها ك parameter إلى ال actionSay()، وعندما يتم حذفها، سيتم استخدام القيمة الافتراضية وهي "Hello" بدلاً من ذلك.
+
+
+
+ معلومة: تتشارك الصفحة الجديدة مع الصفحات الأخرى بالتطبيق بنفس ال Header وال Footer وذلك بسبب الدالة [[yii\web\Controller::render() | render ()]] والتي ستقوم بشكل تلقائي بتضمين النتيجة الخاصة بصفحة ال view say مع صفحة ال Layout، والتي يمكنك أن تجدها داخل المسار التالي: views/layouts/main.php
+
+
+
+ ال r الموجودة في ال URL أعلاه يتطلب الكثير من الشرح. ولكن باختصار يمكن القوم أنها اختصار ل route ، وهو معرف فريد من نوعه(unique ID) للتطبيق بحيث يقوم بالتأشير على ال action، والصيغة الخاصة بال route هي ControllerID/ActionID. عندما يتلقى التطبيق request، فإنه سيتم التحقق من r parameter، فيقوم باستخدام الجزء ControllerID لتحديد ال controller class المطلوب ليقوم بعمل instance منه، ومن ثم يقوم ال controller باستخدام ال "ActionID" لتحديد ال action المطلوب والذي سيقوم بالعمل الفعلي.
+ في المثال الخاص بنا، فإن ال route هو "site/say"، وهذا ال route يتم معالجته ليستدعي ال controller class المسمى ب SiteController و ال action المسمى ب actionSay داخل هذا ال controller، ونتيجة لذلك سيتم فعليا إستدعاء الدالة SiteController::actionSay() لتقوم بمعالجة ال request كما يلزم.
+
+
+
+ معلومة: مثل ال actions، تحتوي ال controllers أيضًا على Uniquely IDs يتم تعريفها واستخدامها من خلال التطبيق. تستخدم ال Controllers IDs نفس قواعد التسمية الخاصة بال action IDs، ويتم ذلك من خلال حذف ال dashes و capitalizing أول حرف من كل كلمة، ثم إضافة كلمة Controller الى الإسم الناتج -وهنا الإختلاف عن ال action ID-. مثال: ال controller ID المسمى ب "post-comment" ستم معالجته ليصبح PostCommentController.
+
+
+
+##
الخلاصة
+
+
+ في هذا الموضوع، قمنا بالتعرف على ال controller وال view كأجزاء من MVC architectural pattern، كما قمنا بإنشاء action داخل controller موجود ليستقبل specific request ويتحكم فيه، وقمنا أيضا بإنشاء view لعرض المحتوى. في هذا المثال البسيط، لم نتطرق الى ال model، وقمنا فقط باستخدام ال data بشكل مباشر من خلال ال message parameter.
+
+
+
+ كما تعرفنا أيضا على ال routes في ال Yii، والتي تعمل بدورها كجسر بين ال user request وال controller actions.
+
+
+
+ في الموضوع القادم، ستتعلم كيف يمكنك إنشاء model وكيف يمكنك إنشاء صفحة جديدة تحتوي على Html form.
+
diff --git a/docs/guide-ar/start-installation.md b/docs/guide-ar/start-installation.md
new file mode 100644
index 0000000000..8a7dc2b14f
--- /dev/null
+++ b/docs/guide-ar/start-installation.md
@@ -0,0 +1,301 @@
+#
تثبيت ال Yii
+
+
يمكنك تثبيت ال Yii بطريقتين ، الأولى باستخدام مدير الحزم Composer أو عن طريق تنزيل Archive File. الطريقة الأولى هي الطريقة المفضلة للعمل، ، لأنها تتيح لك تثبيت [extensions - ملحقات أو اضافات] جديدة، أو تحديث إطار العمل Yii ببساطة عن طريق تشغيل أمر واحد فقط.
+
+
+
+ التثبيت الإفتراضي لل Yii ينتج عنه بنية تركيبة منظمة ومرتبة للمجلدات والملفات التي بداخلها، ويوفر هذا الكلام بعض المميزات التي يتم إضافتها وإنشائها بشكل تلقائي مثل صفحة تسجيل الدخول، ونموذج اتصل بنا...الخ، هذا الأمر سيشكل نقطة إنطلاق جيدة لبدء العمل على أي مشروع.
+
+
+
+ في هذه الصفحة من التوثيق سنقوم بشرح ووصف كيف يمكن تثبيت إطار العمل Yii وبالتحديد Yii2 Basic Project Template.
+ هناك Template آخر موجود بإطار العمل Yii وهو Yii2 Advanced Project Template، وهو الأفضل للعمل وإنشاء المشاريع لفريق عمل برمجي، ولتطوير المشاريع متعددة الطبقات(multiple tires).
+
+
+
+معلومة: قالب المشروع الأساسي (Basic) مناسب لتطوير 90% من تطبيقات الويب. ويختلف القالب المتقدم (Advanced Template) عن القالب الأساسي في كيفية تنظيم وهيكلة الشيفرة البرمجية.
+اذا كنت جديدا في عالم تطوير تطبيقات الويب باستخدام ال Yii، فإننا نوصيك بقوة بأن تستخدم القالب الأساسي في بناء المشروع الخاص بك.
+
+
+
+##
تثبيت ال Yii من خلال (Composer)
+
+###
تثبيت ال Composer
+
+
+إن لم يكن لديك Composer مثبت مسبقا، فيمكنك السير بخطوات تثبيته من خلال الدخول الى هذا الرابط https://getcomposer.org/download/.
+لتثبيت ال Composer في كل من نظامي Linux و Max OS X، يمكنك تنفيذ الأوامر التالية:
+
+ في هذا الدليل ، نفترض أنك قمت بتثبيت ال composer على مستوى جميع المشاريع (globally) بحيث تكون أوامر ال composer متاحة لجميع المشاريع من أي مكان. أما إذا كنت تستخدم ال composer.phar لمسار محدد فقط(local directory)، فيجب عليك ضبط الأومر وفقًا لذلك.
+
+إذا كان ال composer مثبتًا من قبل، فتأكد من استخدام إصدار حديث. يمكنك تحديث ال composer عن طريق تنفيذ الأمر التالي `composer self-update`
+
+
+
+ ملاحظة مهمة: أثناء تثبيت ال Yii ، سيحتاج ال composer إلى طلب(request) الكثير من المعلومات من ال Github Api. يعتمد عدد الطلبات على عدد dependencies التي يمتلكها التطبيق الخاص بك، وقد يكون هذا العدد أكبر من الحد المسموح به من قبل ال Github Api (Github API rate limit). إذا وصلت الى الحد الأعلى المسموح به من الطلبات، فقد يطلب منك ال composer بيانات تسجيل الدخول إلى Github، وذلك للحصول على رمز (token) للدخول إلى Github Api. اذا كانت عمليات الإتصال سريعة، فقد تصل إلى هذا الحد(limit) قبل أن يتمكن ال composer من التعامل معه ، لذالك نوصي بتكوين رمز الدخول(access token) قبل تثبيت ال Yii. يرجى الرجوع إلى التوثيق الخاص بال Composer والإطلاع على التعليمات الخاصة Github API tokens للحصول على الإرشادات اللازمة للقيام بذلك.
+
+
+###
تثبيت ال Yii
+
+
+ من خلال ال Composer، يمكنك الآن تثبيت ال Yii من خلال تنفيذ سطر الأوامر التالي داخل أي مسار يمكن الوصول اليه من قبل الويب
+
+ سطر الأوامر السابق سيقوم بتثبيت أحدث نسخة مستقرة(stable) من إطار العمل Yii داخل مسار جديد اسمه basic، ويمكنك التعديل على سطر الأوامر السابق لتغيير اسم المشروع لأي اسم ترغب فيه.
+
+
+
+معلومة: اذا واجهتك أي مشكلة عند تنفيذ السطر `composer create-project` فيمكنك الذهاب إلى قسم استكشاف الأخطاء في ال composer.
+في معظم الأخطاء الشائعة، وعند حل المشكلة أو الخطأ، يمكنك إكمال التثبيت من خلال الدخول الى المسار `basic` ومن ثم تنفيذ الأمر التالي: `composer update`.
+
+
+
+ تلميح: اذا كنت ترغب بتثبيت أحدث نسخة خاصة بالمطورين من ال Yii، فيمكنك ذلك من خلال إضافة الخيار stability وذلك من خلال سطر الأوامر التالي:
+
+ ملاحظة: نسخة المطورين من ال Yii يجب أن يتم إستخدامها للمواقع الإلكترونية التي لن تصدر كنسخة نهائية للمستخدم(Not for production) لأن ذلك يمكن أن يسبب بإيقاف المشروع أو الشيفرة البرمجية الخاصة بك.
+
قم بفك ضغط الملف الذي تم تنزيله إلى مجلد يمكن الوصول إليه عبر الويب.
+
قم بتعديل ملف `config / web.php` عن طريق إدخال secret key ل` cookieValidationKey`
+(يتم ذلك تلقائيًا إذا قمت بتثبيت ال Yii باستخدام 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',
+ ```
+
+
+###
خيارات تثبيت أخرى
+--------------------------
+
+
+توضح تعليمات التثبيت أعلاه كيفية تثبيت ال Yii ، والذي يقوم أيضًا بإنشاء تطبيق ويب أساسي(basic).
+هذا النهج هو نقطة انطلاق جيدة لمعظم المشاريع، صغيرة كانت أو كبيرة. خصوصا اذا كنت قد بدأت تعلم ال Yii من وقت قريب.
+
+لكن، هناك خيارات أخرى متاحة لتثبيت ال Yii وهي:
+
+
+
+
إذا كنت ترغب فقط في تثبيت ال core لإطار العمل Yii، وترغب ببناء المكونات الخاصة بإطار العمل كما ترغب أنت وبطريقتك أنت، يمكنك اتباع التعليمات كما هو موضح في هذه الصفحة Building Application from Scratch.
+
إذا كنت تريد البدء بتطبيق أكثر تعقيدًا وأكثر إحترافية، ويتناسب بشكل أفضل مع وجود فريق عمل تقني،
+فأنت اذا سترغب بتثبيت ال Advanced Project Template
+
+
+
+
+###
تثبيت ال Assets
+--------------------------
+
+
+ تعتمد ال Yii على حزم Bower و / أو NPM لتثبيت مكتبات ال (CSS و JavaScript). ويستخدم ال composer للحصول على هذه المكتبات ، مما يسمح بالحصول على إصدارات ال PHP و CSS / JavaScript في نفس الوقت. ويمكن تحقيق ذلك إما عن طريق استخدام asset-packagist.org أو من خلال ال composer asset plugin، يرجى الرجوع إلى Assets documentation لمزيد من التفاصيل.
+
+قد ترغب في إدارة ال assets عبر ال native Bower / NPM أو استخدام ال CDN أو تجنب تثبيت ال assets بالكامل من حلال ال Composer ، ويمكن ذلك من خلال إضافة الأسطر التالية إلى "composer.json":
+
+ملاحظة: في حالة تجاوز تثبيت ال assets عبر ال Composer، فأنت المسؤول عن تثبيت ال assets وحل مشكلات التعارض بين الإصدارات والمكتبات المختلفة. وكن مستعدًا لعدم تناسق محتمل بين ملفات ال asstes والإضافات المختلفة.
+
+
+###
التحقق من التثبيت
+--------------------------
+
+
+ بعد الانتهاء من التثبيت، ستحتاج الى القيام بإعداد خادم الويب الخاص بك(your web server) (انظر القسم التالي) أو قم باستخدام built-in PHP web server عن طريق تنفيذ الأمر التالي داخل المسار web في المشروع الخاص بك:
+
+
+```bash
+php yii serve
+```
+
+
+ملاحظة: افتراضيًا ال HTTP-server يعمل على البورت 8080. ومع ذلك ، إذا كان هذا البورت قيد الاستخدام بالفعل أو كنت ترغب في تشغيل أكثر من تطبيق بهذه الطريقة، حينها سيلزمك تحديد البورت الذي يجب استخدامه. ما عليك سوى إضافة --port:
+
+
+```bash
+php yii serve --port=8888
+```
+
+ يمكنك استخدام الرابط الموجود في الأسفل للوصول الى تطبيق ال Yii الذي قمت بتثبيته وتنفيذ الأوامر السابقة عليه.
+
+ اذا كانت كل الإعدادات السابقة تعمل بشكل صحيح، فيجب أن ترى الصورة الموجودة بالأعلى "Congratulations!" على المتصفح. إذا لم يكن كذلك، يرجى التحقق مما إذا كان تثبيت الPHP الخاص بك متوافق مع متطلبات ال Yii. يمكنك التحقق من ذلك باستخدام أحد الأساليب التالية:
+
+
+
+
قم بنسخ الملف
/requirements.php
الى المسار
/web/requirements.php
بحيث يمكنك الوصول الى الصفحة من خلال الرابط التالي:
http://localhost/requirements.php
+
قم بتنفيذ الأوامر التالية:
+ cd basic
+ php requirements.php
+
+
+
+ يجب عليك أن تقوم بتثبيت وإعداد ال PHP الخاص بك بحيث تلبي الحد الأدنى من متطلبات ال Yii. الأهم من ذلك يجب أن يكون الإصدار الخاص بال PHP أعلى أو يساوي 5.4. من الناحية المثالية أحدث إصدار يعمل مع ال Yii هو ال PHP 7. يجب عليك أيضًا تثبيت ال PDO PHP Extension.
+
+
+
+###
إعداد ال Web Servers
+-----------------------
+
+
+معلومة: يمكنك تخطي هذا الجزء الآن إذا كنت تختبر فقط إطار العمل Yii دون أي نية لنشر هذا التطبيق على الويب(بدون رفع التطبيق على production server).
+
+
+
+ يجب أن يعمل التطبيق الذي تم تثبيته وفقًا للتعليمات المذكورة أعلاه مع أي من الخوادم ال Apache HTTP أو ال Nginx HTTP في كل من أنظمة التشغيل Windows, Mac OS X أو Linux ممن لديها إصدار أعلى أو يساوي PHP 5.4، كما أن ال Yii 2.0 متوافق مع ال Facebook HHVM، لكن، يجب أن تأخذ بعين الإعتبار أن ال HHVM يسلك في بعض الأحيان بطريقة مختلفة عن ال Native PHP، لذلك يجب أن تأخذ عناية إضافية عندما تعمل على ال HHVM.
+
+
+
+ على ال production server، قد ترغب في إعداد خادم الويب الخاص بك بحيث يمكن الوصول إلى التطبيق
+الخاص بك عبر ال URL التالي http: // www.example.com / index.php بدلاً من http: // www.example.com / basic / web / index.php. هذا الكلام يتطلب إنشاء إعداد يقوم بتوجيه ال document root الموجود على ال web server الى مجلد ال basic/web، كما قد ترغب أيضا بإخفاء ال index.php من ال URL كما هو موضح في ال Routing and URL Creation. في هذا الموضوع ستتعلم كيف يمكنك إعداد ال Apache أو ال Nginx server لتحقيق هذه الأهداف.
+
+
+
+ معلومة: من خلال تعيين ال basic/web ك document root، فإنك بذلك تمنع أيضًا المستخدمين النهائيين من الوصول الى الشيفرة البرمجية الخاصة بالتطبيق الخاص بك، وتمنعهم من الوصول الى الملفات الحساسة والمهمة والمخزنة في sibling directories من basic/web، ويعبر رفض الوصول الى المجلدات الأخرى تحسينا أمنيا مهما، يساعد في الحفاظ على مستوى أعلى من الحماية.
+
+
+
+معلومة: إذا كان سيتم تشغيل التطبيق الخاص بك في بيئة استضافة مشتركة(shared hosting) حيث ليس لديك الصلاحية لتعديل الإعدادات الخاصة بال web server، ستحتاج حينها الى تعديل في البنية الخاصة بالمشروع للحصول على أفضل أمان ممكن. يرجى الرجوع إلى Shared Hosting Environment لمزيد من المعلومات.
+
+
+
+ معلومة: إذا كنت تقوم بتشغيل تطبيق ال Yii بوجود ال proxy، فقد تحتاج إلى إعداد التطبيق ليكون ضمن ال trusted proxies and header.
+
+
+###
الإعدادات الموصى بها لل Apache
+-----------------------
+
+
+ استخدم الإعدادات التالية في ملف ال httpd.conf في Apache أو ضمن إعدادات ال virtual host.
+ ملاحظة: يجب عليك استبدال المسار التالي path / to / basic / web بالمسار الفعلي للتطبيق الخاص بك وصولا الى ال basic / web.
+
+
+```apache
+# Set document root to be "basic/web"
+DocumentRoot "path/to/basic/web"
+
+
+ # use mod_rewrite for pretty URL support
+ RewriteEngine on
+ # If a directory or a file exists, use the request directly
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteCond %{REQUEST_FILENAME} !-d
+ # Otherwise forward the request to index.php
+ RewriteRule . index.php
+
+ # if $showScriptName is false in UrlManager, do not allow accessing URLs with script name
+ RewriteRule ^index.php/ - [L,R=404]
+
+ # ...other settings...
+
+```
+
+
+###
الإعدادات الموصى بها لل Nginx
+-----------------------
+
+
+ لاستخدام Nginx، يجب تثبيت PHP على أنه FPM SAPI، ويمكنك استخدام إعدادات ال Nginx التالية، مع الإنتباه على استبدال المسار من path / to / basic / web الى المسار الفعلي وصولا إلى basic / web بالإضافة الى إستبدال mysite.test إلى ال hostname الخاص بالتطبيق.
+
+ عند استخدامك لهذا الإعداد، يجب عليك أيضًا تعيين cgi.fix_pathinfo = 0 في ملف php.ini
+ من أجل تجنب العديد من طلبات ال stat() الغير الضرورية للنظام.
+
+
+
+ لاحظ أيضًا أنه عند تشغيل خادم HTTPS، تحتاج إلى إضافة fastcgi_param HTTPS on;
+بحيث يمكنك إكتشاف إذا ما كان الاتصال آمنًا أم لا.
+
diff --git a/docs/guide-ar/start-prerequisites.md b/docs/guide-ar/start-prerequisites.md
new file mode 100644
index 0000000000..bbafc6e461
--- /dev/null
+++ b/docs/guide-ar/start-prerequisites.md
@@ -0,0 +1,25 @@
+#
ماذا يجب أن تعرف قبل البدء بال Yii
+
+
+ منحنى التعلم الخاص بال Yii ليس حادًا مثل أطر PHP الأخرى، ولكن لا يزال هناك بعض الأشياء التي يجب أن تتعلمها قبل البدء بـال Yii.
+
+
+##
PHP
+
+
+ ال 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).
+
+
+##
البرمجة كائنية التوجه object oriented programming
+
+
+ كمبرمج أو مطور يرغب بالعمل على ال Yii، يجب عليك أن تمتلك المعرفة الأساسية للبرمجة كائنية التوجه OOP. إذا لم تكن على دراية بها ، فيمكنك تعلم ذلك من خلال واحدة من هذه الدورات المنتشرة مثل (https://code.tutsplus.com/tutorials/object-oriented-php-for-beginners--net-12762).
+ملاحظة: كلما زاد تعقيد التطبيق أو المشروع الذي تعمل عليه، كلما احتجت الى مستوى أعلى وإحترافي أكثر من مفاهيم ال OOP لحل وإدارة التعقديات التي ستترب على مثل هذه المشاريع.
+
+
+##
Command line and composer
+
+
تستخدم ال Yii بشكل كبير de-facto standard PHP package manager، ال Composer (https://getcomposer.org/)، لذلك تأكد من قرائتك وفهمك لهذا الموضوع قبل أن تبدء. بالإضافة الى ذلك إذا لم تكن على دراية باستخدام سطر الأوامر (command line) ، فقد حان الوقت لبدء المحاولة. بمجرد تعلم الأساسيات ، لن ترغب في العمل بدون إستخدام سطر الأوامر.
+ال composer: ويترجم حرفيا الى كلمة "الملحن"، وهي عبارة عن أداة لإدارة المشاريع البرمجية والتي تسمح لك بتحديث وتنزيل المكتبات البرمجية المطلوبة للمشروع الخاص بك.
+
+
diff --git a/docs/guide-ar/start-workflow.md b/docs/guide-ar/start-workflow.md
new file mode 100644
index 0000000000..6bdd9f11e4
--- /dev/null
+++ b/docs/guide-ar/start-workflow.md
@@ -0,0 +1,115 @@
+#
تشغيل التطبيقات
+
+
+بعد تثبيت ال Yii، سيكون لديك تطبيق Yii جاهز للعمل عليه ويمكن الوصول إليه عبر
+الرابط التالي: http://hostname/basic/web/index.php أو http://hostname/index.php إعتمادا على الإعدادات
+الخاصة بك (إعدادت ال web server). في هذا الجزء سنستعرض الوظائف ال built-in الموجودة في التطبيق الإفتراضي لإطار العمل Yii، وكيف يقوم بتنظيم الشيفرة البرمجية، وكيف يعالج (handling) هذا التطبيق الطلبات (requests) بشكل عام.
+
+
+
+ معلومة: من أجل تبسيط الطرح، ومن خلال هذا البرنامج التعليمي " Getting Started - البداية من هنا"، من المفترض أنك قمت بتعيين basic/web ك document root لل Web server، وقد قمت أيضا بإعداد ال Url الذي يسمح لك بالوصول الى التطبيق المثبت من خلاله ليكون على الشكل التالي: http://hostname/index.php أو ما شابه ذلك.
+اذا لم تقم بذلك، ولتلبية إحتياجاتك في هذا البرنامج التعليمي، يرجى ضبط ال Url كما هو موضح في هذه الصفحة.
+يمكنك معرفة الضبط الخاص بال Web server من هنا: تثبيت ال Yii
+
+
+
+ملاحظة: بخلاف إطار العمل نفسه(Yii framework)، بعد تثبيت ال template الخاص بالمشروع، يكون كل شيء في هذا التطبيق يخصك أنت، بحيث تملك الحرية في إضافة أو حذف أو تعديل كل ما تحتاج اليه.
+
+
+
+##
خصائص / وظائف التطبيق المثبت - Functionality
+
+
+ يحتوي ال Basic ِApplication Template الذي قمنا بتثبيته على أربع صفحات:
+
+
+
+
الصفحة الرئيسية(Homepage): يتم عرض هذه الصفحة من خلال الرابط التالي http://hostname/index.php
+
صفحة من نحن(About)
+
صفحة اتصل بنا (Contact): في هذه الصفحة يتم عرض form يسمح للأعشاء بالإتصال بك من خلال البريد الإلكتروني.
+
صفحة تسجيل الدخول (Login): في هذه الصفحة يتم عرض form يسمح للأعضاء بالحصول على الإذن لإستخدام الخصائص التي لا يجوز لغيرهم من الوصول اليها، قم بتجربة تسجيل الدخول من خلال استخدام admin/admin ولاحظ أن كلمة "Login" ستختفي من القائمة الرئيسية وستظهر محلها الكلمة "Logout"
+
+
+
+هذه الصفحات تشترك بامتلاكها common header and footer -الترويسة أعلى الصفحة، والذيل أسفل الصفحة-. ويحتوي ال header على القائمة الرئيسية (main menu) والتي بدورها تسمح لك بالتنقل بين الصفحات المختلفة.
+
+
+
+ أيضا، يجب عليك أن تنظر الى ال toolbar الموجود في أسفل نافذة المتصفح. ال debugger tool هذه تعتبر كأداة مفيدة مقدمة من ال Yii لتسجيل وعرض الكثير من المعلومات وتصحيح الأخطاء، مثل log messages, response statuses, the database queries run وما إلى ذلك.
+
+
+
+ بالإضافة إلى ال web application، يوجد هناك "console script" يسمى ب yii، والذي ستجده في المسار الرئيسي للتطبيق. هذا السكربت يمكن استخدامه لتشغيل المهام التي تعمل في الخفاء (background) أو لتنفيذ مهام الصيانة (ال maintenance). ستجد الوصف الخاص بهذا السكربت
+ داخل هذه الصفحة Console Application Section.
+
+
+
+
+##
هيكلية التطبيق - Application Structure
+
+
+ أكثر المسارات والملفات أهمية الموجودة داخل التطبيق (بافتراض أن ال application's root directory هو basic) هي:
+
+
+```
+basic/ application base path
+ composer.json used by Composer, describes package information
+ config/ contains application and other configurations
+ console.php the console application configuration
+ web.php the Web application configuration
+ commands/ contains console command classes
+ controllers/ contains controller classes
+ models/ contains model classes
+ runtime/ contains files generated by Yii during runtime, such as logs and cache files
+ vendor/ contains the installed Composer packages, including the Yii framework itself
+ views/ contains view files
+ web/ application Web root, contains Web accessible files
+ assets/ contains published asset files (javascript and css) by Yii
+ index.php the entry (or bootstrap) script for the application
+ yii the Yii console command execution script
+```
+
+
+بشكل عام، يمكن تقسيم الملفات داخل التطبيق إلى نوعين: الاول تجده تحت المسار التالي: basic/web
+وبنائا على ذلك، فإنه من الممكن الوصول إلى النوع الأول مباشرة عبر ال HTTP (أي من خلال المتصفح) ، بينما لا يمكن أن يكون ذلك للنوع الثاني.
+
+
+
+ يعتمد ال Yii على إستخدام ال MVC، وال MVC هو أحد ال Architectural Pattern، وهي اختصار ل model-view-controller،
+هذا الأسلوب ينعكس في تنظيم المسارات الخاصة بالملفات كما في الشكل أعلاه. يحتوي المسار models على جميع الكلاس (model classes) ، ويحتوي مسار ال views على جميع الصفحات التي ستستخدم في العرض (view scripts)، ويحتوي مسار الcontrollers على
+ جميع (controller classes)
+
+
+
+ يوضح المخطط التالي ال static structure للتطبيق.
+
+
+
+
+
+ يحتوي كل تطبيق على نص برمجي يستخدم للدخول الى التطبيق (كبوابة بعدها يظهر التطبيق للناظر)، ويسمى هذا الجزء بال entry script، وهو يمثل الصفحة web/index.php، ويعد هذا المدخل النص البرمجي الوحيد الذي يمكن الوصول إليه من خلال ال PHP في التطبيق، ويعمل هذا ال entry script على أخذ ال request ومن ثم إنشاء instance خاص بالتطبيق ليستطيع التعامل معه (التعامل مع التطبيق ومكوناته).
+ يقوم التطبيق على معالجة ال request بمساعدة من ال components، ومن ثم بقوم التطبيق بإرسال ال request الى عناصر ال MVC، كما يتم استخدام ال Widgets في ال views للمساعدة في إنشاء العناصر المعقدة والمتغيرة (Complex & Dynamic user interface) لواجهة المستخدم.
+
+
+
+##
دورة الحياة الخاصة بال request
+
+
+يوضح المخطط التالي كيفية معالجة التطبيق ل request معين.
+
يقوم التطبيق على إنشاء instance من ال controller للتحكم بال request.
+
يقوم ال controller على إنشاء action instance مع مجموعة من الفلاتر(المرشحات) الخاصة بهذا ال action.
+
في حالة فشل أي فلتر، يتم إلغاء الإجراء.
+
في حال نجاح جميع الفلاتر ، يتم تنفيذ الإجراء.
+
يقوم ال action بجلب بعض البيانات الخاصة بال models, وفي الغالب ستكون من قاعدة البيانات إن أمكن ذلك.
+
سيقوم ال action بجلب ال view ليقوم بتقديم البيانات التي تم جلبها لل view.
+
عملية الجلب السابقة ستقوم على إرجاع النتائج الى response application component
+
بعد ذلك سيقوم ال response component بإرسال النتيجة النهائية الى المتصفح الخاص بالمستخدم.
+
diff --git a/docs/guide-es/README.md b/docs/guide-es/README.md
index 5929f38905..568694cde5 100644
--- a/docs/guide-es/README.md
+++ b/docs/guide-es/README.md
@@ -18,6 +18,7 @@ Introducción
Primeros pasos
--------------
+* [Qué necesita saber](start-prerequisites.md)
* [Instalar Yii](start-installation.md)
* [Funcionamiento de aplicaciones](start-workflow.md)
* [Hola a todos](start-hello.md)
diff --git a/docs/guide-es/intro-yii.md b/docs/guide-es/intro-yii.md
index 495aba0eb4..d3a4e89e32 100644
--- a/docs/guide-es/intro-yii.md
+++ b/docs/guide-es/intro-yii.md
@@ -2,8 +2,8 @@
============
Yii es un framework de PHP de alto rendimiento, basado en componentes para desarrollar aplicaciones web
-modernas en poco tiempo. El nombre Yii significa "simple y evolutivo" en chino. También se puede considerar como un acrónimo
-de _**Yes It Is**_ (que en inglés significa _**Sí, eso es**_)!
+modernas en poco tiempo. El nombre Yii significa "simple y evolutivo" en chino. También se puede considerar como el acrónimo
+de _**Yes It Is**_ (que en inglés significa _**Sí, lo es**_)!
¿En qué es mejor Yii?
@@ -11,21 +11,29 @@ de _**Yes It Is**_ (que en inglés significa _**Sí, eso es**_)!
Yii es un framework genérico de programación web, lo que significa que se puede utilizar para desarrollar todo tipo de aplicaciones web en PHP.
Debido a su arquitectura basada en componentes y a su sofisticada compatibilidad de caché, es especialmente apropiado para el desarrollo
-de aplicaciones de gran envergadura, como portales, foros, sistemas de gestión de contenidos (CMS), proyectos de comercio electrónico,
-servicios web compatibles con la arquitectura REST y muchas más.
+de aplicaciones de gran envergadura, como páginas web, foros, sistemas de gestión de contenidos (CMS), proyectos de comercio electrónico,
+servicios web compatibles con la arquitectura REST y muchos más.
+
¿Cómo se compara Yii con otros frameworks?
--------------------------------------
-Si estás familiarizado con otros framework, puedes apreciar como se compara Yii con ellos:
+Si estás ya familiarizado con otros framework, puedes apreciar como se compara Yii con ellos:
-- Como la mayoría de los framework de PHP, Yii implementa el patrón de diseño MVC (Modelo-Vista-Controlador) y promueve la organización de código basada en este patrón.
-- La filosofía de Yii consiste en escribir el código de manera simple y elegante, sin sobrediseñar nunca por el mero hecho de seguir un patrón de diseño determinado.
-- Yii es un framework completo que provee muchas características probadas y listas para usar, como los constructores de consultas y la clase ActiveRecord para las bases de datos relacionales y NoSQL, la compatibilidad con la arquitectura REST para desarrollar API, la compatibilidad de caché en varios niveles y muchas más.
-- Yii es extremadamente extensible. Puedes personalizar o reemplazar prácticamente cualquier pieza de código de base, como se puede también aprovechar su sólida arquitectura de extensiones para utilizar o desarrollar extensiones distribuibles.
+- Como la mayoría de los framework de PHP, Yii implementa el patrón de diseño MVC (Modelo-Vista-Controlador) y
+ promueve la organización de código basada en este patrón.
+- La filosofía de Yii consiste en escribir el código de manera simple y elegante, sin sobrediseñar nunca por el
+ mero hecho de seguir un patrón de diseño determinado.
+- Yii es un framework completo (full stack) que provee muchas características probadas y listas para usar, como los
+constructores de consultas y la clase ActiveRecord para las bases de datos relacionales y NoSQL,
+la compatibilidad con la arquitectura REST para desarrollar API, la compatibilidad de caché en varios niveles
+y muchas más.
+- Yii es extremadamente extensible. Puedes personalizar o reemplazar prácticamente cualquier pieza de código de base,
+como se puede también aprovechar su sólida arquitectura de extensiones para utilizar o desarrollar extensiones distribuibles.
- El alto rendimiento es siempre la meta principal de Yii.
-Yii no es un proyecto de un sola persona, detrás de Yii hay un [sólido equipo de desarrollo][about_yii], así como una gran comunidad en la que numerosos profesionales contribuyen constantemente a su desarrollo.
+Yii no es un proyecto de un sola persona, detrás de Yii hay un [sólido equipo de desarrollo](http://www.yiiframework.com/team/),
+así como una gran comunidad en la que numerosos profesionales contribuyen constantemente a su desarrollo.
El equipo de desarrollo de Yii se mantiene atento a las últimas tendencias de desarrollo web, así como a las mejores prácticas y características de otros frameworks y proyectos.
Las buenas prácticas y características más relevantes de otros proyectos se incorporan regularmente a la base del framework y se exponen a través de interfaces simples y elegantes.
@@ -40,11 +48,11 @@ La versión 2.0 representa la actual generación del framework y su desarrollo r
Esta guía está basada principalmente en la versión 2.0. del framework.
-Requisitos
------------
+Requisitos y Prerequisitos
+--------------------------
-Yii 2.0 requiere PHP 5.4.0 o una versión posterior. Se pueden encontrar requisitos más detallados de características individuales
-ejecutando el script de comprobación incluido en cada release de Yii.
+Yii 2.0 requiere PHP 5.4.0 o una versión posterior y corre de mejor manera en la última versión de PHP 7. Se pueden encontrar requisitos más detallados de características individuales
+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)
diff --git a/docs/guide-es/output-data-providers.md b/docs/guide-es/output-data-providers.md
new file mode 100644
index 0000000000..324613743e
--- /dev/null
+++ b/docs/guide-es/output-data-providers.md
@@ -0,0 +1,421 @@
+Proveedores de datos
+====================
+
+En las secciones sobre [paginación](output-pagination.md) y [ordenación](output-sorting.md) se
+describe como permitir a los usuarios finales elegir que se muestre una página de datos en
+particular, y ordenar los datos por algunas columnas. Como la tarea de paginar y ordenar datos
+es muy común, Yii proporciona un conjunto de clases *proveedoras de datos* para encapsularla.
+
+Un proveedor de datos es una clase que implementa la interfaz [[yii\data\DataProviderInterface]].
+Básicamente se encarga de obtener datos paginados y ordenados. Normalmente se usa junto con
+[_widgets_ de datos](output-data-widgets.md) para que los usuarios finales puedan paginar y
+ordenar datos de forma interactiva.
+
+Yii incluye las siguientes clases proveedoras de datos:
+
+* [[yii\data\ActiveDataProvider]]: usa [[yii\db\Query]] o [[yii\db\ActiveQuery]] para consultar datos de bases de datos y devolverlos como _arrays_ o instancias [Active Record](db-active-record.md).
+* [[yii\data\SqlDataProvider]]: ejecuta una sentencia SQL y devuelve los datos de la base de datos como _arrays_.
+* [[yii\data\ArrayDataProvider]]: toma un _array_ grande y devuelve una rodaja de él basándose en las especificaciones de paginación y ordenación.
+
+El uso de todos estos proveedores de datos comparte el siguiente patrón común:
+
+```php
+// Crear el proveedor de datos configurando sus propiedades de paginación y ordenación
+$provider = new XyzDataProvider([
+ 'pagination' => [...],
+ 'sort' => [...],
+]);
+
+// Obtener los datos paginados y ordenados
+$models = $provider->getModels();
+
+// Obtener el número de elementos de la página actual
+$count = $provider->getCount();
+
+// Obtener el número total de elementos entre todas las páginas
+$totalCount = $provider->getTotalCount();
+```
+
+Se puede especificar los comportamientos de paginación y ordenación de un proveedor de datos
+configurando sus propiedades [[yii\data\BaseDataProvider::pagination|pagination]] y
+[[yii\data\BaseDataProvider::sort|sort]], que corresponden a las configuraciones para
+[[yii\data\Pagination]] y [[yii\data\Sort]] respectivamente. También se pueden configurar a
+`false` para inhabilitar las funciones de paginación y/u ordenación.
+
+Los [_widgets_ de datos](output-data-widgets.md), como [[yii\grid\GridView]], tienen una
+propiedad llamada `dataProvider` que puede tomar una instancia de un proveedor de datos y
+mostrar los datos que proporciona. Por ejemplo,
+
+```php
+echo yii\grid\GridView::widget([
+ 'dataProvider' => $dataProvider,
+]);
+```
+
+Estos proveedores de datos varían principalmente en la manera en que se especifica la fuente de
+datos. En las siguientes secciones se explica el uso detallado de cada uno de estos proveedores
+de datos.
+
+
+## Proveedor de datos activo
+
+Para usar [[yii\data\ActiveDataProvider]], hay que configurar su propiedad
+[[yii\data\ActiveDataProvider::query|query]].
+Puede tomar un objeto [[yii\db\Query] o [[yii\db\ActiveQuery]]. En el primer caso, los datos
+devueltos serán _arrays_. En el segundo, los datos devueltos pueden ser _arrays_ o instancias de
+[Active Record](db-active-record.md). Por ejemplo:
+
+
+```php
+use yii\data\ActiveDataProvider;
+
+$query = Post::find()->where(['state_id' => 1]);
+
+$provider = new ActiveDataProvider([
+ 'query' => $query,
+ 'pagination' => [
+ 'pageSize' => 10,
+ ],
+ 'sort' => [
+ 'defaultOrder' => [
+ 'created_at' => SORT_DESC,
+ 'title' => SORT_ASC,
+ ]
+ ],
+]);
+
+// Devuelve un array de objetos Post
+$posts = $provider->getModels();
+```
+
+En el ejemplo anterior, si `$query` se crea el siguiente código, el proveedor de datos
+devolverá _arrays_ en bruto.
+
+```php
+use yii\db\Query;
+
+$query = (new Query())->from('post')->where(['state' => 1]);
+```
+
+> Note: Si una consulta ya tiene la cláusula `orderBy`, las nuevas instrucciones de ordenación
+ dadas por los usuarios finales (mediante la configuración de `sort`) se añadirán a la cláusula
+ `orderBy` previa. Las cláusulas `limit` y `offset` que pueda haber se sobrescribirán por la
+ petición de paginación de los usuarios finales (mediante la configuración de `pagination`).
+
+Por omisión, [[yii\data\ActiveDataProvider]] usa el componente `db` de la aplicación como
+conexión con la base de datos. Se puede indicar una conexión con base de datos diferente
+configurando la propiedad [[yii\data\ActiveDataProvider::db]].
+
+
+## Proveedor de datos SQL
+
+[[yii\data\SqlDataProvider]] funciona con una sentencia SQL en bruto, que se usa para obtener
+los datos requeridos.
+Basándose en las especificaciones de [[yii\data\SqlDataProvider::sort|sort]] y
+[[yii\data\SqlDataProvider::pagination|pagination]], el proveedor ajustará las cláusulas
+`ORDER BY` y `LIMIT` de la sentencia SQL acordemente para obtener sólo la página de datos
+solicitados en el orden deseado.
+
+Para usar [[yii\data\SqlDataProvider]], hay que especificar las propiedades
+[[yii\data\SqlDataProvider::sql|sql]] y [yii\data\SqlDataProvider::totalCount|totalCount]].
+Por ejemplo:
+
+```php
+use yii\data\SqlDataProvider;
+
+$count = Yii::$app->db->createCommand('
+ SELECT COUNT(*) FROM post WHERE status=:status
+', [':status' => 1])->queryScalar();
+
+$provider = new SqlDataProvider([
+ 'sql' => 'SELECT * FROM post WHERE status=:status',
+ 'params' => [':status' => 1],
+ 'totalCount' => $count,
+ 'pagination' => [
+ 'pageSize' => 10,
+ ],
+ 'sort' => [
+ 'attributes' => [
+ 'title',
+ 'view_count',
+ 'created_at',
+ ],
+ ],
+]);
+
+// Devuelve un array de filas de datos
+$models = $provider->getModels();
+```
+
+> Info: La propiedad [[yii\data\SqlDataProvider::totalCount|totalCount]] se requiere sólo si se
+ necesita paginar los datos. Esto es porque el proveedor modificará la sentencia SQL
+ especificada vía [[yii\data\SqlDataProvider::sql|sql]] para que devuelva sólo la pagina de
+ datos solicitada. El proveedor sigue necesitando saber el número total de elementos de datos
+ para calcular correctamente el número de páginas.
+
+
+## Proveedor de datos de _arrays_
+
+Se recomienda usar [[yii\data\ArrayDataProvider]] cuando se trabaja con un _array_ grande.
+El proveedor permite devolver una página de los datos del _array_ ordenados por una o varias
+columnas. Para usar [[yii\data\ArrayDataProvider]], hay que especificar la propiedad
+[[yii\data\ArrayDataProvider::allModels|allModels]] como el _array_ grande. Los elementos
+del _array_ grande pueden ser _arrays_ asociativos (por ejemplo resultados de consultas de
+[DAO](db-dao.md) u objetos (por ejemplo instancias de [Active Record](db-active-record.md).
+Por ejemplo:
+
+```php
+use yii\data\ArrayDataProvider;
+
+$data = [
+ ['id' => 1, 'name' => 'name 1', ...],
+ ['id' => 2, 'name' => 'name 2', ...],
+ ...
+ ['id' => 100, 'name' => 'name 100', ...],
+];
+
+$provider = new ArrayDataProvider([
+ 'allModels' => $data,
+ 'pagination' => [
+ 'pageSize' => 10,
+ ],
+ 'sort' => [
+ 'attributes' => ['id', 'name'],
+ ],
+]);
+
+// Obtener las filas de la página solicitada
+$rows = $provider->getModels();
+```
+
+> Note: En comparación con [Active Data Provider](#active-data-provider) y
+ [SQL Data Provider](#sql-data-provider), Array Data Provider es menos eficiente porque
+ requiere cargar *todos* los datos en memoria.
+
+
+## Trabajar con las claves de los datos
+
+Al utilizar los elementos de datos devueltos por un proveedor de datos, con frecuencia
+necesita identificar cada elemento de datos con una clave única.
+Por ejemplo, si los elementos de datos representan información de los clientes, puede querer
+usar el ID de cliente como la clave de cada conjunto de datos de un cliente.
+Los proveedores de datos pueden devolver una lista de estas claves correspondientes a los
+elementos de datos devueltos por [[yii\data\DataProviderInterface::getModels()]].
+Por ejemplo:
+
+```php
+use yii\data\ActiveDataProvider;
+
+$query = Post::find()->where(['status' => 1]);
+
+$provider = new ActiveDataProvider([
+ 'query' => $query,
+]);
+
+// Devuelve un array de objetos Post
+$posts = $provider->getModels();
+
+// Devuelve los valores de las claves primarias correspondientes a $posts
+$ids = $provider->getKeys();
+```
+
+En el ejemplo superior, como se le proporciona a [[yii\data\ActiveDataProvider]] un objeto
+[[yii\db\ActiveQuery]], es lo suficientemente inteligente como para devolver los valores de
+las claves primarias como las claves. También puede indicar explícitamente cómo se deben
+calcular los valores de la clave configurando [[yii\data\ActiveDataProvider::key]] con un
+nombre de columna o un invocable que calcule los valores de la clave. Por ejemplo:
+
+```php
+// Utiliza la columna «slug» como valores de la clave
+$provider = new ActiveDataProvider([
+ 'query' => Post::find(),
+ 'key' => 'slug',
+]);
+
+// Utiliza el resultado de md5(id) como valores de la clave
+$provider = new ActiveDataProvider([
+ 'query' => Post::find(),
+ 'key' => function ($model) {
+ return md5($model->id);
+ }
+]);
+```
+
+
+## Creación de un proveedor de datos personalizado
+
+Para crear su propio proveedor de datos personalizado, debe implementar
+[[yii\data\DataProviderInterface]].
+Una manera más fácil es extender [[yii\data\BaseDataProvider]], que le permite centrarse
+en la lógica central del proveedor de datos. En particular, esencialmente necesita
+implementar los siguientes métodos:
+
+- [[yii\data\BaseDataProvider::prepareModels()|prepareModels()]]: prepara los modelos
+ de datos que estarán disponibles en la página actual y los devuelve como un _array_.
+- [[yii\data\BaseDataProvider::prepareKeys()|prepareKeys()]]: acepta un _array_ de
+ modelos de datos disponibles actualmente y devuelve las claves asociadas a ellos.
+- [[yii\data\BaseDataProvider::prepareTotalCount()|prepareTotalCount]]: devuelve un valor
+ que indica el número total de modelos de datos en el proveedor de datos.
+
+Debajo se muestra un ejemplo de un proveedor de datos que lee datos CSV eficientemente:
+
+```php
+fileObject = new SplFileObject($this->filename);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function prepareModels()
+ {
+ $models = [];
+ $pagination = $this->getPagination();
+
+ if ($pagination === false) {
+ // En caso de que no haya paginación, leer todas las líneas
+ while (!$this->fileObject->eof()) {
+ $models[] = $this->fileObject->fgetcsv();
+ $this->fileObject->next();
+ }
+ } else {
+ // En caso de que haya paginación, leer sólo una única página
+ $pagination->totalCount = $this->getTotalCount();
+ $this->fileObject->seek($pagination->getOffset());
+ $limit = $pagination->getLimit();
+
+ for ($count = 0; $count < $limit; ++$count) {
+ $models[] = $this->fileObject->fgetcsv();
+ $this->fileObject->next();
+ }
+ }
+
+ return $models;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function prepareKeys($models)
+ {
+ if ($this->key !== null) {
+ $keys = [];
+
+ foreach ($models as $model) {
+ if (is_string($this->key)) {
+ $keys[] = $model[$this->key];
+ } else {
+ $keys[] = call_user_func($this->key, $model);
+ }
+ }
+
+ return $keys;
+ }
+
+ return array_keys($models);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function prepareTotalCount()
+ {
+ $count = 0;
+
+ while (!$this->fileObject->eof()) {
+ $this->fileObject->next();
+ ++$count;
+ }
+
+ return $count;
+ }
+}
+```
+
+## Filtrar proveedores de datos usando filtros de datos
+
+Si bien puede construir condiciones para un proveedor de datos activo manualmente tal
+y como se describe en las secciones [Filtering Data](output-data-widgets.md#filtering-data)
+y [Separate Filter Form](output-data-widgets.md#separate-filter-form) de la guía de
+_widgets_ de datos, Yii tiene filtros de datos que son muy útiles si necesita
+condiciones de filtro flexibles. Los filtros de datos se pueden usar así:
+
+```php
+$filter = new ActiveDataFilter([
+ 'searchModel' => 'app\models\PostSearch'
+]);
+
+$filterCondition = null;
+
+// Puede cargar los filtros de datos de cualquier fuente.
+// Por ejemplo, si prefiere JSON en el cuerpo de la petición,
+// use Yii::$app->request->getBodyParams() aquí abajo:
+if ($filter->load(\Yii::$app->request->get())) {
+ $filterCondition = $filter->build();
+ if ($filterCondition === false) {
+ // Serializer recibiría errores
+ return $filter;
+ }
+}
+
+$query = Post::find();
+if ($filterCondition !== null) {
+ $query->andWhere($filterCondition);
+}
+
+return new ActiveDataProvider([
+ 'query' => $query,
+]);
+```
+
+El propósito del modelo `PostSearch` es definir por qué propiedades y valores se permite filtrar:
+
+```php
+use yii\base\Model;
+
+class PostSearch extends Model
+{
+ public $id;
+ public $title;
+
+ public function rules()
+ {
+ return [
+ ['id', 'integer'],
+ ['title', 'string', 'min' => 2, 'max' => 200],
+ ];
+ }
+}
+```
+
+Los filtros de datos son bastante flexibles. Puede personalizar cómo se construyen
+las condiciones y qué operadores se permiten.
+Para más detalles consulte la documentación de la API en [[\yii\data\DataFilter]].
diff --git a/docs/guide-es/output-data-widgets.md b/docs/guide-es/output-data-widgets.md
new file mode 100644
index 0000000000..06db9fe4b6
--- /dev/null
+++ b/docs/guide-es/output-data-widgets.md
@@ -0,0 +1,245 @@
+Widgets de datos
+================
+
+Yii proporciona un conjunto de [widgets](structure-widgets.md) que se pueden usar para mostrar datos.
+Mientras que el _widget_ [DetailView](#detail-view) se puede usar para mostrar los datos de un único
+registro, [ListView](#list-view) y [GridView](#grid-view) se pueden usar para mostrar una lista o
+tabla de registros de datos proporcionando funcionalidades como paginación, ordenación y filtro.
+
+
+DetailView
+----------
+
+El _widget_ [[yii\widgets\DetailView|DetailView]] muestra los detalles de un único
+[[yii\widgets\DetailView::$model|modelo]] de datos.
+
+Se recomienda su uso para mostrar un modelo en un formato estándar (por ejemplo, cada atributo del
+modelo se muestra como una fila en una tabla). El modelo puede ser tanto una instancia o subclase
+de [[\yii\base\Model]] como un [active record](db-active-record.md) o un _array_ asociativo.
+
+DetailView usa la propiedad [[yii\widgets\DetailView::$attributes|$attributes]] para determinar
+qué atributos del modelo se deben mostrar y cómo se deben formatear.
+En la [sección sobre formateadores](output-formatting.html) se pueden ver las opciones de formato
+disponibles.
+
+Un uso típico de DetailView sería así:
+
+```php
+echo DetailView::widget([
+ 'model' => $model,
+ 'attributes' => [
+ 'title', // atributo title (en texto plano)
+ 'description:html', // atributo description formateado como HTML
+ [ // nombre del propietario del modelo
+ 'label' => 'Owner',
+ 'value' => $model->owner->name,
+ 'contentOptions' => ['class' => 'bg-red'], // atributos HTML para personalizar el valor
+ 'captionOptions' => ['tooltip' => 'Tooltip'], // atributos HTML para personalizar la etiqueta
+ ],
+ 'created_at:datetime', // fecha de creación formateada como datetime
+ ],
+]);
+```
+
+Recuerde que a diferencia de [[yii\widgets\GridView|GridView]], que procesa un conjunto de modelos,
+[[yii\widgets\DetailView|DetailView]] sólo procesa uno. Así que la mayoría de las veces no hay
+necesidad de usar funciones anónimas ya que `$model` es el único modelo a mostrar y está disponible
+en la vista como una variable.
+
+Sin embargo, en algunos casos el uso de una función anónima puede ser útil. Por ejemplo cuando
+`visible` está especificado y se desea impedir el cálculo de `value` en case de que evalúe a `false`:
+
+```php
+echo DetailView::widget([
+ 'model' => $model,
+ 'attributes' => [
+ [
+ 'attribute' => 'owner',
+ 'value' => function ($model) {
+ return $model->owner->name;
+ },
+ 'visible' => \Yii::$app->user->can('posts.owner.view'),
+ ],
+ ],
+]);
+```
+
+
+ListView
+--------
+
+El _widget_ [[yii\widgets\ListView|ListView]] se usa para mostrar datos de un
+[proveedor de datos](output-data-providers.md).
+Cada modelo de datos se representa usando el [[yii\widgets\ListView::$itemView|fichero de vista]]
+indicado.
+Como proporciona de serie funcionalidades tales como paginación, ordenación y filtro,
+es útil tanto para mostrar información al usuario final como para crear una interfaz
+de usuario de gestión de datos.
+
+Un uso típico es el siguiente:
+
+```php
+use yii\widgets\ListView;
+use yii\data\ActiveDataProvider;
+
+$dataProvider = new ActiveDataProvider([
+ 'query' => Post::find(),
+ 'pagination' => [
+ 'pageSize' => 20,
+ ],
+]);
+
+echo ListView::widget([
+ 'dataProvider' => $dataProvider,
+ 'itemView' => '_post',
+]);
+```
+
+El fichero de vista `_post` podría contener lo siguiente:
+
+```php
+
+
+
= Html::encode($model->title) ?>
+
+ = HtmlPurifier::process($model->text) ?>
+
+```
+
+En el fichero de vista anterior, el modelo de datos actual está disponible como `$model`.
+Además están disponibles las siguientes variables:
+
+- `$key`: mixto, el valor de la clave asociada a este elemento de datos.
+- `$index`: entero, el índice empezando por cero del elemento de datos en el array de elementos devuelto por el proveedor de datos.
+- `$widget`: ListView, esta instancia del _widget_.
+
+Si se necesita pasar datos adicionales a cada vista, se puede usar la propiedad
+[[yii\widgets\ListView::$viewParams|$viewParams]] para pasar parejas clave-valor como las siguientes:
+
+```php
+echo ListView::widget([
+ 'dataProvider' => $dataProvider,
+ 'itemView' => '_post',
+ 'viewParams' => [
+ 'fullView' => true,
+ 'context' => 'main-page',
+ // ...
+ ],
+]);
+```
+
+Entonces éstas también estarán disponibles en la vista como variables.
+
+
+GridView
+--------
+
+La cuadrícula de datos o [[yii\grid\GridView|GridView]] es uno de los _widgets_ de Yii
+más potentes. Es extremadamente útil si necesita construir rápidamente la sección de
+administración del sistema. Recibe los datos de un [proveedor de datos](output-data-providers.md)
+y representa cada fila usando un conjunto de [[yii\grid\GridView::columns|columnas]]
+que presentan los datos en forma de tabla.
+
+Cada fila de la tabla representa los datos de un único elemento de datos, y una columna
+normalmente representa un atributo del elemento (algunas columnas pueden corresponder a
+expresiones complejas de los atributos o a un texto estático).
+
+El mínimo código necesario para usar GridView es como sigue:
+
+```php
+use yii\grid\GridView;
+use yii\data\ActiveDataProvider;
+
+$dataProvider = new ActiveDataProvider([
+ 'query' => Post::find(),
+ 'pagination' => [
+ 'pageSize' => 20,
+ ],
+]);
+echo GridView::widget([
+ 'dataProvider' => $dataProvider,
+]);
+```
+
+El código anterior primero crea un proveedor de datos y a continuación usa GridView
+para mostrar cada atributo en cada fila tomados del proveedor de datos. La tabla
+mostrada está equipada de serie con las funcionalidades de ordenación y paginación.
+
+
+### Columnas de la cuadrícula
+
+Las columnas de la tabla se configuran en términos de clase [[yii\grid\Column]], que
+se configuran en la propiedad [[yii\grid\GridView::columns|columns]] de la configuración
+del GridView.
+Dependiendo del tipo y ajustes de las columnas éstas pueden presentar los datos de
+diferentes maneras.
+La clase predefinida es [[yii\grid\DataColumn]], que representa un atributo del modelo
+por el que se puede ordenar y filtrar.
+
+
+```php
+echo GridView::widget([
+ 'dataProvider' => $dataProvider,
+ 'columns' => [
+ ['class' => 'yii\grid\SerialColumn'],
+ // Columnas sencillas definidas por los datos contenidos en $dataProvider.
+ // Se usarán los datos de la columna del modelo.
+ 'id',
+ 'username',
+ // Un ejemplo más complejo.
+ [
+ 'class' => 'yii\grid\DataColumn', // Se puede omitir, ya que es la predefinida.
+ 'value' => function ($data) {
+ return $data->name; // $data['name'] para datos de un array, por ejemplo al usar SqlDataProvider.
+ },
+ ],
+ ],
+]);
+```
+
+Observe que si no se especifica la parte [[yii\grid\GridView::columns|columns]] de la
+configuración, Yii intenta mostrar todas las columnas posibles del modelo del proveedor
+de datos.
+
+
+### Clases de columna
+
+Las columnas de la cuadrícula se pueden personalizar usando diferentes clases de columna:
+
+```php
+echo GridView::widget([
+ 'dataProvider' => $dataProvider,
+ 'columns' => [
+ [
+ 'class' => 'yii\grid\SerialColumn', // <-- aquí
+ // puede configurar propiedades adicionales aquí
+ ],
+```
+
+Además de las clases de columna proporcionadas por Yii que se revisarán más abajo,
+puede crear sus propias clases de columna.
+
+Cada clase de columna extiende [[yii\grid\Column]] de modo que hay algunas opciones
+comunes que puede establecer al configurar las columnas de una cuadrícula.
+
+- [[yii\grid\Column::header|header]] permite establecer el contenida para la fila cabecera
+- [[yii\grid\Column::footer|footer]] permite establece el contenido de la fila al pie
+- [[yii\grid\Column::visible|visible]] define si la columna debería ser visible.
+- [[yii\grid\Column::content|content]] le permite pasar una función PHP válida que devuelva datos para una fila. El formato es el siguiente:
+
+ ```php
+ function ($model, $key, $index, $column) {
+ return 'una cadena';
+ }
+ ```
+
+Puede indicar varias opciones HTML del contenedor pasando _arrays_ a:
+
+- [[yii\grid\Column::headerOptions|headerOptions]]
+- [[yii\grid\Column::footerOptions|footerOptions]]
+- [[yii\grid\Column::filterOptions|filterOptions]]
+- [[yii\grid\Column::contentOptions|contentOptions]]
+
diff --git a/docs/guide-es/rest-routing.md b/docs/guide-es/rest-routing.md
index 974d7956cb..dcb6bddfd3 100644
--- a/docs/guide-es/rest-routing.md
+++ b/docs/guide-es/rest-routing.md
@@ -40,16 +40,16 @@ Por ejemplo, el código anterior es equivalente a las siguientes reglas:
Y los siguientes puntos finales del API son mantenidos por esta regla:
* `GET /users`: lista de todos los usuarios página a página;
-* `HEAD /users`: muestra ĺa información resumén del usuario listado;
+* `HEAD /users`: muestra ĺa información resumen del usuario listado;
* `POST /users`: crea un nuevo usuario;
* `GET /users/123`: devuelve los detalles del usuario 123;
-* `HEAD /users/123`: muestra la información resúmen del usuario 123;
+* `HEAD /users/123`: muestra la información resumen del usuario 123;
* `PATCH /users/123` y `PUT /users/123`: actualizan al usuario 123;
* `DELETE /users/123`: borra el usuario 123;
* `OPTIONS /users`: muestra los verbos soportados de acuerdo al punto final `/users`;
* `OPTIONS /users/123`: muestra los verbos soportados de acuerdo al punto final `/users/123`.
-Puedes configurar las opciones `only` y `except` para explícitamente listar cuáles acciones a soportar o cuáles
+Puedes configurar las opciones `only` y `except` para explícitamente listar cuáles acciones soportar o cuáles
deshabilitar, respectivamente. Por ejemplo,
```php
@@ -60,8 +60,8 @@ deshabilitar, respectivamente. Por ejemplo,
],
```
-También puedes configurar las propiedades `patterns` o `extraPatterns` para redifinir patrones existentes o añadir nuevos soportados por esta regla.
-Por ejemplo, para soportar una nueva acción `search` por el punto final `GET /users/search`, configura la opción `extraPatterns` como sigue,
+También puedes configurar las propiedades `patterns` o `extraPatterns` para redefinir patrones existentes o añadir nuevos soportados por esta regla.
+Por ejemplo, para soportar una nueva acción `search` para el punto final `GET /users/search`, configura la opción `extraPatterns` como sigue,
```php
[
@@ -81,7 +81,7 @@ Puedes desactivar este comportamiento definiendo la propiedad [[yii\rest\UrlRule
reglas especiales de pluralización. Por ejemplo, la palabra `box` (caja) será pluralizada como `boxes` en vez de `boxs`.
En caso de que la pluralización automática no encaje en tus requerimientos, puedes además configurar la propiedad
-[[yii\rest\UrlRule::controller]] para especificar exlpícitamente cómo mapear un nombre utilizado en un punto final URL
+[[yii\rest\UrlRule::controller]] para especificar explícitamente cómo mapear un nombre utilizado en un punto final URL
a un ID de controlador. Por ejemplo, el siguiente código mapea el nombre `u` al ID del controlador `user`.
```php
diff --git a/docs/guide-es/start-installation.md b/docs/guide-es/start-installation.md
index 70a57e4f97..ad0aa47c80 100644
--- a/docs/guide-es/start-installation.md
+++ b/docs/guide-es/start-installation.md
@@ -18,7 +18,7 @@ en el entorno de un equipo de desarrollo.
utilizar el Template de Proyecto Básico por su simplicidad pero funcionalidad suficiente.
-Installing via Composer
+Instalando via Composer
-------------------------------
Si aún no tienes Composer instalado, puedes hacerlo siguiendo las instrucciones que se encuentran en
diff --git a/docs/guide-es/start-prerequisites.md b/docs/guide-es/start-prerequisites.md
new file mode 100644
index 0000000000..fdbccc18bc
--- /dev/null
+++ b/docs/guide-es/start-prerequisites.md
@@ -0,0 +1,29 @@
+# Qué necesita saber
+
+La curva de aprendizaje de Yii no es tan empinada como en otros _frameworks_ en PHP,
+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).
+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
+[espacios de nombres](https://secure.php.net/manual/es/language.namespaces.php).
+
+## 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
+[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
+POO deberá aprender para gestionar con éxito esa complejidad.
+
+## Línea de órdenes y composer
+
+Yii usa profusamente el gestor de paquetes _de facto_ de PHP, [Composer](https://getcomposer.org/),
+así que asegúrese de leer y comprender su [guía](https://getcomposer.org/doc/01-basic-usage.md).
+Si no está familiarizado con el uso de la línea de órdenes, es hora de empezar a probarla.
+Una vez que aprenda los fundamentos, nunca querrá trabajar sin ella.
diff --git a/docs/guide-es/structure-widgets.md b/docs/guide-es/structure-widgets.md
index f5a408730f..7a7327d3a2 100644
--- a/docs/guide-es/structure-widgets.md
+++ b/docs/guide-es/structure-widgets.md
@@ -1,10 +1,11 @@
Widgets
=======
-Los Widgets son bloques de código reutilizables utilizados en las [vistas](structure-views.md) para crear elementos de
-interfaz de usuario complejos y configurables de forma orientada a objetos. Por ejemplo, widget DatePicker puede
-generar un DatePicker de lujo que permita a los usuarios seleccionar una fecha. Todo lo que se tiene que hacer es
-insertar el siguiente código en una vista.
+Los _widgets_ son bloques de código reutilizables que se usan en las [vistas](structure-views.md)
+para crear elementos de interfaz de usuario complejos y configurables, de forma orientada a objetos.
+Por ejemplo, un _widget_ de selección de fecha puede generar un selector de fechas bonito que
+permita a los usuarios seleccionar una fecha. Todo lo que hay que hacer es insertar el siguiente
+código en una vista:
```php
'date']) ?>
```
-Hay un buen número de widgets incluidos en Yii, tales como [[yii\widgets\ActiveForm|active form]],
-[[yii\widgets\Menu|menu]], [Widgets de jQuery UI](widget-jui.md), [widgets de Twitter Bootstrap](widget-bootstrap.md).
-En adelante, introduciremos las nociones básicas acerca de los widgets. Por favor, refiérase a la documentación de la
-API de clases si quiere aprender más acerca de el uso de un widget en particular.
+Yii incluye un buen número de _widgets_, tales como
+[[yii\widgets\ActiveForm|formulario activo]],
+[[yii\widgets\Menu|menú]],
+[_widgets_ de jQuery UI](https://www.yiiframework.com/extension/yiisoft/yii2-jui), y
+[_widgets_ de Twitter Bootstrap](https://www.yiiframework.com/extension/yiisoft/yii2-bootstrap).
+A continuación presentaremos las nociones básicas de de los _widgets_. Por favor, refiérase a la
+documentación de la API de clases si quiere aprender más acerca del uso de un _widget_ en particular.
-## Uso de los Widgets
-Los Widgets son usados principalmente en las [vistas](structure-views.md). Se puede llamar al método
-[[yii\base\Widget::widget()]] para usar un widget en una vista. El método obtiene un array de
-[configuración](concept-configurations.md) para inicializar el widget y retorna la representación resultante del
-widget. Por ejemplo, el siguiente código inserta un widget DatePicker que esta configurado para usar el idioma Ruso y
-mantener la entrada en atributo 'form_date' del '$model'.
+## Uso de los _widgets_
+
+Los _widgets_ se usan principalmente en las [vistas](structure-views.md). Se puede llamar al método
+[[yii\base\Widget::widget()]] para usar un _widget_ en una vista. El método toma un _array_ de
+[configuración](concept-configurations.md) para inicializar el _widget_ y devuelve la representación
+resultante del _widget_. Por ejemplo, el siguiente código inserta un _widget_ de selección de fecha
+configurado para usar el idioma ruso y guardar la selección en el atributo `from_date` de `$model`.
```php
$model,
'attribute' => 'from_date',
'language' => 'ru',
- 'clientOptions' => [
- 'dateFormat' => 'yy-mm-dd',
- ],
+ 'dateFormat' => 'php:Y-m-d',
]) ?>
```
-Algunos widgets pueden coger un bloque de contenido que debería encontrarse entre la invocación de
-[[yii\base\Widget::begin()]] y [[yii\base\Widget::end()]]. Por ejemplo, el siguiente código usa el widget
-[[yii\widgets\ActiveForm]] para generar un formulario de inicio de sesión. El widget generará las etiquetas '