From 8736a82b56ee49e4867af9fb8b48f56361bf08a8 Mon Sep 17 00:00:00 2001 From: anees-abu-hamid Date: Thu, 11 Oct 2018 20:28:40 +0300 Subject: [PATCH 01/29] add guide ar file --- docs/guide-ar/README.md | 205 +++ docs/guide-ar/caching-data.md | 434 +++++ docs/guide-ar/caching-fragment.md | 179 ++ docs/guide-ar/caching-http.md | 143 ++ docs/guide-ar/caching-overview.md | 19 + docs/guide-ar/caching-page.md | 40 + docs/guide-ar/concept-aliases.md | 138 ++ docs/guide-ar/concept-autoloading.md | 94 ++ docs/guide-ar/concept-behaviors.md | 360 ++++ docs/guide-ar/concept-components.md | 97 ++ docs/guide-ar/concept-configurations.md | 292 ++++ docs/guide-ar/concept-di-container.md | 534 ++++++ docs/guide-ar/concept-events.md | 428 +++++ docs/guide-ar/concept-properties.md | 86 + docs/guide-ar/concept-service-locator.md | 131 ++ docs/guide-ar/db-active-record.md | 1762 ++++++++++++++++++++ docs/guide-ar/db-dao.md | 680 ++++++++ docs/guide-ar/db-migrations.md | 1054 ++++++++++++ docs/guide-ar/db-query-builder.md | 1013 +++++++++++ docs/guide-ar/glossary.md | 67 + docs/guide-ar/helper-array.md | 484 ++++++ docs/guide-ar/helper-html.md | 422 +++++ docs/guide-ar/helper-overview.md | 80 + docs/guide-ar/helper-url.md | 179 ++ docs/guide-ar/images/application-lifecycle.graphml | 527 ++++++ docs/guide-ar/images/application-lifecycle.png | Bin 0 -> 32044 bytes docs/guide-ar/images/application-structure.graphml | 430 +++++ docs/guide-ar/images/application-structure.png | Bin 0 -> 24774 bytes docs/guide-ar/images/rbac-access-check-1.graphml | 368 ++++ docs/guide-ar/images/rbac-access-check-1.png | Bin 0 -> 19024 bytes docs/guide-ar/images/rbac-access-check-2.graphml | 368 ++++ docs/guide-ar/images/rbac-access-check-2.png | Bin 0 -> 19364 bytes docs/guide-ar/images/rbac-access-check-3.graphml | 368 ++++ docs/guide-ar/images/rbac-access-check-3.png | Bin 0 -> 19336 bytes docs/guide-ar/images/rbac-hierarchy-1.graphml | 312 ++++ docs/guide-ar/images/rbac-hierarchy-1.png | Bin 0 -> 16085 bytes docs/guide-ar/images/rbac-hierarchy-2.graphml | 368 ++++ docs/guide-ar/images/rbac-hierarchy-2.png | Bin 0 -> 18786 bytes docs/guide-ar/images/request-lifecycle.graphml | 834 +++++++++ docs/guide-ar/images/request-lifecycle.png | Bin 0 -> 38617 bytes docs/guide-ar/images/start-app-installed.png | Bin 0 -> 79105 bytes docs/guide-ar/images/start-country-list.png | Bin 0 -> 50310 bytes docs/guide-ar/images/start-entry-confirmation.png | Bin 0 -> 39844 bytes docs/guide-ar/images/start-form-validation.png | Bin 0 -> 40121 bytes docs/guide-ar/images/start-gii-country-grid.png | Bin 0 -> 85543 bytes docs/guide-ar/images/start-gii-country-update.png | Bin 0 -> 54509 bytes docs/guide-ar/images/start-gii-crud-preview.png | Bin 0 -> 60647 bytes docs/guide-ar/images/start-gii-crud.png | Bin 0 -> 56045 bytes docs/guide-ar/images/start-gii-model-preview.png | Bin 0 -> 65510 bytes docs/guide-ar/images/start-gii-model.png | Bin 0 -> 51340 bytes docs/guide-ar/images/start-gii.png | Bin 0 -> 91274 bytes docs/guide-ar/images/start-hello-world.png | Bin 0 -> 32874 bytes docs/guide-ar/images/tutorial-console-help.png | Bin 0 -> 141692 bytes docs/guide-ar/input-file-upload.md | 208 +++ docs/guide-ar/input-form-javascript.md | 202 +++ docs/guide-ar/input-forms.md | 256 +++ docs/guide-ar/input-multiple-models.md | 86 + docs/guide-ar/input-tabular-input.md | 112 ++ docs/guide-ar/input-validation.md | 877 ++++++++++ docs/guide-ar/intro-upgrade-from-v1.md | 540 ++++++ docs/guide-ar/intro-yii.md | 60 + docs/guide-ar/output-client-scripts.md | 213 +++ docs/guide-ar/output-data-providers.md | 399 +++++ docs/guide-ar/output-data-widgets.md | 779 +++++++++ docs/guide-ar/output-formatting.md | 246 +++ docs/guide-ar/output-pagination.md | 71 + docs/guide-ar/output-sorting.md | 89 + docs/guide-ar/output-theming.md | 106 ++ docs/guide-ar/rest-authentication.md | 127 ++ docs/guide-ar/rest-controllers.md | 191 +++ docs/guide-ar/rest-error-handling.md | 94 ++ docs/guide-ar/rest-quick-start.md | 209 +++ docs/guide-ar/rest-rate-limiting.md | 66 + docs/guide-ar/rest-resources.md | 261 +++ docs/guide-ar/rest-response-formatting.md | 187 +++ docs/guide-ar/rest-routing.md | 110 ++ docs/guide-ar/rest-versioning.md | 111 ++ docs/guide-ar/runtime-bootstrapping.md | 46 + docs/guide-ar/runtime-handling-errors.md | 224 +++ docs/guide-ar/runtime-logging.md | 391 +++++ docs/guide-ar/runtime-overview.md | 24 + docs/guide-ar/runtime-requests.md | 202 +++ docs/guide-ar/runtime-responses.md | 260 +++ docs/guide-ar/runtime-routing.md | 692 ++++++++ docs/guide-ar/runtime-sessions-cookies.md | 371 +++++ docs/guide-ar/security-authentication.md | 215 +++ docs/guide-ar/security-authorization.md | 694 ++++++++ docs/guide-ar/security-best-practices.md | 346 ++++ docs/guide-ar/security-cryptography.md | 66 + docs/guide-ar/security-overview.md | 15 + docs/guide-ar/security-passwords.md | 31 + docs/guide-ar/start-databases.md | 266 +++ docs/guide-ar/start-forms.md | 246 +++ docs/guide-ar/start-gii.md | 139 ++ docs/guide-ar/start-hello.md | 143 ++ docs/guide-ar/start-installation.md | 290 ++++ docs/guide-ar/start-looking-ahead.md | 36 + docs/guide-ar/start-prerequisites.md | 23 + docs/guide-ar/start-workflow.md | 102 ++ docs/guide-ar/structure-application-components.md | 129 ++ docs/guide-ar/structure-applications.md | 612 +++++++ docs/guide-ar/structure-assets.md | 893 ++++++++++ docs/guide-ar/structure-controllers.md | 447 +++++ docs/guide-ar/structure-entry-scripts.md | 113 ++ docs/guide-ar/structure-extensions.md | 458 +++++ docs/guide-ar/structure-filters.md | 403 +++++ docs/guide-ar/structure-models.md | 533 ++++++ docs/guide-ar/structure-modules.md | 321 ++++ docs/guide-ar/structure-overview.md | 26 + docs/guide-ar/structure-views.md | 723 ++++++++ docs/guide-ar/structure-widgets.md | 207 +++ docs/guide-ar/test-acceptance.md | 17 + docs/guide-ar/test-environment-setup.md | 23 + docs/guide-ar/test-fixtures.md | 344 ++++ docs/guide-ar/test-functional.md | 22 + docs/guide-ar/test-overview.md | 71 + docs/guide-ar/test-unit.md | 24 + docs/guide-ar/tutorial-console.md | 318 ++++ docs/guide-ar/tutorial-core-validators.md | 696 ++++++++ docs/guide-ar/tutorial-docker.md | 103 ++ docs/guide-ar/tutorial-i18n.md | 769 +++++++++ docs/guide-ar/tutorial-mailing.md | 230 +++ docs/guide-ar/tutorial-performance-tuning.md | 225 +++ docs/guide-ar/tutorial-shared-hosting.md | 67 + docs/guide-ar/tutorial-start-from-scratch.md | 59 + docs/guide-ar/tutorial-template-engines.md | 49 + docs/guide-ar/tutorial-yii-as-micro-framework.md | 211 +++ docs/guide-ar/tutorial-yii-integration.md | 176 ++ 128 files changed, 31187 insertions(+) create mode 100644 docs/guide-ar/README.md create mode 100644 docs/guide-ar/caching-data.md create mode 100644 docs/guide-ar/caching-fragment.md create mode 100644 docs/guide-ar/caching-http.md create mode 100644 docs/guide-ar/caching-overview.md create mode 100644 docs/guide-ar/caching-page.md create mode 100644 docs/guide-ar/concept-aliases.md create mode 100644 docs/guide-ar/concept-autoloading.md create mode 100644 docs/guide-ar/concept-behaviors.md create mode 100644 docs/guide-ar/concept-components.md create mode 100644 docs/guide-ar/concept-configurations.md create mode 100644 docs/guide-ar/concept-di-container.md create mode 100644 docs/guide-ar/concept-events.md create mode 100644 docs/guide-ar/concept-properties.md create mode 100644 docs/guide-ar/concept-service-locator.md create mode 100644 docs/guide-ar/db-active-record.md create mode 100644 docs/guide-ar/db-dao.md create mode 100644 docs/guide-ar/db-migrations.md create mode 100644 docs/guide-ar/db-query-builder.md create mode 100644 docs/guide-ar/glossary.md create mode 100644 docs/guide-ar/helper-array.md create mode 100644 docs/guide-ar/helper-html.md create mode 100644 docs/guide-ar/helper-overview.md create mode 100644 docs/guide-ar/helper-url.md create mode 100644 docs/guide-ar/images/application-lifecycle.graphml create mode 100644 docs/guide-ar/images/application-lifecycle.png create mode 100644 docs/guide-ar/images/application-structure.graphml create mode 100644 docs/guide-ar/images/application-structure.png create mode 100644 docs/guide-ar/images/rbac-access-check-1.graphml create mode 100644 docs/guide-ar/images/rbac-access-check-1.png create mode 100644 docs/guide-ar/images/rbac-access-check-2.graphml create mode 100644 docs/guide-ar/images/rbac-access-check-2.png create mode 100644 docs/guide-ar/images/rbac-access-check-3.graphml create mode 100644 docs/guide-ar/images/rbac-access-check-3.png create mode 100644 docs/guide-ar/images/rbac-hierarchy-1.graphml create mode 100644 docs/guide-ar/images/rbac-hierarchy-1.png create mode 100644 docs/guide-ar/images/rbac-hierarchy-2.graphml create mode 100644 docs/guide-ar/images/rbac-hierarchy-2.png create mode 100644 docs/guide-ar/images/request-lifecycle.graphml create mode 100644 docs/guide-ar/images/request-lifecycle.png create mode 100644 docs/guide-ar/images/start-app-installed.png create mode 100644 docs/guide-ar/images/start-country-list.png create mode 100644 docs/guide-ar/images/start-entry-confirmation.png create mode 100644 docs/guide-ar/images/start-form-validation.png create mode 100644 docs/guide-ar/images/start-gii-country-grid.png create mode 100644 docs/guide-ar/images/start-gii-country-update.png create mode 100644 docs/guide-ar/images/start-gii-crud-preview.png create mode 100644 docs/guide-ar/images/start-gii-crud.png create mode 100644 docs/guide-ar/images/start-gii-model-preview.png create mode 100644 docs/guide-ar/images/start-gii-model.png create mode 100644 docs/guide-ar/images/start-gii.png create mode 100644 docs/guide-ar/images/start-hello-world.png create mode 100644 docs/guide-ar/images/tutorial-console-help.png create mode 100644 docs/guide-ar/input-file-upload.md create mode 100644 docs/guide-ar/input-form-javascript.md create mode 100644 docs/guide-ar/input-forms.md create mode 100644 docs/guide-ar/input-multiple-models.md create mode 100644 docs/guide-ar/input-tabular-input.md create mode 100644 docs/guide-ar/input-validation.md create mode 100644 docs/guide-ar/intro-upgrade-from-v1.md create mode 100644 docs/guide-ar/intro-yii.md create mode 100644 docs/guide-ar/output-client-scripts.md create mode 100644 docs/guide-ar/output-data-providers.md create mode 100644 docs/guide-ar/output-data-widgets.md create mode 100644 docs/guide-ar/output-formatting.md create mode 100644 docs/guide-ar/output-pagination.md create mode 100644 docs/guide-ar/output-sorting.md create mode 100644 docs/guide-ar/output-theming.md create mode 100644 docs/guide-ar/rest-authentication.md create mode 100644 docs/guide-ar/rest-controllers.md create mode 100644 docs/guide-ar/rest-error-handling.md create mode 100644 docs/guide-ar/rest-quick-start.md create mode 100644 docs/guide-ar/rest-rate-limiting.md create mode 100644 docs/guide-ar/rest-resources.md create mode 100644 docs/guide-ar/rest-response-formatting.md create mode 100644 docs/guide-ar/rest-routing.md create mode 100644 docs/guide-ar/rest-versioning.md create mode 100644 docs/guide-ar/runtime-bootstrapping.md create mode 100644 docs/guide-ar/runtime-handling-errors.md create mode 100644 docs/guide-ar/runtime-logging.md create mode 100644 docs/guide-ar/runtime-overview.md create mode 100644 docs/guide-ar/runtime-requests.md create mode 100644 docs/guide-ar/runtime-responses.md create mode 100644 docs/guide-ar/runtime-routing.md create mode 100644 docs/guide-ar/runtime-sessions-cookies.md create mode 100644 docs/guide-ar/security-authentication.md create mode 100644 docs/guide-ar/security-authorization.md create mode 100644 docs/guide-ar/security-best-practices.md create mode 100644 docs/guide-ar/security-cryptography.md create mode 100644 docs/guide-ar/security-overview.md create mode 100644 docs/guide-ar/security-passwords.md create mode 100644 docs/guide-ar/start-databases.md create mode 100644 docs/guide-ar/start-forms.md create mode 100644 docs/guide-ar/start-gii.md create mode 100644 docs/guide-ar/start-hello.md create mode 100644 docs/guide-ar/start-installation.md create mode 100644 docs/guide-ar/start-looking-ahead.md create mode 100644 docs/guide-ar/start-prerequisites.md create mode 100644 docs/guide-ar/start-workflow.md create mode 100644 docs/guide-ar/structure-application-components.md create mode 100644 docs/guide-ar/structure-applications.md create mode 100644 docs/guide-ar/structure-assets.md create mode 100644 docs/guide-ar/structure-controllers.md create mode 100644 docs/guide-ar/structure-entry-scripts.md create mode 100644 docs/guide-ar/structure-extensions.md create mode 100644 docs/guide-ar/structure-filters.md create mode 100644 docs/guide-ar/structure-models.md create mode 100644 docs/guide-ar/structure-modules.md create mode 100644 docs/guide-ar/structure-overview.md create mode 100644 docs/guide-ar/structure-views.md create mode 100644 docs/guide-ar/structure-widgets.md create mode 100644 docs/guide-ar/test-acceptance.md create mode 100644 docs/guide-ar/test-environment-setup.md create mode 100644 docs/guide-ar/test-fixtures.md create mode 100644 docs/guide-ar/test-functional.md create mode 100644 docs/guide-ar/test-overview.md create mode 100644 docs/guide-ar/test-unit.md create mode 100644 docs/guide-ar/tutorial-console.md create mode 100644 docs/guide-ar/tutorial-core-validators.md create mode 100644 docs/guide-ar/tutorial-docker.md create mode 100644 docs/guide-ar/tutorial-i18n.md create mode 100644 docs/guide-ar/tutorial-mailing.md create mode 100644 docs/guide-ar/tutorial-performance-tuning.md create mode 100644 docs/guide-ar/tutorial-shared-hosting.md create mode 100644 docs/guide-ar/tutorial-start-from-scratch.md create mode 100644 docs/guide-ar/tutorial-template-engines.md create mode 100644 docs/guide-ar/tutorial-yii-as-micro-framework.md create mode 100644 docs/guide-ar/tutorial-yii-integration.md diff --git a/docs/guide-ar/README.md b/docs/guide-ar/README.md new file mode 100644 index 0000000..a802d30 --- /dev/null +++ b/docs/guide-ar/README.md @@ -0,0 +1,205 @@ +The Definitive Guide to Yii 2.0 +=============================== + +This tutorial is released under the [Terms of Yii Documentation](http://www.yiiframework.com/doc/terms/). + +All Rights Reserved. + +2014 (c) Yii Software LLC. + + +Introduction +------------ + +* [About Yii](intro-yii.md) +* [Upgrading from Version 1.1](intro-upgrade-from-v1.md) + + +Getting Started +--------------- + +* [What do you need to know](start-prerequisites.md) +* [Installing Yii](start-installation.md) +* [Running Applications](start-workflow.md) +* [Saying Hello](start-hello.md) +* [Working with Forms](start-forms.md) +* [Working with Databases](start-databases.md) +* [Generating Code with Gii](start-gii.md) +* [Looking Ahead](start-looking-ahead.md) + + +Application Structure +--------------------- + +* [Application Structure Overview](structure-overview.md) +* [Entry Scripts](structure-entry-scripts.md) +* [Applications](structure-applications.md) +* [Application Components](structure-application-components.md) +* [Controllers](structure-controllers.md) +* [Models](structure-models.md) +* [Views](structure-views.md) +* [Modules](structure-modules.md) +* [Filters](structure-filters.md) +* [Widgets](structure-widgets.md) +* [Assets](structure-assets.md) +* [Extensions](structure-extensions.md) + + +Handling Requests +----------------- + +* [Request Handling Overview](runtime-overview.md) +* [Bootstrapping](runtime-bootstrapping.md) +* [Routing and URL Creation](runtime-routing.md) +* [Requests](runtime-requests.md) +* [Responses](runtime-responses.md) +* [Sessions and Cookies](runtime-sessions-cookies.md) +* [Handling Errors](runtime-handling-errors.md) +* [Logging](runtime-logging.md) + + +Key Concepts +------------ + +* [Components](concept-components.md) +* [Properties](concept-properties.md) +* [Events](concept-events.md) +* [Behaviors](concept-behaviors.md) +* [Configurations](concept-configurations.md) +* [Aliases](concept-aliases.md) +* [Class Autoloading](concept-autoloading.md) +* [Service Locator](concept-service-locator.md) +* [Dependency Injection Container](concept-di-container.md) + + +Working with Databases +---------------------- + +* [Database Access Objects](db-dao.md): Connecting to a database, basic queries, transactions, and schema manipulation +* [Query Builder](db-query-builder.md): Querying the database using a simple abstraction layer +* [Active Record](db-active-record.md): The Active Record ORM, retrieving and manipulating records, and defining relations +* [Migrations](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) + + +Getting Data from Users +----------------------- + +* [Creating Forms](input-forms.md) +* [Validating Input](input-validation.md) +* [Uploading Files](input-file-upload.md) +* [Collecting Tabular Input](input-tabular-input.md) +* [Getting Data for Multiple Models](input-multiple-models.md) +* [Extending ActiveForm on the Client Side](input-form-javascript.md) + + +Displaying Data +--------------- + +* [Data Formatting](output-formatting.md) +* [Pagination](output-pagination.md) +* [Sorting](output-sorting.md) +* [Data Providers](output-data-providers.md) +* [Data Widgets](output-data-widgets.md) +* [Working with Client Scripts](output-client-scripts.md) +* [Theming](output-theming.md) + + +Security +-------- + +* [Security Overview](security-overview.md) +* [Authentication](security-authentication.md) +* [Authorization](security-authorization.md) +* [Working with Passwords](security-passwords.md) +* [Cryptography](security-cryptography.md) +* [Auth Clients](https://www.yiiframework.com/extension/yiisoft/yii2-authclient/doc/guide) +* [Best Practices](security-best-practices.md) + + +Caching +------- + +* [Caching Overview](caching-overview.md) +* [Data Caching](caching-data.md) +* [Fragment Caching](caching-fragment.md) +* [Page Caching](caching-page.md) +* [HTTP Caching](caching-http.md) + + +RESTful Web Services +-------------------- + +* [Quick Start](rest-quick-start.md) +* [Resources](rest-resources.md) +* [Controllers](rest-controllers.md) +* [Routing](rest-routing.md) +* [Response Formatting](rest-response-formatting.md) +* [Authentication](rest-authentication.md) +* [Rate Limiting](rest-rate-limiting.md) +* [Versioning](rest-versioning.md) +* [Error Handling](rest-error-handling.md) + + +Development Tools +----------------- + +* [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 +------- + +* [Testing Overview](test-overview.md) +* [Testing environment setup](test-environment-setup.md) +* [Unit Tests](test-unit.md) +* [Functional Tests](test-functional.md) +* [Acceptance Tests](test-acceptance.md) +* [Fixtures](test-fixtures.md) + + +Special Topics +-------------- + +* [Advanced Project Template](https://www.yiiframework.com/extension/yiisoft/yii2-app-advanced/doc/guide) +* [Building Application from Scratch](tutorial-start-from-scratch.md) +* [Console Commands](tutorial-console.md) +* [Core Validators](tutorial-core-validators.md) +* [Docker](tutorial-docker.md) +* [Internationalization](tutorial-i18n.md) +* [Mailing](tutorial-mailing.md) +* [Performance Tuning](tutorial-performance-tuning.md) +* [Shared Hosting Environment](tutorial-shared-hosting.md) +* [Template Engines](tutorial-template-engines.md) +* [Working with Third-Party Code](tutorial-yii-integration.md) +* [Using Yii as a micro framework](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](helper-overview.md) +* [ArrayHelper](helper-array.md) +* [Html](helper-html.md) +* [Url](helper-url.md) + diff --git a/docs/guide-ar/caching-data.md b/docs/guide-ar/caching-data.md new file mode 100644 index 0000000..8d7663a --- /dev/null +++ b/docs/guide-ar/caching-data.md @@ -0,0 +1,434 @@ +Data Caching +============ + +Data caching is about storing some PHP variables in cache and retrieving it later from cache. +It is also the foundation for more advanced caching features, such as [query caching](#query-caching) +and [page caching](caching-page.md). + +The following code is a typical usage pattern of data caching, where `$cache` refers to +a [cache component](#cache-components): + +```php +// try retrieving $data from cache +$data = $cache->get($key); + +if ($data === false) { + // $data is not found in cache, calculate it from scratch + $data = $this->calculateSomething(); + + // store $data in cache so that it can be retrieved next time + $cache->set($key, $data); +} + +// $data is available here +``` + +Since version 2.0.11, [cache component](#cache-components) provides [[yii\caching\Cache::getOrSet()|getOrSet()]] method +that simplifies code for data getting, calculating and storing. The following code does exactly the same as the +previous example: + +```php +$data = $cache->getOrSet($key, function () { + return $this->calculateSomething(); +}); +``` + +When cache has data associated with the `$key`, the cached value will be returned. +Otherwise, the passed anonymous function will be executed to calculate the value that will be cached and returned. + +If the anonymous function requires some data from the outer scope, you can pass it with the `use` statement. +For example: + +```php +$user_id = 42; +$data = $cache->getOrSet($key, function () use ($user_id) { + return $this->calculateSomething($user_id); +}); +``` + +> Note: [[yii\caching\Cache::getOrSet()|getOrSet()]] method supports duration and dependencies as well. + See [Cache Expiration](#cache-expiration) and [Cache Dependencies](#cache-dependencies) to know more. + + +## Cache Components + +Data caching relies on the so-called *cache components* which represent various cache storage, +such as memory, files, databases. + +Cache components are usually registered as [application components](structure-application-components.md) so +that they can be globally configurable +and accessible. The following code shows how to configure the `cache` application component to use +[memcached](http://memcached.org/) with two cache servers: + +```php +'components' => [ + 'cache' => [ + 'class' => 'yii\caching\MemCache', + 'servers' => [ + [ + 'host' => 'server1', + 'port' => 11211, + 'weight' => 100, + ], + [ + 'host' => 'server2', + 'port' => 11211, + 'weight' => 50, + ], + ], + ], +], +``` + +You can then access the above cache component using the expression `Yii::$app->cache`. + +Because all cache components support the same set of APIs, you can swap the underlying cache component +with a different one by reconfiguring it in the application configuration without modifying the code that uses the cache. +For example, you can modify the above configuration to use [[yii\caching\ApcCache|APC cache]]: + + +```php +'components' => [ + 'cache' => [ + 'class' => 'yii\caching\ApcCache', + ], +], +``` + +> Tip: You can register multiple cache application components. The component named `cache` is used + by default by many cache-dependent classes (e.g. [[yii\web\UrlManager]]). + + +### Supported Cache Storage + +Yii supports a wide range of cache storage. The following is a summary: + +* [[yii\caching\ApcCache]]: uses PHP [APC](http://php.net/manual/en/book.apc.php) extension. This option can be + considered as the fastest one when dealing with cache for a centralized thick application (e.g. one + server, no dedicated load balancers, etc.). +* [[yii\caching\DbCache]]: uses a database table to store cached data. To use this cache, you must + create a table as specified in [[yii\caching\DbCache::cacheTable]]. +* [[yii\caching\ArrayCache]]: provides caching for the current request only by storing the values in an array. + For enhanced performance of ArrayCache, you can disable serialization of the stored data by setting + [[yii\caching\ArrayCache::$serializer]] to `false`. +* [[yii\caching\DummyCache]]: serves as a cache placeholder which does no real caching. + The purpose of this component is to simplify the code that needs to check the availability of cache. + For example, during development or if the server doesn't have actual cache support, you may configure + a cache component to use this cache. When an actual cache support is enabled, you can switch to use + the corresponding cache component. In both cases, you may use the same code + `Yii::$app->cache->get($key)` to attempt retrieving data from the cache without worrying that + `Yii::$app->cache` might be `null`. +* [[yii\caching\FileCache]]: uses standard files to store cached data. This is particularly suitable + to cache large chunk of data, such as page content. +* [[yii\caching\MemCache]]: uses PHP [memcache](http://php.net/manual/en/book.memcache.php) + and [memcached](http://php.net/manual/en/book.memcached.php) extensions. This option can be considered as + the fastest one when dealing with cache in a distributed applications (e.g. with several servers, load + balancers, etc.) +* [[yii\redis\Cache]]: implements a cache component based on [Redis](http://redis.io/) key-value store + (redis version 2.6.12 or higher is required). +* [[yii\caching\WinCache]]: uses PHP [WinCache](http://iis.net/downloads/microsoft/wincache-extension) + ([see also](http://php.net/manual/en/book.wincache.php)) extension. +* [[yii\caching\XCache]] _(deprecated)_: uses PHP [XCache](http://xcache.lighttpd.net/) extension. +* [[yii\caching\ZendDataCache]] _(deprecated)_: uses + [Zend Data Cache](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm) + as the underlying caching medium. + + +> Tip: You may use different cache storage in the same application. A common strategy is to use memory-based + cache storage to store data that is small but constantly used (e.g. statistical data), and use file-based + or database-based cache storage to store data that is big and less frequently used (e.g. page content). + + +## Cache APIs + +All cache components have the same base class [[yii\caching\Cache]] and thus support the following APIs: + +* [[yii\caching\Cache::get()|get()]]: retrieves a data item from cache with a specified key. A `false` + value will be returned if the data item is not found in the cache or is expired/invalidated. +* [[yii\caching\Cache::set()|set()]]: stores a data item identified by a key in cache. +* [[yii\caching\Cache::add()|add()]]: stores a data item identified by a key in cache if the key is not found in the cache. +* [[yii\caching\Cache::getOrSet()|getOrSet()]]: retrieves a data item from cache with a specified key or executes passed + callback, stores return of the callback in a cache by a key and returns that data. +* [[yii\caching\Cache::multiGet()|multiGet()]]: retrieves multiple data items from cache with the specified keys. +* [[yii\caching\Cache::multiSet()|multiSet()]]: stores multiple data items in cache. Each item is identified by a key. +* [[yii\caching\Cache::multiAdd()|multiAdd()]]: stores multiple data items in cache. Each item is identified by a key. + If a key already exists in the cache, the data item will be skipped. +* [[yii\caching\Cache::exists()|exists()]]: returns a value indicating whether the specified key is found in the cache. +* [[yii\caching\Cache::delete()|delete()]]: removes a data item identified by a key from the cache. +* [[yii\caching\Cache::flush()|flush()]]: removes all data items from the cache. + +> Note: Do not cache a `false` boolean value directly because the [[yii\caching\Cache::get()|get()]] method uses +`false` return value to indicate the data item is not found in the cache. You may put `false` in an array and cache +this array instead to avoid this problem. + +Some cache storage, such as MemCache, APC, support retrieving multiple cached values in a batch mode, +which may reduce the overhead involved in retrieving cached data. The APIs [[yii\caching\Cache::multiGet()|multiGet()]] +and [[yii\caching\Cache::multiAdd()|multiAdd()]] are provided to exploit this feature. In case the underlying cache storage +does not support this feature, it will be simulated. + +Because [[yii\caching\Cache]] implements `ArrayAccess`, a cache component can be used like an array. The following +are some examples: + +```php +$cache['var1'] = $value1; // equivalent to: $cache->set('var1', $value1); +$value2 = $cache['var2']; // equivalent to: $value2 = $cache->get('var2'); +``` + + +### Cache Keys + +Each data item stored in cache is uniquely identified by a key. When you store a data item in cache, +you have to specify a key for it. Later when you retrieve the data item from cache, you should provide +the corresponding key. + +You may use a string or an arbitrary value as a cache key. When a key is not a string, it will be automatically +serialized into a string. + +A common strategy of defining a cache key is to include all determining factors in terms of an array. +For example, [[yii\db\Schema]] uses the following key to cache schema information about a database table: + +```php +[ + __CLASS__, // schema class name + $this->db->dsn, // DB connection data source name + $this->db->username, // DB connection login user + $name, // table name +]; +``` + +As you can see, the key includes all necessary information needed to uniquely specify a database table. + +> Note: Values stored in cache via [[yii\caching\Cache::multiSet()|multiSet()]] or [[yii\caching\Cache::multiAdd()|multiAdd()]] can +have only string or integer keys. If you need to set more complex key store the value separately via +[[yii\caching\Cache::set()|set()]] or [[yii\caching\Cache::add()|add()]]. + +When the same cache storage is used by different applications, you should specify a unique cache key prefix +for each application to avoid conflicts of cache keys. This can be done by configuring the [[yii\caching\Cache::keyPrefix]] +property. For example, in the application configuration you can write the following code: + +```php +'components' => [ + 'cache' => [ + 'class' => 'yii\caching\ApcCache', + 'keyPrefix' => 'myapp', // a unique cache key prefix + ], +], +``` + +To ensure interoperability, only alphanumeric characters should be used. + + +### Cache Expiration + +A data item stored in a cache will remain there forever unless it is removed because of some caching policy +enforcement (e.g. caching space is full and the oldest data are removed). To change this behavior, you can provide +an expiration parameter when calling [[yii\caching\Cache::set()|set()]] to store a data item. The parameter +indicates for how many seconds the data item can remain valid in the cache. When you call +[[yii\caching\Cache::get()|get()]] to retrieve the data item, if it has passed the expiration time, the method +will return `false`, indicating the data item is not found in the cache. For example, + +```php +// keep the data in cache for at most 45 seconds +$cache->set($key, $data, 45); + +sleep(50); + +$data = $cache->get($key); +if ($data === false) { + // $data is expired or is not found in the cache +} +``` + +Since 2.0.11 you may set [[yii\caching\Cache::$defaultDuration|defaultDuration]] value in your cache component configuration if you prefer a custom cache duration +over the default unlimited duration. +This will allow you not to pass custom `duration` parameter to [[yii\caching\Cache::set()|set()]] each time. + + +### Cache Dependencies + +Besides expiration setting, cached data item may also be invalidated by changes of the so-called *cache dependencies*. +For example, [[yii\caching\FileDependency]] represents the dependency of a file's modification time. +When this dependency changes, it means the corresponding file is modified. As a result, any outdated +file content found in the cache should be invalidated and the [[yii\caching\Cache::get()|get()]] call +should return `false`. + +Cache dependencies are represented as objects of [[yii\caching\Dependency]] descendant classes. When you call +[[yii\caching\Cache::set()|set()]] to store a data item in the cache, you can pass along an associated cache +dependency object. For example, + +```php +// Create a dependency on the modification time of file example.txt. +$dependency = new \yii\caching\FileDependency(['fileName' => 'example.txt']); + +// The data will expire in 30 seconds. +// It may also be invalidated earlier if example.txt is modified. +$cache->set($key, $data, 30, $dependency); + +// The cache will check if the data has expired. +// It will also check if the associated dependency was changed. +// It will return false if any of these conditions are met. +$data = $cache->get($key); +``` + +Below is a summary of the available cache dependencies: + +- [[yii\caching\ChainedDependency]]: the dependency is changed if any of the dependencies on the chain is changed. +- [[yii\caching\DbDependency]]: the dependency is changed if the query result of the specified SQL statement is changed. +- [[yii\caching\ExpressionDependency]]: the dependency is changed if the result of the specified PHP expression is changed. +- [[yii\caching\FileDependency]]: the dependency is changed if the file's last modification time is changed. +- [[yii\caching\TagDependency]]: associates a cached data item with one or multiple tags. You may invalidate + the cached data items with the specified tag(s) by calling [[yii\caching\TagDependency::invalidate()]]. + +> Note: Avoid using [[yii\caching\Cache::exists()|exists()]] method along with dependencies. It does not check whether + the dependency associated with the cached data, if there is any, has changed. So a call to + [[yii\caching\Cache::get()|get()]] may return `false` while [[yii\caching\Cache::exists()|exists()]] returns `true`. + + +## Query Caching + +Query caching is a special caching feature built on top of data caching. It is provided to cache the result +of database queries. + +Query caching requires a [[yii\db\Connection|DB connection]] and a valid `cache` [application component](#cache-components). +The basic usage of query caching is as follows, assuming `$db` is a [[yii\db\Connection]] instance: + +```php +$result = $db->cache(function ($db) { + + // the result of the SQL query will be served from the cache + // if query caching is enabled and the query result is found in the cache + return $db->createCommand('SELECT * FROM customer WHERE id=1')->queryOne(); + +}); +``` + +Query caching can be used for [DAO](db-dao.md) as well as [ActiveRecord](db-active-record.md): + +```php +$result = Customer::getDb()->cache(function ($db) { + return Customer::find()->where(['id' => 1])->one(); +}); +``` + +> Info: Some DBMS (e.g. [MySQL](http://dev.mysql.com/doc/refman/5.1/en/query-cache.html)) + also support query caching on the DB server-side. You may choose to use either query caching mechanism. + The query caching described above has the advantage that you may specify flexible cache dependencies + and are potentially more efficient. + +Since 2.0.14 you can use the following shortcuts: + +```php +(new Query())->cache(7200)->all(); +// and +User::find()->cache(7200)->all(); +``` + + +### Configurations + +Query caching has three global configurable options through [[yii\db\Connection]]: + +* [[yii\db\Connection::enableQueryCache|enableQueryCache]]: whether to turn on or off query caching. + It defaults to `true`. Note that to effectively turn on query caching, you also need to have a valid + cache, as specified by [[yii\db\Connection::queryCache|queryCache]]. +* [[yii\db\Connection::queryCacheDuration|queryCacheDuration]]: this represents the number of seconds + that a query result can remain valid in the cache. You can use 0 to indicate a query result should + remain in the cache forever. This property is the default value used when [[yii\db\Connection::cache()]] + is called without specifying a duration. +* [[yii\db\Connection::queryCache|queryCache]]: this represents the ID of the cache application component. + It defaults to `'cache'`. Query caching is enabled only if there is a valid cache application component. + + +### Usages + +You can use [[yii\db\Connection::cache()]] if you have multiple SQL queries that need to take advantage of +query caching. The usage is as follows, + +```php +$duration = 60; // cache query results for 60 seconds. +$dependency = ...; // optional dependency + +$result = $db->cache(function ($db) { + + // ... perform SQL queries here ... + + return $result; + +}, $duration, $dependency); +``` + +Any SQL queries in the anonymous function will be cached for the specified duration with the specified dependency. +If the result of a query is found valid in the cache, the query will be skipped and the result will be served +from the cache instead. If you do not specify the `$duration` parameter, the value of +[[yii\db\Connection::queryCacheDuration|queryCacheDuration]] will be used instead. + +Sometimes within `cache()`, you may want to disable query caching for some particular queries. You can use +[[yii\db\Connection::noCache()]] in this case. + +```php +$result = $db->cache(function ($db) { + + // SQL queries that use query caching + + $db->noCache(function ($db) { + + // SQL queries that do not use query caching + + }); + + // ... + + return $result; +}); +``` + +If you just want to use query caching for a single query, you can call [[yii\db\Command::cache()]] when building +the command. For example, + +```php +// use query caching and set query cache duration to be 60 seconds +$customer = $db->createCommand('SELECT * FROM customer WHERE id=1')->cache(60)->queryOne(); +``` + +You can also use [[yii\db\Command::noCache()]] to disable query caching for a single command. For example, + +```php +$result = $db->cache(function ($db) { + + // SQL queries that use query caching + + // do not use query caching for this command + $customer = $db->createCommand('SELECT * FROM customer WHERE id=1')->noCache()->queryOne(); + + // ... + + return $result; +}); +``` + + +### Limitations + +Query caching does not work with query results that contain resource handlers. For example, +when using the `BLOB` column type in some DBMS, the query result will return a resource +handler for the column data. + +Some caching storage has size limitation. For example, memcache limits the maximum size +of each entry to be 1MB. Therefore, if the size of a query result exceeds this limit, +the caching will fail. + + +## Cache Flushing + +When you need to invalidate all the stored cache data, you can call [[yii\caching\Cache::flush()]]. + +You can flush the cache from the console by calling `yii cache/flush` as well. + - `yii cache`: lists the available caches in application + - `yii cache/flush cache1 cache2`: flushes the cache components `cache1`, `cache2` (you can pass multiple component + names separated with space) + - `yii cache/flush-all`: flushes all cache components in the application + - `yii cache/flush-schema db`: clears DB schema cache for a given connection component + +> Info: Console application uses a separate configuration file by default. Ensure, that you have the same caching +components in your web and console application configs to reach the proper effect. + diff --git a/docs/guide-ar/caching-fragment.md b/docs/guide-ar/caching-fragment.md new file mode 100644 index 0000000..5a5e9a1 --- /dev/null +++ b/docs/guide-ar/caching-fragment.md @@ -0,0 +1,179 @@ +Fragment Caching +================ + +Fragment caching refers to caching a fragment of a Web page. For example, if a page displays a summary of +yearly sale in a table, you can store this table in cache to eliminate the time needed to generate this table +for each request. Fragment caching is built on top of [data caching](caching-data.md). + +To use fragment caching, use the following construct in a [view](structure-views.md): + +```php +if ($this->beginCache($id)) { + + // ... generate content here ... + + $this->endCache(); +} +``` + +That is, enclose content generation logic in a pair of [[yii\base\View::beginCache()|beginCache()]] and +[[yii\base\View::endCache()|endCache()]] calls. If the content is found in the cache, [[yii\base\View::beginCache()|beginCache()]] +will render the cached content and return `false`, thus skip the content generation logic. +Otherwise, your content generation logic will be called, and when [[yii\base\View::endCache()|endCache()]] +is called, the generated content will be captured and stored in the cache. + +Like [data caching](caching-data.md), a unique `$id` is needed to identify a content cache. + + +## Caching Options + +You may specify additional options about fragment caching by passing the option array as the second +parameter to the [[yii\base\View::beginCache()|beginCache()]] method. Behind the scene, this option array +will be used to configure a [[yii\widgets\FragmentCache]] widget which implements the actual fragment caching +functionality. + +### Duration + +Perhaps the most commonly used option of fragment caching is [[yii\widgets\FragmentCache::duration|duration]]. +It specifies for how many seconds the content can remain valid in a cache. The following code +caches the content fragment for at most one hour: + +```php +if ($this->beginCache($id, ['duration' => 3600])) { + + // ... generate content here ... + + $this->endCache(); +} +``` + +If the option is not set, it will take the default value 60, which means the cached content will expire in 60 seconds. + + +### Dependencies + +Like [data caching](caching-data.md#cache-dependencies), content fragment being cached can also have dependencies. +For example, the content of a post being displayed depends on whether or not the post is modified. + +To specify a dependency, set the [[yii\widgets\FragmentCache::dependency|dependency]] option, which can be +either an [[yii\caching\Dependency]] object or a configuration array for creating a dependency object. The +following code specifies that the fragment content depends on the change of the `updated_at` column value: + +```php +$dependency = [ + 'class' => 'yii\caching\DbDependency', + 'sql' => 'SELECT MAX(updated_at) FROM post', +]; + +if ($this->beginCache($id, ['dependency' => $dependency])) { + + // ... generate content here ... + + $this->endCache(); +} +``` + + +### Variations + +Content being cached may be variated according to some parameters. For example, for a Web application +supporting multiple languages, the same piece of view code may generate the content in different languages. +Therefore, you may want to make the cached content variated according to the current application language. + +To specify cache variations, set the [[yii\widgets\FragmentCache::variations|variations]] option, which +should be an array of scalar values, each representing a particular variation factor. For example, +to make the cached content variated by the language, you may use the following code: + +```php +if ($this->beginCache($id, ['variations' => [Yii::$app->language]])) { + + // ... generate content here ... + + $this->endCache(); +} +``` + + +### Toggling Caching + +Sometimes you may want to enable fragment caching only when certain conditions are met. For example, for a page +displaying a form, you only want to cache the form when it is initially requested (via GET request). Any +subsequent display (via POST request) of the form should not be cached because the form may contain user input. +To do so, you may set the [[yii\widgets\FragmentCache::enabled|enabled]] option, like the following: + +```php +if ($this->beginCache($id, ['enabled' => Yii::$app->request->isGet])) { + + // ... generate content here ... + + $this->endCache(); +} +``` + + +## Nested Caching + +Fragment caching can be nested. That is, a cached fragment can be enclosed within another fragment which is also cached. +For example, the comments are cached in an inner fragment cache, and they are cached together with the +post content in an outer fragment cache. The following code shows how two fragment caches can be nested: + +```php +if ($this->beginCache($id1)) { + + // ...content generation logic... + + if ($this->beginCache($id2, $options2)) { + + // ...content generation logic... + + $this->endCache(); + } + + // ...content generation logic... + + $this->endCache(); +} +``` + +Different caching options can be set for the nested caches. For example, the inner caches and the outer caches +can use different cache duration values. Even when the data cached in the outer cache is invalidated, the inner +cache may still provide the valid inner fragment. However, it is not true vice versa. If the outer cache is +evaluated to be valid, it will continue to provide the same cached copy even after the content in the +inner cache has been invalidated. Therefore, you must be careful in setting the durations or the dependencies +of the nested caches, otherwise the outdated inner fragments may be kept in the outer fragment. + + +## Dynamic Content + +When using fragment caching, you may encounter the situation where a large fragment of content is relatively +static except at one or a few places. For example, a page header may display the main menu bar together with +the name of the current user. Another problem is that the content being cached may contain PHP code that +must be executed for every request (e.g. the code for registering an asset bundle). Both problems can be solved +by the so-called *dynamic content* feature. + +A dynamic content means a fragment of output that should not be cached even if it is enclosed within +a fragment cache. To make the content dynamic all the time, it has to be generated by executing some PHP code +for every request, even if the enclosing content is being served from cache. + +You may call [[yii\base\View::renderDynamic()]] within a cached fragment to insert dynamic content +at the desired place, like the following, + +```php +if ($this->beginCache($id1)) { + + // ...content generation logic... + + echo $this->renderDynamic('return Yii::$app->user->identity->name;'); + + // ...content generation logic... + + $this->endCache(); +} +``` + +The [[yii\base\View::renderDynamic()|renderDynamic()]] method takes a piece of PHP code as its parameter. +The return value of the PHP code is treated as the dynamic content. The same PHP code will be executed +for every request, no matter the enclosing fragment is being served from cached or not. + +> Note: since version 2.0.14 a dynamic content API is exposed via the [[yii\base\DynamicContentAwareInterface]] interface and its [[yii\base\DynamicContentAwareTrait]] trait. + As an example, you may refer to the [[yii\widgets\FragmentCache]] class. diff --git a/docs/guide-ar/caching-http.md b/docs/guide-ar/caching-http.md new file mode 100644 index 0000000..41137e6 --- /dev/null +++ b/docs/guide-ar/caching-http.md @@ -0,0 +1,143 @@ +HTTP Caching +============ + +Besides server-side caching that we have described in the previous sections, Web applications may +also exploit client-side caching to save the time for generating and transmitting the same page content. + +To use client-side caching, you may configure [[yii\filters\HttpCache]] as a filter for controller +actions whose rendering result may be cached on the client-side. [[yii\filters\HttpCache|HttpCache]] +only works for `GET` and `HEAD` requests. It can handle three kinds of cache-related HTTP headers for these requests: + +* [[yii\filters\HttpCache::lastModified|Last-Modified]] +* [[yii\filters\HttpCache::etagSeed|Etag]] +* [[yii\filters\HttpCache::cacheControlHeader|Cache-Control]] + + +## `Last-Modified` Header + +The `Last-Modified` header uses a timestamp to indicate if the page has been modified since the client caches it. + +You may configure the [[yii\filters\HttpCache::lastModified]] property to enable sending +the `Last-Modified` header. The property should be a PHP callable returning a UNIX timestamp about +the page modification time. The signature of the PHP callable should be as follows, + +```php +/** + * @param Action $action the action object that is being handled currently + * @param array $params the value of the "params" property + * @return int a UNIX timestamp representing the page modification time + */ +function ($action, $params) +``` + +The following is an example of making use of the `Last-Modified` header: + +```php +public function behaviors() +{ + return [ + [ + 'class' => 'yii\filters\HttpCache', + 'only' => ['index'], + 'lastModified' => function ($action, $params) { + $q = new \yii\db\Query(); + return $q->from('post')->max('updated_at'); + }, + ], + ]; +} +``` + +The above code states that HTTP caching should be enabled for the `index` action only. It should +generate a `Last-Modified` HTTP header based on the last update time of posts. When a browser visits +the `index` page for the first time, the page will be generated on the server and sent to the browser; +If the browser visits the same page again and there is no post being modified during the period, +the server will not re-generate the page, and the browser will use the cached version on the client-side. +As a result, server-side rendering and page content transmission are both skipped. + + +## `ETag` Header + +The "Entity Tag" (or `ETag` for short) header use a hash to represent the content of a page. If the page +is changed, the hash will be changed as well. By comparing the hash kept on the client-side with the hash +generated on the server-side, the cache may determine whether the page has been changed and should be re-transmitted. + +You may configure the [[yii\filters\HttpCache::etagSeed]] property to enable sending the `ETag` header. +The property should be a PHP callable returning a seed for generating the ETag hash. The signature of the PHP callable +should be as follows, + +```php +/** + * @param Action $action the action object that is being handled currently + * @param array $params the value of the "params" property + * @return string a string used as the seed for generating an ETag hash + */ +function ($action, $params) +``` + +The following is an example of making use of the `ETag` header: + +```php +public function behaviors() +{ + return [ + [ + 'class' => 'yii\filters\HttpCache', + 'only' => ['view'], + 'etagSeed' => function ($action, $params) { + $post = $this->findModel(\Yii::$app->request->get('id')); + return serialize([$post->title, $post->content]); + }, + ], + ]; +} +``` + +The above code states that HTTP caching should be enabled for the `view` action only. It should +generate an `ETag` HTTP header based on the title and content of the requested post. When a browser visits +the `view` page for the first time, the page will be generated on the server and sent to the browser; +If the browser visits the same page again and there is no change to the title and content of the post, +the server will not re-generate the page, and the browser will use the cached version on the client-side. +As a result, server-side rendering and page content transmission are both skipped. + +ETags allow more complex and/or more precise caching strategies than `Last-Modified` headers. +For instance, an ETag can be invalidated if the site has switched to another theme. + +Expensive ETag generation may defeat the purpose of using `HttpCache` and introduce unnecessary overhead, +since they need to be re-evaluated on every request. Try to find a simple expression that invalidates +the cache if the page content has been modified. + +> Note: In compliance to [RFC 7232](http://tools.ietf.org/html/rfc7232#section-2.4), + `HttpCache` will send out both `ETag` and `Last-Modified` headers if they are both configured. + And if the client sends both of the `If-None-Match` header and the `If-Modified-Since` header, only the former + will be respected. + + +## `Cache-Control` Header + +The `Cache-Control` header specifies the general caching policy for pages. You may send it by configuring +the [[yii\filters\HttpCache::cacheControlHeader]] property with the header value. By default, the following +header will be sent: + +``` +Cache-Control: public, max-age=3600 +``` + +## Session Cache Limiter + +When a page uses session, PHP will automatically send some cache-related HTTP headers as specified in +the `session.cache_limiter` PHP INI setting. These headers may interfere or disable the caching +that you want from `HttpCache`. To prevent this problem, by default `HttpCache` will disable sending +these headers automatically. If you want to change this behavior, you should configure the +[[yii\filters\HttpCache::sessionCacheLimiter]] property. The property can take a string value, including +`public`, `private`, `private_no_expire`, and `nocache`. Please refer to the PHP manual about +[session_cache_limiter()](http://www.php.net/manual/en/function.session-cache-limiter.php) +for explanations about these values. + + +## SEO Implications + +Search engine bots tend to respect cache headers. Since some crawlers have a limit on how many pages +per domain they process within a certain time span, introducing caching headers may help indexing your +site as they reduce the number of pages that need to be processed. + diff --git a/docs/guide-ar/caching-overview.md b/docs/guide-ar/caching-overview.md new file mode 100644 index 0000000..58ab21d --- /dev/null +++ b/docs/guide-ar/caching-overview.md @@ -0,0 +1,19 @@ +Caching +======= + +Caching is a cheap and effective way to improve the performance of a Web application. By storing relatively +static data in cache and serving it from cache when requested, the application saves the time that would be +required to generate the data from scratch every time. + +Caching can occur at different levels and places in a Web application. On the server-side, at the lower level, +cache may be used to store basic data, such as a list of most recent article information fetched from database; +and at the higher level, cache may be used to store fragments or whole of Web pages, such as the rendering result +of the most recent articles. On the client-side, HTTP caching may be used to keep most recently visited page content in +the browser cache. + +Yii supports all these caching mechanisms: + +* [Data caching](caching-data.md) +* [Fragment caching](caching-fragment.md) +* [Page caching](caching-page.md) +* [HTTP caching](caching-http.md) diff --git a/docs/guide-ar/caching-page.md b/docs/guide-ar/caching-page.md new file mode 100644 index 0000000..738668e --- /dev/null +++ b/docs/guide-ar/caching-page.md @@ -0,0 +1,40 @@ +Page Caching +============ + +Page caching refers to caching the content of a whole page on the server-side. Later when the same page +is requested again, its content will be served from the cache instead of regenerating it from scratch. + +Page caching is supported by [[yii\filters\PageCache]], an [action filter](structure-filters.md). +It can be used like the following in a controller class: + +```php +public function behaviors() +{ + return [ + [ + 'class' => 'yii\filters\PageCache', + 'only' => ['index'], + 'duration' => 60, + 'variations' => [ + \Yii::$app->language, + ], + 'dependency' => [ + 'class' => 'yii\caching\DbDependency', + 'sql' => 'SELECT COUNT(*) FROM post', + ], + ], + ]; +} +``` + +The above code states that page caching should be used only for the `index` action. The page content should +be cached for at most 60 seconds and should be variated by the current application language +and the cached page should be invalidated if the total number of posts is changed. + +As you can see, page caching is very similar to [fragment caching](caching-fragment.md). They both support options such +as `duration`, `dependencies`, `variations`, and `enabled`. Their main difference is that page caching is +implemented as an [action filter](structure-filters.md) while fragment caching a [widget](structure-widgets.md). + +You can use [fragment caching](caching-fragment.md) as well as [dynamic content](caching-fragment.md#dynamic-content) +together with page caching. + diff --git a/docs/guide-ar/concept-aliases.md b/docs/guide-ar/concept-aliases.md new file mode 100644 index 0000000..aa37e4f --- /dev/null +++ b/docs/guide-ar/concept-aliases.md @@ -0,0 +1,138 @@ +Aliases +======= + +Aliases are used to represent file paths or URLs so that you don't have to hard-code absolute paths or URLs in your +project. An alias must start with the `@` character to be differentiated from normal file paths and URLs. Alias defined +without leading `@` will be prefixed with `@` character. + +Yii has many pre-defined aliases already available. For example, the alias `@yii` represents the installation path of +the Yii framework; `@web` represents the base URL for the currently running Web application. + +Defining Aliases +---------------- + +You can define an alias for a file path or URL by calling [[Yii::setAlias()]]: + +```php +// an alias of a file path +Yii::setAlias('@foo', '/path/to/foo'); + +// an alias of a URL +Yii::setAlias('@bar', 'http://www.example.com'); + +// an alias of a concrete file that contains a \foo\Bar class +Yii::setAlias('@foo/Bar.php', '/definitely/not/foo/Bar.php'); +``` + +> Note: The file path or URL being aliased may *not* necessarily refer to an existing file or resource. + +Given a defined alias, you may derive a new alias (without the need of calling [[Yii::setAlias()]]) by appending +a slash `/` followed with one or more path segments. The aliases defined via [[Yii::setAlias()]] becomes the +*root alias*, while aliases derived from it are *derived aliases*. For example, `@foo` is a root alias, +while `@foo/bar/file.php` is a derived alias. + +You can define an alias using another alias (either root or derived): + +```php +Yii::setAlias('@foobar', '@foo/bar'); +``` + +Root aliases are usually defined during the [bootstrapping](runtime-bootstrapping.md) stage. +For example, you may call [[Yii::setAlias()]] in the [entry script](structure-entry-scripts.md). +For convenience, [Application](structure-applications.md) provides a writable property named `aliases` +that you can configure in the application [configuration](concept-configurations.md): + +```php +return [ + // ... + 'aliases' => [ + '@foo' => '/path/to/foo', + '@bar' => 'http://www.example.com', + ], +]; +``` + + +Resolving Aliases +----------------- + +You can call [[Yii::getAlias()]] to resolve a root alias into the file path or URL it represents. +The same method can also resolve a derived alias into the corresponding file path or URL: + +```php +echo Yii::getAlias('@foo'); // displays: /path/to/foo +echo Yii::getAlias('@bar'); // displays: http://www.example.com +echo Yii::getAlias('@foo/bar/file.php'); // displays: /path/to/foo/bar/file.php +``` + +The path/URL represented by a derived alias is determined by replacing the root alias part with its corresponding +path/URL in the derived alias. + +> Note: The [[Yii::getAlias()]] method does not check whether the resulting path/URL refers to an existing file or resource. + + +A root alias may also contain slash `/` characters. The [[Yii::getAlias()]] method +is intelligent enough to tell which part of an alias is a root alias and thus correctly determines +the corresponding file path or URL: + +```php +Yii::setAlias('@foo', '/path/to/foo'); +Yii::setAlias('@foo/bar', '/path2/bar'); +Yii::getAlias('@foo/test/file.php'); // displays: /path/to/foo/test/file.php +Yii::getAlias('@foo/bar/file.php'); // displays: /path2/bar/file.php +``` + +If `@foo/bar` is not defined as a root alias, the last statement would display `/path/to/foo/bar/file.php`. + + +Using Aliases +------------- + +Aliases are recognized in many places in Yii without needing to call [[Yii::getAlias()]] to convert +them into paths or URLs. For example, [[yii\caching\FileCache::cachePath]] can accept both a file path +and an alias representing a file path, thanks to the `@` prefix which allows it to differentiate a file path +from an alias. + +```php +use yii\caching\FileCache; + +$cache = new FileCache([ + 'cachePath' => '@runtime/cache', +]); +``` + +Please pay attention to the API documentation to see if a property or method parameter supports aliases. + + +Predefined Aliases +------------------ + +Yii predefines a set of aliases to easily reference commonly used file paths and URLs: + +- `@yii`, the directory where the `BaseYii.php` file is located (also called the framework directory). +- `@app`, the [[yii\base\Application::basePath|base path]] of the currently running application. +- `@runtime`, the [[yii\base\Application::runtimePath|runtime path]] of the currently running application. Defaults to `@app/runtime`. +- `@webroot`, the Web root directory of the currently running Web application. It is determined based on the directory + containing the [entry script](structure-entry-scripts.md). +- `@web`, the base URL of the currently running Web application. It has the same value as [[yii\web\Request::baseUrl]]. +- `@vendor`, the [[yii\base\Application::vendorPath|Composer vendor directory]]. Defaults to `@app/vendor`. +- `@bower`, the root directory that contains [bower packages](http://bower.io/). Defaults to `@vendor/bower`. +- `@npm`, the root directory that contains [npm packages](https://www.npmjs.org/). Defaults to `@vendor/npm`. + +The `@yii` alias is defined when you include the `Yii.php` file in your [entry script](structure-entry-scripts.md). +The rest of the aliases are defined in the application constructor when applying the application +[configuration](concept-configurations.md). + +> Note: `@web` and `@webroot` aliases as their descriptions indicate are defined within [[yii\web\Application|Web application]] and therefore are not available for [[yii\console\Application|Console application]] by default. + +Extension Aliases +----------------- + +An alias is automatically defined for each [extension](structure-extensions.md) that is installed via Composer. +Each alias is named after the root namespace of the extension as declared in its `composer.json` file, and each alias +represents the root directory of the package. For example, if you install the `yiisoft/yii2-jui` extension, +you will automatically have the alias `@yii/jui` defined during the [bootstrapping](runtime-bootstrapping.md) stage, equivalent to: + +```php +Yii::setAlias('@yii/jui', 'VendorPath/yiisoft/yii2-jui'); +``` diff --git a/docs/guide-ar/concept-autoloading.md b/docs/guide-ar/concept-autoloading.md new file mode 100644 index 0000000..90d17d7 --- /dev/null +++ b/docs/guide-ar/concept-autoloading.md @@ -0,0 +1,94 @@ +Class Autoloading +================= + +Yii relies on the [class autoloading mechanism](http://www.php.net/manual/en/language.oop5.autoload.php) +to locate and include all required class files. It provides a high-performance class autoloader that is compliant with the +[PSR-4 standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md). +The autoloader is installed when you include the `Yii.php` file. + +> Note: For simplicity of description, in this section we will only talk about autoloading of classes. However, keep in + mind that the content we are describing here applies to autoloading of interfaces and traits as well. + + +Using the Yii Autoloader +------------------------ + +To make use of the Yii class autoloader, you should follow two simple rules when creating and naming your classes: + +* Each class must be under a [namespace](http://php.net/manual/en/language.namespaces.php) (e.g. `foo\bar\MyClass`) +* Each class must be saved in an individual file whose path is determined by the following algorithm: + +```php +// $className is a fully qualified class name without the leading backslash +$classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php'); +``` + +For example, if a class name and namespace is `foo\bar\MyClass`, the [alias](concept-aliases.md) for the corresponding class file path +would be `@foo/bar/MyClass.php`. In order for this alias to be resolvable into a file path, +either `@foo` or `@foo/bar` must be a [root alias](concept-aliases.md#defining-aliases). + +When using the [Basic Project Template](start-installation.md), you may put your classes under the top-level +namespace `app` so that they can be autoloaded by Yii without the need of defining a new alias. This is because +`@app` is a [predefined alias](concept-aliases.md#predefined-aliases), and a class name like `app\components\MyClass` +can be resolved into the class file `AppBasePath/components/MyClass.php`, according to the algorithm just described. + +In the [Advanced Project Template](https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/README.md), each tier has its own root alias. For example, +the front-end tier has a root alias `@frontend`, while the back-end tier root alias is `@backend`. As a result, +you may put the front-end classes under the namespace `frontend` while the back-end classes are under `backend`. This will +allow these classes to be autoloaded by the Yii autoloader. + +To add a custom namespace to the autoloader you need to define an alias for the base directory of the namespace using [[Yii::setAlias()]]. +For example to load classes in the `foo` namespace that are located in the `path/to/foo` directory you will call `Yii::setAlias('@foo', 'path/to/foo')`. + +Class Map +--------- + +The Yii class autoloader supports the *class map* feature, which maps class names to the corresponding class file paths. +When the autoloader is loading a class, it will first check if the class is found in the map. If so, the corresponding +file path will be included directly without further checks. This makes class autoloading super fast. In fact, +all core Yii classes are autoloaded this way. + +You may add a class to the class map, stored in `Yii::$classMap`, using: + +```php +Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php'; +``` + +[Aliases](concept-aliases.md) can be used to specify class file paths. You should set the class map in the +[bootstrapping](runtime-bootstrapping.md) process so that the map is ready before your classes are used. + + +Using Other Autoloaders +----------------------- + +Because Yii embraces Composer as a package dependency manager, it is recommended that you also install +the Composer autoloader. If you are using 3rd-party libraries that have their own autoloaders, you should +also install those. + +When using the Yii autoloader together with other autoloaders, you should include the `Yii.php` file +*after* all other autoloaders are installed. This will make the Yii autoloader the first one responding to +any class autoloading request. For example, the following code is extracted from +the [entry script](structure-entry-scripts.md) of the [Basic Project Template](start-installation.md). The first +line installs the Composer autoloader, while the second line installs the Yii autoloader: + +```php +require __DIR__ . '/../vendor/autoload.php'; +require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php'; +``` + +You may use the Composer autoloader alone without the Yii autoloader. However, by doing so, the performance +of your class autoloading may be degraded, and you must follow the rules set by Composer in order for your classes +to be autoloadable. + +> Info: If you do not want to use the Yii autoloader, you must create your own version of the `Yii.php` file + and include it in your [entry script](structure-entry-scripts.md). + + +Autoloading Extension Classes +----------------------------- + +The Yii autoloader is capable of autoloading [extension](structure-extensions.md) classes. The sole requirement +is that an extension specifies the `autoload` section correctly in its `composer.json` file. Please refer to the +[Composer documentation](https://getcomposer.org/doc/04-schema.md#autoload) for more details about specifying `autoload`. + +In case you do not use the Yii autoloader, the Composer autoloader can still autoload extension classes for you. diff --git a/docs/guide-ar/concept-behaviors.md b/docs/guide-ar/concept-behaviors.md new file mode 100644 index 0000000..4bf0f25 --- /dev/null +++ b/docs/guide-ar/concept-behaviors.md @@ -0,0 +1,360 @@ +Behaviors +========= + +Behaviors are instances of [[yii\base\Behavior]], or of a child class. Behaviors, also known +as [mixins](http://en.wikipedia.org/wiki/Mixin), allow you to enhance the functionality +of an existing [[yii\base\Component|component]] class without needing to change the class's inheritance. +Attaching a behavior to a component "injects" the behavior's methods and properties into the component, making those methods and properties accessible as if they were defined in the component class itself. Moreover, a behavior +can respond to the [events](concept-events.md) triggered by the component, which allows behaviors to also customize the normal +code execution of the component. + + +Defining Behaviors +------------------ + +To define a behavior, create a class that extends [[yii\base\Behavior]], or extends a child class. For example: + +```php +namespace app\components; + +use yii\base\Behavior; + +class MyBehavior extends Behavior +{ + public $prop1; + + private $_prop2; + + public function getProp2() + { + return $this->_prop2; + } + + public function setProp2($value) + { + $this->_prop2 = $value; + } + + public function foo() + { + // ... + } +} +``` + +The above code defines the behavior class `app\components\MyBehavior`, with two properties +`prop1` and `prop2` and one method `foo()`. Note that property `prop2` +is defined via the getter `getProp2()` and the setter `setProp2()`. This is the case because [[yii\base\Behavior]] extends [[yii\base\BaseObject]] and therefore supports defining [properties](concept-properties.md) via getters and setters. + +Because this class is a behavior, when it is attached to a component, that component will then also have the `prop1` and `prop2` properties and the `foo()` method. + +> Tip: Within a behavior, you can access the component that the behavior is attached to through the [[yii\base\Behavior::owner]] property. + +> Note: In case [[yii\base\Behavior::__get()]] and/or [[yii\base\Behavior::__set()]] method of behavior is overridden you +need to override [[yii\base\Behavior::canGetProperty()]] and/or [[yii\base\Behavior::canSetProperty()]] as well. + +Handling Component Events +------------------ + +If a behavior needs to respond to the events triggered by the component it is attached to, it should override the +[[yii\base\Behavior::events()]] method. For example: + +```php +namespace app\components; + +use yii\db\ActiveRecord; +use yii\base\Behavior; + +class MyBehavior extends Behavior +{ + // ... + + public function events() + { + return [ + ActiveRecord::EVENT_BEFORE_VALIDATE => 'beforeValidate', + ]; + } + + public function beforeValidate($event) + { + // ... + } +} +``` + +The [[yii\base\Behavior::events()|events()]] method should return a list of events and their corresponding handlers. +The above example declares that the [[yii\db\ActiveRecord::EVENT_BEFORE_VALIDATE|EVENT_BEFORE_VALIDATE]] event exists and defines +its handler, `beforeValidate()`. When specifying an event handler, you may use one of the following formats: + +* a string that refers to the name of a method of the behavior class, like the example above +* an array of an object or class name, and a method name as a string (without parentheses), e.g., `[$object, 'methodName']`; +* an anonymous function + +The signature of an event handler should be as follows, where `$event` refers to the event parameter. Please refer +to the [Events](concept-events.md) section for more details about events. + +```php +function ($event) { +} +``` + +Attaching Behaviors +------------------- + +You can attach a behavior to a [[yii\base\Component|component]] either statically or dynamically. The former is more common in practice. + +To attach a behavior statically, override the [[yii\base\Component::behaviors()|behaviors()]] method of the component +class to which the behavior is being attached. The [[yii\base\Component::behaviors()|behaviors()]] method should return a list of behavior [configurations](concept-configurations.md). +Each behavior configuration can be either a behavior class name or a configuration array: + +```php +namespace app\models; + +use yii\db\ActiveRecord; +use app\components\MyBehavior; + +class User extends ActiveRecord +{ + public function behaviors() + { + return [ + // anonymous behavior, behavior class name only + MyBehavior::className(), + + // named behavior, behavior class name only + 'myBehavior2' => MyBehavior::className(), + + // anonymous behavior, configuration array + [ + 'class' => MyBehavior::className(), + 'prop1' => 'value1', + 'prop2' => 'value2', + ], + + // named behavior, configuration array + 'myBehavior4' => [ + 'class' => MyBehavior::className(), + 'prop1' => 'value1', + 'prop2' => 'value2', + ] + ]; + } +} +``` + +You may associate a name with a behavior by specifying the array key corresponding to the behavior configuration. In this case, the behavior is called a *named behavior*. In the above example, there are two named behaviors: +`myBehavior2` and `myBehavior4`. If a behavior is not associated with a name, it is called an *anonymous behavior*. + + +To attach a behavior dynamically, call the [[yii\base\Component::attachBehavior()]] method of the component to which the behavior is being attached: + +```php +use app\components\MyBehavior; + +// attach a behavior object +$component->attachBehavior('myBehavior1', new MyBehavior); + +// attach a behavior class +$component->attachBehavior('myBehavior2', MyBehavior::className()); + +// attach a configuration array +$component->attachBehavior('myBehavior3', [ + 'class' => MyBehavior::className(), + 'prop1' => 'value1', + 'prop2' => 'value2', +]); +``` + +You may attach multiple behaviors at once using the [[yii\base\Component::attachBehaviors()]] method: + +```php +$component->attachBehaviors([ + 'myBehavior1' => new MyBehavior, // a named behavior + MyBehavior::className(), // an anonymous behavior +]); +``` + +You may also attach behaviors through [configurations](concept-configurations.md) like the following: + +```php +[ + 'as myBehavior2' => MyBehavior::className(), + + 'as myBehavior3' => [ + 'class' => MyBehavior::className(), + 'prop1' => 'value1', + 'prop2' => 'value2', + ], +] +``` + +For more details, +please refer to the [Configurations](concept-configurations.md#configuration-format) section. + +Using Behaviors +--------------- + +To use a behavior, first attach it to a [[yii\base\Component|component]] per the instructions above. Once a behavior is attached to a component, its usage is straightforward. + +You can access a *public* member variable or a [property](concept-properties.md) defined by a getter and/or a setter +of the behavior through the component it is attached to: + +```php +// "prop1" is a property defined in the behavior class +echo $component->prop1; +$component->prop1 = $value; +``` + +You can also call a *public* method of the behavior similarly: + +```php +// foo() is a public method defined in the behavior class +$component->foo(); +``` + +As you can see, although `$component` does not define `prop1` and `foo()`, they can be used as if they are part +of the component definition due to the attached behavior. + +If two behaviors define the same property or method and they are both attached to the same component, +the behavior that is attached to the component *first* will take precedence when the property or method is accessed. + +A behavior may be associated with a name when it is attached to a component. If this is the case, you may +access the behavior object using the name: + +```php +$behavior = $component->getBehavior('myBehavior'); +``` + +You may also get all behaviors attached to a component: + +```php +$behaviors = $component->getBehaviors(); +``` + + +Detaching Behaviors +------------------- + +To detach a behavior, call [[yii\base\Component::detachBehavior()]] with the name associated with the behavior: + +```php +$component->detachBehavior('myBehavior1'); +``` + +You may also detach *all* behaviors: + +```php +$component->detachBehaviors(); +``` + + +Using `TimestampBehavior` +------------------------- + +To wrap up, let's take a look at [[yii\behaviors\TimestampBehavior]]. This behavior supports automatically +updating the timestamp attributes of an [[yii\db\ActiveRecord|Active Record]] model anytime the model is saved via +`insert()`, `update()` or `save()` method. + +First, attach this behavior to the [[yii\db\ActiveRecord|Active Record]] class that you plan to use: + +```php +namespace app\models\User; + +use yii\db\ActiveRecord; +use yii\behaviors\TimestampBehavior; + +class User extends ActiveRecord +{ + // ... + + public function behaviors() + { + return [ + [ + 'class' => TimestampBehavior::className(), + 'attributes' => [ + ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'], + ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'], + ], + // if you're using datetime instead of UNIX timestamp: + // 'value' => new Expression('NOW()'), + ], + ]; + } +} +``` + +The behavior configuration above specifies that when the record is being: + +* inserted, the behavior should assign the current UNIX timestamp to + the `created_at` and `updated_at` attributes +* updated, the behavior should assign the current UNIX timestamp to the `updated_at` attribute + +> Note: For the above implementation to work with MySQL database, please declare the columns(`created_at`, `updated_at`) as int(11) for being UNIX timestamp. + +With that code in place, if you have a `User` object and try to save it, you will find its `created_at` and `updated_at` are automatically +filled with the current UNIX timestamp: + +```php +$user = new User; +$user->email = 'test@example.com'; +$user->save(); +echo $user->created_at; // shows the current timestamp +``` + +The [[yii\behaviors\TimestampBehavior|TimestampBehavior]] also offers a useful method +[[yii\behaviors\TimestampBehavior::touch()|touch()]], which will assign the current timestamp +to a specified attribute and save it to the database: + +```php +$user->touch('login_time'); +``` + +Other behaviors +--------------- + +There are several built-in and external behaviors available: + +- [[yii\behaviors\BlameableBehavior]] - automatically fills the specified attributes with the current user ID. +- [[yii\behaviors\SluggableBehavior]] - automatically fills the specified attribute with a value that can be used + as a slug in a URL. +- [[yii\behaviors\AttributeBehavior]] - automatically assigns a specified value to one or multiple attributes of + an ActiveRecord object when certain events happen. +- [yii2tech\ar\softdelete\SoftDeleteBehavior](https://github.com/yii2tech/ar-softdelete) - provides methods to soft-delete + and soft-restore ActiveRecord i.e. set flag or status which marks record as deleted. +- [yii2tech\ar\position\PositionBehavior](https://github.com/yii2tech/ar-position) - allows managing records order in an + integer field by providing reordering methods. + +Comparing Behaviors with Traits +---------------------- + +While behaviors are similar to [traits](http://www.php.net/traits) in that they both "inject" their +properties and methods to the primary class, they differ in many aspects. As explained below, they +both have pros and cons. They are more like complements to each other rather than alternatives. + + +### Reasons to Use Behaviors + +Behavior classes, like normal classes, support inheritance. Traits, on the other hand, +can be considered as language-supported copy and paste. They do not support inheritance. + +Behaviors can be attached and detached to a component dynamically without requiring modification of the component class. +To use a trait, you must modify the code of the class using it. + +Behaviors are configurable while traits are not. + +Behaviors can customize the code execution of a component by responding to its events. + +When there can be name conflicts among different behaviors attached to the same component, the conflicts are +automatically resolved by prioritizing the behavior attached to the component first. +Name conflicts caused by different traits requires manual resolution by renaming the affected +properties or methods. + + +### Reasons to Use Traits + +Traits are much more efficient than behaviors as behaviors are objects that take both time and memory. + +IDEs are more friendly to traits as they are a native language construct. + diff --git a/docs/guide-ar/concept-components.md b/docs/guide-ar/concept-components.md new file mode 100644 index 0000000..4aa1f44 --- /dev/null +++ b/docs/guide-ar/concept-components.md @@ -0,0 +1,97 @@ +Components +========== + +Components are the main building blocks of Yii applications. Components are instances of [[yii\base\Component]], +or an extended class. The three main features that components provide to other classes are: + +* [Properties](concept-properties.md) +* [Events](concept-events.md) +* [Behaviors](concept-behaviors.md) + +Separately and combined, these features make Yii classes much more customizable and easier to use. For example, +the included [[yii\jui\DatePicker|date picker widget]], a user interface component, can be used in a [view](structure-views.md) +to generate an interactive date picker: + +```php +use yii\jui\DatePicker; + +echo DatePicker::widget([ + 'language' => 'ru', + 'name' => 'country', + 'clientOptions' => [ + 'dateFormat' => 'yy-mm-dd', + ], +]); +``` + +The widget's properties are easily writable because the class extends [[yii\base\Component]]. + +While components are very powerful, they are a bit heavier than normal objects, due to the fact that +it takes extra memory and CPU time to support [event](concept-events.md) and [behavior](concept-behaviors.md) functionality in particular. +If your components do not need these two features, you may consider extending your component class from +[[yii\base\BaseObject]] instead of [[yii\base\Component]]. Doing so will make your components as efficient as normal PHP objects, +but with added support for [properties](concept-properties.md). + +When extending your class from [[yii\base\Component]] or [[yii\base\BaseObject]], it is recommended that you follow +these conventions: + +- If you override the constructor, specify a `$config` parameter as the constructor's *last* parameter, and then pass this parameter + to the parent constructor. +- Always call the parent constructor *at the end* of your overriding constructor. +- If you override the [[yii\base\BaseObject::init()]] method, make sure you call the parent implementation of `init()` *at the beginning* of your `init()` method. + +For example: + +```php + 3, 'prop2' => 4]); +// alternatively +$component = \Yii::createObject([ + 'class' => MyClass::className(), + 'prop1' => 3, + 'prop2' => 4, +], [1, 2]); +``` + +> Info: While the approach of calling [[Yii::createObject()]] looks more complicated, it is more powerful because it is +> implemented on top of a [dependency injection container](concept-di-container.md). + + +The [[yii\base\BaseObject]] class enforces the following object lifecycle: + +1. Pre-initialization within the constructor. You can set default property values here. +2. Object configuration via `$config`. The configuration may overwrite the default values set within the constructor. +3. Post-initialization within [[yii\base\BaseObject::init()|init()]]. You may override this method to perform sanity checks and normalization of the properties. +4. Object method calls. + +The first three steps all happen within the object's constructor. This means that once you get a class instance (i.e., an object), +that object has already been initialized to a proper, reliable state. diff --git a/docs/guide-ar/concept-configurations.md b/docs/guide-ar/concept-configurations.md new file mode 100644 index 0000000..ef361c0 --- /dev/null +++ b/docs/guide-ar/concept-configurations.md @@ -0,0 +1,292 @@ +Configurations +============== + +Configurations are widely used in Yii when creating new objects or initializing existing objects. +Configurations usually include the class name of the object being created, and a list of initial values +that should be assigned to the object's [properties](concept-properties.md). Configurations may also include a list of +handlers that should be attached to the object's [events](concept-events.md) and/or a list of +[behaviors](concept-behaviors.md) that should also be attached to the object. + +In the following, a configuration is used to create and initialize a database connection: + +```php +$config = [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=127.0.0.1;dbname=demo', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', +]; + +$db = Yii::createObject($config); +``` + +The [[Yii::createObject()]] method takes a configuration array as its argument, and creates an object by instantiating +the class named in the configuration. When the object is instantiated, the rest of the configuration +will be used to initialize the object's properties, event handlers, and behaviors. + +If you already have an object, you may use [[Yii::configure()]] to initialize the object's properties with +a configuration array: + +```php +Yii::configure($object, $config); +``` + +Note that, in this case, the configuration array should not contain a `class` element. + + +## Configuration Format + +The format of a configuration can be formally described as: + +```php +[ + 'class' => 'ClassName', + 'propertyName' => 'propertyValue', + 'on eventName' => $eventHandler, + 'as behaviorName' => $behaviorConfig, +] +``` + +where + +* The `class` element specifies a fully qualified class name for the object being created. +* The `propertyName` elements specify the initial values for the named property. The keys are the property names, and the + values are the corresponding initial values. Only public member variables and [properties](concept-properties.md) + defined by getters/setters can be configured. +* The `on eventName` elements specify what handlers should be attached to the object's [events](concept-events.md). + Notice that the array keys are formed by prefixing event names with `on `. Please refer to + the [Events](concept-events.md) section for supported event handler formats. +* The `as behaviorName` elements specify what [behaviors](concept-behaviors.md) should be attached to the object. + Notice that the array keys are formed by prefixing behavior names with `as `; the value, `$behaviorConfig`, represents + the configuration for creating a behavior, like a normal configuration described here. + +Below is an example showing a configuration with initial property values, event handlers, and behaviors: + +```php +[ + 'class' => 'app\components\SearchEngine', + 'apiKey' => 'xxxxxxxx', + 'on search' => function ($event) { + Yii::info("Keyword searched: " . $event->keyword); + }, + 'as indexer' => [ + 'class' => 'app\components\IndexerBehavior', + // ... property init values ... + ], +] +``` + + +## Using Configurations + +Configurations are used in many places in Yii. At the beginning of this section, we have shown how to +create an object according to a configuration by using [[Yii::createObject()]]. In this subsection, we will +describe application configurations and widget configurations - two major usages of configurations. + + +### Application Configurations + +The configuration for an [application](structure-applications.md) is probably one of the most complex arrays in Yii. +This is because the [[yii\web\Application|application]] class has a lot of configurable properties and events. +More importantly, its [[yii\web\Application::components|components]] property can receive an array of configurations +for creating components that are registered through the application. The following is an abstract from the application +configuration file for the [Basic Project Template](start-installation.md). + +```php +$config = [ + 'id' => 'basic', + 'basePath' => dirname(__DIR__), + 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php', + 'components' => [ + 'cache' => [ + 'class' => 'yii\caching\FileCache', + ], + 'mailer' => [ + 'class' => 'yii\swiftmailer\Mailer', + ], + 'log' => [ + 'class' => 'yii\log\Dispatcher', + 'traceLevel' => YII_DEBUG ? 3 : 0, + 'targets' => [ + [ + 'class' => 'yii\log\FileTarget', + ], + ], + ], + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=stay2', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', + ], + ], +]; +``` + +The configuration does not have a `class` key. This is because it is used as follows in +an [entry script](structure-entry-scripts.md), where the class name is already given, + +```php +(new yii\web\Application($config))->run(); +``` + +More details about configuring the `components` property of an application can be found +in the [Applications](structure-applications.md) section and the [Service Locator](concept-service-locator.md) section. + +Since version 2.0.11, the application configuration supports [Dependency Injection Container](concept-di-container.md) +configuration using `container` property. For example: + +```php +$config = [ + 'id' => 'basic', + 'basePath' => dirname(__DIR__), + 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php', + 'container' => [ + 'definitions' => [ + 'yii\widgets\LinkPager' => ['maxButtonCount' => 5] + ], + 'singletons' => [ + // Dependency Injection Container singletons configuration + ] + ] +]; +``` + +To know more about the possible values of `definitions` and `singletons` configuration arrays and real-life examples, +please read [Advanced Practical Usage](concept-di-container.md#advanced-practical-usage) subsection of the +[Dependency Injection Container](concept-di-container.md) article. + +### Widget Configurations + +When using [widgets](structure-widgets.md), you often need to use configurations to customize the widget properties. +Both of the [[yii\base\Widget::widget()]] and [[yii\base\Widget::begin()]] methods can be used to create +a widget. They take a configuration array, like the following, + +```php +use yii\widgets\Menu; + +echo Menu::widget([ + 'activateItems' => false, + 'items' => [ + ['label' => 'Home', 'url' => ['site/index']], + ['label' => 'Products', 'url' => ['product/index']], + ['label' => 'Login', 'url' => ['site/login'], 'visible' => Yii::$app->user->isGuest], + ], +]); +``` + +The above code creates a `Menu` widget and initializes its `activateItems` property to be `false`. +The `items` property is also configured with menu items to be displayed. + +Note that because the class name is already given, the configuration array should NOT have the `class` key. + + +## Configuration Files + +When a configuration is very complex, a common practice is to store it in one or multiple PHP files, known as +*configuration files*. A configuration file returns a PHP array representing the configuration. +For example, you may keep an application configuration in a file named `web.php`, like the following, + +```php +return [ + 'id' => 'basic', + 'basePath' => dirname(__DIR__), + 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php', + 'components' => require __DIR__ . '/components.php', +]; +``` + +Because the `components` configuration is complex too, you store it in a separate file called `components.php` +and "require" this file in `web.php` as shown above. The content of `components.php` is as follows, + +```php +return [ + 'cache' => [ + 'class' => 'yii\caching\FileCache', + ], + 'mailer' => [ + 'class' => 'yii\swiftmailer\Mailer', + ], + 'log' => [ + 'class' => 'yii\log\Dispatcher', + 'traceLevel' => YII_DEBUG ? 3 : 0, + 'targets' => [ + [ + 'class' => 'yii\log\FileTarget', + ], + ], + ], + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=stay2', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', + ], +]; +``` + +To get a configuration stored in a configuration file, simply "require" it, like the following: + +```php +$config = require 'path/to/web.php'; +(new yii\web\Application($config))->run(); +``` + + +## Default Configurations + +The [[Yii::createObject()]] method is implemented based on a [dependency injection container](concept-di-container.md). +It allows you to specify a set of the so-called *default configurations* which will be applied to ALL instances of +the specified classes when they are being created using [[Yii::createObject()]]. The default configurations +can be specified by calling `Yii::$container->set()` in the [bootstrapping](runtime-bootstrapping.md) code. + +For example, if you want to customize [[yii\widgets\LinkPager]] so that ALL link pagers will show at most 5 page buttons +(the default value is 10), you may use the following code to achieve this goal: + +```php +\Yii::$container->set('yii\widgets\LinkPager', [ + 'maxButtonCount' => 5, +]); +``` + +Without using default configurations, you would have to configure `maxButtonCount` in every place where you use +link pagers. + + +## Environment Constants + +Configurations often vary according to the environment in which an application runs. For example, +in development environment, you may want to use a database named `mydb_dev`, while on production server +you may want to use the `mydb_prod` database. To facilitate switching environments, Yii provides a constant +named `YII_ENV` that you may define in the [entry script](structure-entry-scripts.md) of your application. +For example, + +```php +defined('YII_ENV') or define('YII_ENV', 'dev'); +``` + +You may define `YII_ENV` as one of the following values: + +- `prod`: production environment. The constant `YII_ENV_PROD` will evaluate as `true`. + This is the default value of `YII_ENV` if you do not define it. +- `dev`: development environment. The constant `YII_ENV_DEV` will evaluate as `true`. +- `test`: testing environment. The constant `YII_ENV_TEST` will evaluate as `true`. + +With these environment constants, you may specify your configurations conditionally based on +the current environment. For example, your application configuration may contain the following +code to enable the [debug toolbar and debugger](tool-debugger.md) in development environment. + +```php +$config = [...]; + +if (YII_ENV_DEV) { + // configuration adjustments for 'dev' environment + $config['bootstrap'][] = 'debug'; + $config['modules']['debug'] = 'yii\debug\Module'; +} + +return $config; +``` diff --git a/docs/guide-ar/concept-di-container.md b/docs/guide-ar/concept-di-container.md new file mode 100644 index 0000000..3e0c601 --- /dev/null +++ b/docs/guide-ar/concept-di-container.md @@ -0,0 +1,534 @@ +Dependency Injection Container +============================== + +A dependency injection (DI) container is an object that knows how to instantiate and configure objects and +all their dependent objects. [Martin Fowler's article](http://martinfowler.com/articles/injection.html) has well +explained why DI container is useful. Here we will mainly explain the usage of the DI container provided by Yii. + + +Dependency Injection +-------------------- + +Yii provides the DI container feature through the class [[yii\di\Container]]. It supports the following kinds of +dependency injection: + +* Constructor injection; +* Method injection; +* Setter and property injection; +* PHP callable injection; + + +### Constructor Injection + +The DI container supports constructor injection with the help of type hints for constructor parameters. +The type hints tell the container which classes or interfaces are dependent when it is used to create a new object. +The container will try to get the instances of the dependent classes or interfaces and then inject them +into the new object through the constructor. For example, + +```php +class Foo +{ + public function __construct(Bar $bar) + { + } +} + +$foo = $container->get('Foo'); +// which is equivalent to the following: +$bar = new Bar; +$foo = new Foo($bar); +``` + + +### Method Injection + +Usually the dependencies of a class are passed to the constructor and are available inside of the class during the whole lifecycle. +With Method Injection it is possible to provide a dependency that is only needed by a single method of the class +and passing it to the constructor may not be possible or may cause too much overhead in the majority of use cases. + +A class method can be defined like the `doSomething()` method in the following example: + +```php +class MyClass extends \yii\base\Component +{ + public function __construct(/*Some lightweight dependencies here*/, $config = []) + { + // ... + } + + public function doSomething($param1, \my\heavy\Dependency $something) + { + // do something with $something + } +} +``` + +You may call that method either by passing an instance of `\my\heavy\Dependency` yourself or using [[yii\di\Container::invoke()]] like the following: + +```php +$obj = new MyClass(/*...*/); +Yii::$container->invoke([$obj, 'doSomething'], ['param1' => 42]); // $something will be provided by the DI container +``` + +### Setter and Property Injection + +Setter and property injection is supported through [configurations](concept-configurations.md). +When registering a dependency or when creating a new object, you can provide a configuration which +will be used by the container to inject the dependencies through the corresponding setters or properties. +For example, + +```php +use yii\base\BaseObject; + +class Foo extends BaseObject +{ + public $bar; + + private $_qux; + + public function getQux() + { + return $this->_qux; + } + + public function setQux(Qux $qux) + { + $this->_qux = $qux; + } +} + +$container->get('Foo', [], [ + 'bar' => $container->get('Bar'), + 'qux' => $container->get('Qux'), +]); +``` + +> Info: The [[yii\di\Container::get()]] method takes its third parameter as a configuration array that should + be applied to the object being created. If the class implements the [[yii\base\Configurable]] interface (e.g. + [[yii\base\BaseObject]]), the configuration array will be passed as the last parameter to the class constructor; + otherwise, the configuration will be applied *after* the object is created. + + +### PHP Callable Injection + +In this case, the container will use a registered PHP callable to build new instances of a class. +Each time when [[yii\di\Container::get()]] is called, the corresponding callable will be invoked. +The callable is responsible to resolve the dependencies and inject them appropriately to the newly +created objects. For example, + +```php +$container->set('Foo', function ($container, $params, $config) { + $foo = new Foo(new Bar); + // ... other initializations ... + return $foo; +}); + +$foo = $container->get('Foo'); +``` + +To hide the complex logic for building a new object, you may use a static class method as callable. For example, + +```php +class FooBuilder +{ + public static function build($container, $params, $config) + { + $foo = new Foo(new Bar); + // ... other initializations ... + return $foo; + } +} + +$container->set('Foo', ['app\helper\FooBuilder', 'build']); + +$foo = $container->get('Foo'); +``` + +By doing so, the person who wants to configure the `Foo` class no longer needs to be aware of how it is built. + + +Registering Dependencies +------------------------ + +You can use [[yii\di\Container::set()]] to register dependencies. The registration requires a dependency name +as well as a dependency definition. A dependency name can be a class name, an interface name, or an alias name; +and a dependency definition can be a class name, a configuration array, or a PHP callable. + +```php +$container = new \yii\di\Container; + +// register a class name as is. This can be skipped. +$container->set('yii\db\Connection'); + +// register an interface +// When a class depends on the interface, the corresponding class +// will be instantiated as the dependent object +$container->set('yii\mail\MailInterface', 'yii\swiftmailer\Mailer'); + +// register an alias name. You can use $container->get('foo') +// to create an instance of Connection +$container->set('foo', 'yii\db\Connection'); + +// register a class with configuration. The configuration +// will be applied when the class is instantiated by get() +$container->set('yii\db\Connection', [ + 'dsn' => 'mysql:host=127.0.0.1;dbname=demo', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', +]); + +// register an alias name with class configuration +// In this case, a "class" element is required to specify the class +$container->set('db', [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=127.0.0.1;dbname=demo', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', +]); + +// register a PHP callable +// The callable will be executed each time when $container->get('db') is called +$container->set('db', function ($container, $params, $config) { + return new \yii\db\Connection($config); +}); + +// register a component instance +// $container->get('pageCache') will return the same instance each time it is called +$container->set('pageCache', new FileCache); +``` + +> Tip: If a dependency name is the same as the corresponding dependency definition, you do not + need to register it with the DI container. + +A dependency registered via `set()` will generate an instance each time the dependency is needed. +You can use [[yii\di\Container::setSingleton()]] to register a dependency that only generates +a single instance: + +```php +$container->setSingleton('yii\db\Connection', [ + 'dsn' => 'mysql:host=127.0.0.1;dbname=demo', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', +]); +``` + + +Resolving Dependencies +---------------------- + +Once you have registered dependencies, you can use the DI container to create new objects, +and the container will automatically resolve dependencies by instantiating them and injecting +them into the newly created objects. The dependency resolution is recursive, meaning that +if a dependency has other dependencies, those dependencies will also be resolved automatically. + +You can use [[yii\di\Container::get()|get()]] to either create or get object instance. +The method takes a dependency name, which can be a class name, an interface name or an alias name. +The dependency name may be registered via [[yii\di\Container::set()|set()]] +or [[yii\di\Container::setSingleton()|setSingleton()]]. You may optionally provide a list of class +constructor parameters and a [configuration](concept-configurations.md) to configure the newly created object. + +For example: + +```php +// "db" is a previously registered alias name +$db = $container->get('db'); + +// equivalent to: $engine = new \app\components\SearchEngine($apiKey, $apiSecret, ['type' => 1]); +$engine = $container->get('app\components\SearchEngine', [$apiKey, $apiSecret], ['type' => 1]); +``` + +Behind the scene, the DI container does much more work than just creating a new object. +The container will first inspect the class constructor to find out dependent class or interface names +and then automatically resolve those dependencies recursively. + +The following code shows a more sophisticated example. The `UserLister` class depends on an object implementing +the `UserFinderInterface` interface; the `UserFinder` class implements this interface and depends on +a `Connection` object. All these dependencies are declared through type hinting of the class constructor parameters. +With proper dependency registration, the DI container is able to resolve these dependencies automatically +and creates a new `UserLister` instance with a simple call of `get('userLister')`. + +```php +namespace app\models; + +use yii\base\BaseObject; +use yii\db\Connection; +use yii\di\Container; + +interface UserFinderInterface +{ + function findUser(); +} + +class UserFinder extends BaseObject implements UserFinderInterface +{ + public $db; + + public function __construct(Connection $db, $config = []) + { + $this->db = $db; + parent::__construct($config); + } + + public function findUser() + { + } +} + +class UserLister extends BaseObject +{ + public $finder; + + public function __construct(UserFinderInterface $finder, $config = []) + { + $this->finder = $finder; + parent::__construct($config); + } +} + +$container = new Container; +$container->set('yii\db\Connection', [ + 'dsn' => '...', +]); +$container->set('app\models\UserFinderInterface', [ + 'class' => 'app\models\UserFinder', +]); +$container->set('userLister', 'app\models\UserLister'); + +$lister = $container->get('userLister'); + +// which is equivalent to: + +$db = new \yii\db\Connection(['dsn' => '...']); +$finder = new UserFinder($db); +$lister = new UserLister($finder); +``` + + +Practical Usage +--------------- + +Yii creates a DI container when you include the `Yii.php` file in the [entry script](structure-entry-scripts.md) +of your application. The DI container is accessible via [[Yii::$container]]. When you call [[Yii::createObject()]], +the method will actually call the container's [[yii\di\Container::get()|get()]] method to create a new object. +As aforementioned, the DI container will automatically resolve the dependencies (if any) and inject them +into obtained object. Because Yii uses [[Yii::createObject()]] in most of its core code to create +new objects, this means you can customize the objects globally by dealing with [[Yii::$container]]. + +For example, let's customize globally the default number of pagination buttons of [[yii\widgets\LinkPager]]. + +```php +\Yii::$container->set('yii\widgets\LinkPager', ['maxButtonCount' => 5]); +``` + +Now if you use the widget in a view with the following code, the `maxButtonCount` property will be initialized +as 5 instead of the default value 10 as defined in the class. + +```php +echo \yii\widgets\LinkPager::widget(); +``` + +You can still override the value set via DI container, though: + +```php +echo \yii\widgets\LinkPager::widget(['maxButtonCount' => 20]); +``` + +> Note: Properties given in the widget call will always override the definition in the DI container. +> Even if you specify an array, e.g. `'options' => ['id' => 'mypager']` these will not be merged +> with other options but replace them. + +Another example is to take advantage of the automatic constructor injection of the DI container. +Assume your controller class depends on some other objects, such as a hotel booking service. You +can declare the dependency through a constructor parameter and let the DI container to resolve it for you. + +```php +namespace app\controllers; + +use yii\web\Controller; +use app\components\BookingInterface; + +class HotelController extends Controller +{ + protected $bookingService; + + public function __construct($id, $module, BookingInterface $bookingService, $config = []) + { + $this->bookingService = $bookingService; + parent::__construct($id, $module, $config); + } +} +``` + +If you access this controller from browser, you will see an error complaining the `BookingInterface` +cannot be instantiated. This is because you need to tell the DI container how to deal with this dependency: + +```php +\Yii::$container->set('app\components\BookingInterface', 'app\components\BookingService'); +``` + +Now if you access the controller again, an instance of `app\components\BookingService` will be +created and injected as the 3rd parameter to the controller's constructor. + +Advanced Practical Usage +--------------- + +Say we work on API application and have: + +- `app\components\Request` class that extends `yii\web\Request` and provides additional functionality +- `app\components\Response` class that extends `yii\web\Response` and should have `format` property + set to `json` on creation +- `app\storage\FileStorage` and `app\storage\DocumentsReader` classes that implement some logic on + working with documents that are located in some file storage: + + ```php + class FileStorage + { + public function __construct($root) { + // whatever + } + } + + class DocumentsReader + { + public function __construct(FileStorage $fs) { + // whatever + } + } + ``` + +It is possible to configure multiple definitions at once, passing configuration array to +[[yii\di\Container::setDefinitions()|setDefinitions()]] or [[yii\di\Container::setSingletons()|setSingletons()]] method. +Iterating over the configuration array, the methods will call [[yii\di\Container::set()|set()]] +or [[yii\di\Container::setSingleton()|setSingleton()]] respectively for each item. + +The configuration array format is: + + - `key`: class name, interface name or alias name. The key will be passed to the + [[yii\di\Container::set()|set()]] method as a first argument `$class`. + - `value`: the definition associated with `$class`. Possible values are described in [[yii\di\Container::set()|set()]] + documentation for the `$definition` parameter. Will be passed to the [[set()]] method as + the second argument `$definition`. + +For example, let's configure our container to follow the aforementioned requirements: + +```php +$container->setDefinitions([ + 'yii\web\Request' => 'app\components\Request', + 'yii\web\Response' => [ + 'class' => 'app\components\Response', + 'format' => 'json' + ], + 'app\storage\DocumentsReader' => function ($container, $params, $config) { + $fs = new app\storage\FileStorage('/var/tempfiles'); + return new app\storage\DocumentsReader($fs); + } +]); + +$reader = $container->get('app\storage\DocumentsReader'); +// Will create DocumentReader object with its dependencies as described in the config +``` + +> Tip: Container may be configured in declarative style using application configuration since version 2.0.11. +Check out the [Application Configurations](concept-configurations.md#application-configurations) subsection of +the [Configurations](concept-configurations.md) guide article. + +Everything works, but in case we need to create `DocumentWriter` class, +we shall copy-paste the line that creates `FileStorage` object, that is not the smartest way, obviously. + +As described in the [Resolving Dependencies](#resolving-dependencies) subsection, [[yii\di\Container::set()|set()]] +and [[yii\di\Container::setSingleton()|setSingleton()]] can optionally take dependency's constructor parameters as +a third argument. To set the constructor parameters, you may use the following configuration array format: + + - `key`: class name, interface name or alias name. The key will be passed to the + [[yii\di\Container::set()|set()]] method as a first argument `$class`. + - `value`: array of two elements. The first element will be passed to the [[yii\di\Container::set()|set()]] method as the + second argument `$definition`, the second one — as `$params`. + +Let's modify our example: + +```php +$container->setDefinitions([ + 'tempFileStorage' => [ // we've created an alias for convenience + ['class' => 'app\storage\FileStorage'], + ['/var/tempfiles'] // could be extracted from some config files + ], + 'app\storage\DocumentsReader' => [ + ['class' => 'app\storage\DocumentsReader'], + [Instance::of('tempFileStorage')] + ], + 'app\storage\DocumentsWriter' => [ + ['class' => 'app\storage\DocumentsWriter'], + [Instance::of('tempFileStorage')] + ] +]); + +$reader = $container->get('app\storage\DocumentsReader); +// Will behave exactly the same as in the previous example. +``` + +You might notice `Instance::of('tempFileStorage')` notation. It means, that the [[yii\di\Container|Container]] +will implicitly provide a dependency registered with the name of `tempFileStorage` and pass it as the first argument +of `app\storage\DocumentsWriter` constructor. + +> Note: [[yii\di\Container::setDefinitions()|setDefinitions()]] and [[yii\di\Container::setSingletons()|setSingletons()]] + methods are available since version 2.0.11. + +Another step on configuration optimization is to register some dependencies as singletons. +A dependency registered via [[yii\di\Container::set()|set()]] will be instantiated each time it is needed. +Some classes do not change the state during runtime, therefore they may be registered as singletons +in order to increase the application performance. + +A good example could be `app\storage\FileStorage` class, that executes some operations on file system with a simple +API (e.g. `$fs->read()`, `$fs->write()`). These operations do not change the internal class state, so we can +create its instance once and use it multiple times. + +```php +$container->setSingletons([ + 'tempFileStorage' => [ + ['class' => 'app\storage\FileStorage'], + ['/var/tempfiles'] + ], +]); + +$container->setDefinitions([ + 'app\storage\DocumentsReader' => [ + ['class' => 'app\storage\DocumentsReader'], + [Instance::of('tempFileStorage')] + ], + 'app\storage\DocumentsWriter' => [ + ['class' => 'app\storage\DocumentsWriter'], + [Instance::of('tempFileStorage')] + ] +]); + +$reader = $container->get('app\storage\DocumentsReader'); +``` + +When to Register Dependencies +----------------------------- + +Because dependencies are needed when new objects are being created, their registration should be done +as early as possible. The following are the recommended practices: + +* If you are the developer of an application, you can register your dependencies using application configuration. + Please, read the [Application Configurations](concept-configurations.md#application-configurations) subsection of + the [Configurations](concept-configurations.md) guide article. +* If you are the developer of a redistributable [extension](structure-extensions.md), you can register dependencies + in the bootstrapping class of the extension. + + +Summary +------- + +Both dependency injection and [service locator](concept-service-locator.md) are popular design patterns +that allow building software in a loosely-coupled and more testable fashion. We highly recommend you to read +[Martin's article](http://martinfowler.com/articles/injection.html) to get a deeper understanding of +dependency injection and service locator. + +Yii implements its [service locator](concept-service-locator.md) on top of the dependency injection (DI) container. +When a service locator is trying to create a new object instance, it will forward the call to the DI container. +The latter will resolve the dependencies automatically as described above. + diff --git a/docs/guide-ar/concept-events.md b/docs/guide-ar/concept-events.md new file mode 100644 index 0000000..59f1d3d --- /dev/null +++ b/docs/guide-ar/concept-events.md @@ -0,0 +1,428 @@ +Events +====== + +Events allow you to inject custom code into existing code at certain execution points. You can attach custom +code to an event so that when the event is triggered, the code gets executed automatically. For example, +a mailer object may trigger a `messageSent` event when it successfully sends a message. If you want to keep +track of the messages that are successfully sent, you could then simply attach the tracking code to the `messageSent` event. + +Yii introduces a base class called [[yii\base\Component]] to support events. If a class needs to trigger +events, it should extend from [[yii\base\Component]], or from a child class. + + +Event Handlers +-------------- + +An event handler is a [PHP callback](http://www.php.net/manual/en/language.types.callable.php) that gets executed +when the event it is attached to is triggered. You can use any of the following callbacks: + +- a global PHP function specified as a string (without parentheses), e.g., `'trim'`; +- an object method specified as an array of an object and a method name as a string (without parentheses), e.g., `[$object, 'methodName']`; +- a static class method specified as an array of a class name and a method name as a string (without parentheses), e.g., `['ClassName', 'methodName']`; +- an anonymous function, e.g., `function ($event) { ... }`. + +The signature of an event handler is: + +```php +function ($event) { + // $event is an object of yii\base\Event or a child class +} +``` + +Through the `$event` parameter, an event handler may get the following information about the event that occurred: + +- [[yii\base\Event::name|event name]]; +- [[yii\base\Event::sender|event sender]]: the object whose `trigger()` method was called; +- [[yii\base\Event::data|custom data]]: the data that is provided when attaching the event handler (to be explained next). + + +Attaching Event Handlers +------------------------ + +You can attach a handler to an event by calling the [[yii\base\Component::on()]] method. For example: + +```php +$foo = new Foo(); + +// this handler is a global function +$foo->on(Foo::EVENT_HELLO, 'function_name'); + +// this handler is an object method +$foo->on(Foo::EVENT_HELLO, [$object, 'methodName']); + +// this handler is a static class method +$foo->on(Foo::EVENT_HELLO, ['app\components\Bar', 'methodName']); + +// this handler is an anonymous function +$foo->on(Foo::EVENT_HELLO, function ($event) { + // event handling logic +}); +``` + +You may also attach event handlers through [configurations](concept-configurations.md). For more details, please +refer to the [Configurations](concept-configurations.md#configuration-format) section. + + +When attaching an event handler, you may provide additional data as the third parameter to [[yii\base\Component::on()]]. +The data will be made available to the handler when the event is triggered and the handler is called. For example: + +```php +// The following code will display "abc" when the event is triggered +// because $event->data contains the data passed as the 3rd argument to "on" +$foo->on(Foo::EVENT_HELLO, 'function_name', 'abc'); + +function function_name($event) { + echo $event->data; +} +``` + +Event Handler Order +------------------- + +You may attach one or more handlers to a single event. When an event is triggered, the attached handlers +will be called in the order that they were attached to the event. If a handler needs to stop the invocation of the +handlers that follow it, it may set the [[yii\base\Event::handled]] property of the `$event` parameter to be `true`: + +```php +$foo->on(Foo::EVENT_HELLO, function ($event) { + $event->handled = true; +}); +``` + +By default, a newly attached handler is appended to the existing handler queue for the event. +As a result, the handler will be called in the last place when the event is triggered. +To insert the new handler at the start of the handler queue so that the handler gets called first, you may call [[yii\base\Component::on()]], passing `false` for the fourth parameter `$append`: + +```php +$foo->on(Foo::EVENT_HELLO, function ($event) { + // ... +}, $data, false); +``` + +Triggering Events +----------------- + +Events are triggered by calling the [[yii\base\Component::trigger()]] method. The method requires an *event name*, +and optionally an event object that describes the parameters to be passed to the event handlers. For example: + +```php +namespace app\components; + +use yii\base\Component; +use yii\base\Event; + +class Foo extends Component +{ + const EVENT_HELLO = 'hello'; + + public function bar() + { + $this->trigger(self::EVENT_HELLO); + } +} +``` + +With the above code, any calls to `bar()` will trigger an event named `hello`. + +> Tip: It is recommended to use class constants to represent event names. In the above example, the constant + `EVENT_HELLO` represents the `hello` event. This approach has three benefits. First, it prevents typos. Second, it can make events recognizable for IDE + auto-completion support. Third, you can tell what events are supported in a class by simply checking its constant declarations. + +Sometimes when triggering an event you may want to pass along additional information to the event handlers. +For example, a mailer may want to pass the message information to the handlers of the `messageSent` event so that the handlers +can know the particulars of the sent messages. To do so, you can provide an event object as the second parameter to +the [[yii\base\Component::trigger()]] method. The event object must be an instance of the [[yii\base\Event]] class +or a child class. For example: + +```php +namespace app\components; + +use yii\base\Component; +use yii\base\Event; + +class MessageEvent extends Event +{ + public $message; +} + +class Mailer extends Component +{ + const EVENT_MESSAGE_SENT = 'messageSent'; + + public function send($message) + { + // ...sending $message... + + $event = new MessageEvent; + $event->message = $message; + $this->trigger(self::EVENT_MESSAGE_SENT, $event); + } +} +``` + +When the [[yii\base\Component::trigger()]] method is called, it will call all handlers attached to +the named event. + + +Detaching Event Handlers +------------------------ + +To detach a handler from an event, call the [[yii\base\Component::off()]] method. For example: + +```php +// the handler is a global function +$foo->off(Foo::EVENT_HELLO, 'function_name'); + +// the handler is an object method +$foo->off(Foo::EVENT_HELLO, [$object, 'methodName']); + +// the handler is a static class method +$foo->off(Foo::EVENT_HELLO, ['app\components\Bar', 'methodName']); + +// the handler is an anonymous function +$foo->off(Foo::EVENT_HELLO, $anonymousFunction); +``` + +Note that in general you should not try to detach an anonymous function unless you store it +somewhere when it is attached to the event. In the above example, it is assumed that the anonymous +function is stored as a variable `$anonymousFunction`. + +To detach *all* handlers from an event, simply call [[yii\base\Component::off()]] without the second parameter: + +```php +$foo->off(Foo::EVENT_HELLO); +``` + + +Class-Level Event Handlers +-------------------------- + +The above subsections described how to attach a handler to an event on an *instance level*. +Sometimes, you may want to respond to an event triggered by *every* instance of a class instead of only by +a specific instance. Instead of attaching an event handler to every instance, you may attach the handler +on the *class level* by calling the static method [[yii\base\Event::on()]]. + +For example, an [Active Record](db-active-record.md) object will trigger an [[yii\db\BaseActiveRecord::EVENT_AFTER_INSERT|EVENT_AFTER_INSERT]] +event whenever it inserts a new record into the database. In order to track insertions done by *every* +[Active Record](db-active-record.md) object, you may use the following code: + +```php +use Yii; +use yii\base\Event; +use yii\db\ActiveRecord; + +Event::on(ActiveRecord::className(), ActiveRecord::EVENT_AFTER_INSERT, function ($event) { + Yii::debug(get_class($event->sender) . ' is inserted'); +}); +``` + +The event handler will be invoked whenever an instance of [[yii\db\ActiveRecord|ActiveRecord]], or one of its child classes, triggers +the [[yii\db\BaseActiveRecord::EVENT_AFTER_INSERT|EVENT_AFTER_INSERT]] event. In the handler, you can get the object +that triggered the event through `$event->sender`. + +When an object triggers an event, it will first call instance-level handlers, followed by the class-level handlers. + +You may trigger a *class-level* event by calling the static method [[yii\base\Event::trigger()]]. A class-level +event is not associated with a particular object. As a result, it will cause the invocation of class-level event +handlers only. For example: + +```php +use yii\base\Event; + +Event::on(Foo::className(), Foo::EVENT_HELLO, function ($event) { + var_dump($event->sender); // displays "null" +}); + +Event::trigger(Foo::className(), Foo::EVENT_HELLO); +``` + +Note that, in this case, `$event->sender` is `null` instead of an object instance. + +> Note: Because a class-level handler will respond to an event triggered by any instance of that class, or any child + classes, you should use it carefully, especially if the class is a low-level base class, such as [[yii\base\BaseObject]]. + +To detach a class-level event handler, call [[yii\base\Event::off()]]. For example: + +```php +// detach $handler +Event::off(Foo::className(), Foo::EVENT_HELLO, $handler); + +// detach all handlers of Foo::EVENT_HELLO +Event::off(Foo::className(), Foo::EVENT_HELLO); +``` + + +Events using interfaces +------------- + +There is even more abstract way to deal with events. You can create a separated interface for the special event and +implement it in classes, where you need it. + +For example, we can create the following interface: + +```php +namespace app\interfaces; + +interface DanceEventInterface +{ + const EVENT_DANCE = 'dance'; +} +``` + +And two classes, that implement it: + +```php +class Dog extends Component implements DanceEventInterface +{ + public function meetBuddy() + { + echo "Woof!"; + $this->trigger(DanceEventInterface::EVENT_DANCE); + } +} + +class Developer extends Component implements DanceEventInterface +{ + public function testsPassed() + { + echo "Yay!"; + $this->trigger(DanceEventInterface::EVENT_DANCE); + } +} +``` + +To handle the `EVENT_DANCE`, triggered by any of these classes, call [[yii\base\Event::on()|Event::on()]] and +pass the interface class name as the first argument: + +```php +Event::on('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE, function ($event) { + Yii::debug(get_class($event->sender) . ' just danced'); // Will log that Dog or Developer danced +}); +``` + +You can trigger the event of those classes: + +```php +// trigger event for Dog class +Event::trigger(Dog::className(), DanceEventInterface::EVENT_DANCE); + +// trigger event for Developer class +Event::trigger(Developer::className(), DanceEventInterface::EVENT_DANCE); +``` + +But please notice, that you can not trigger all the classes, that implement the interface: + +```php +// DOES NOT WORK. Classes that implement this interface will NOT be triggered. +Event::trigger('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE); +``` + +To detach event handler, call [[yii\base\Event::off()|Event::off()]]. For example: + +```php +// detaches $handler +Event::off('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE, $handler); + +// detaches all handlers of DanceEventInterface::EVENT_DANCE +Event::off('app\interfaces\DanceEventInterface', DanceEventInterface::EVENT_DANCE); +``` + + +Global Events +------------- + +Yii supports a so-called *global event*, which is actually a trick based on the event mechanism described above. +The global event requires a globally accessible Singleton, such as the [application](structure-applications.md) instance itself. + +To create the global event, an event sender calls the Singleton's `trigger()` method +to trigger the event, instead of calling the sender's own `trigger()` method. Similarly, the event handlers are attached to the event on the Singleton. For example: + +```php +use Yii; +use yii\base\Event; +use app\components\Foo; + +Yii::$app->on('bar', function ($event) { + echo get_class($event->sender); // displays "app\components\Foo" +}); + +Yii::$app->trigger('bar', new Event(['sender' => new Foo])); +``` + +A benefit of using global events is that you do not need an object when attaching a handler to the event +which will be triggered by the object. Instead, the handler attachment and the event triggering are both +done through the Singleton (e.g. the application instance). + +However, because the namespace of the global events is shared by all parties, you should name the global events +wisely, such as introducing some sort of namespace (e.g. "frontend.mail.sent", "backend.mail.sent"). + + +Wildcard Events +--------------- + +Since 2.0.14 you can setup event handler for multiple events matching wildcard pattern. +For example: + +```php +use Yii; + +$foo = new Foo(); + +$foo->on('foo.event.*', function ($event) { + // triggered for any event, which name starts on 'foo.event.' + Yii::debug('trigger event: ' . $event->name); +}); +``` + +Wildcard patterns can be used for class-level events as well. For example: + +```php +use yii\base\Event; +use Yii; + +Event::on('app\models\*', 'before*', function ($event) { + // triggered for any class in namespace 'app\models' for any event, which name starts on 'before' + Yii::debug('trigger event: ' . $event->name . ' for class: ' . get_class($event->sender)); +}); +``` + +This allows you catching all application events by single handler using following code: + +```php +use yii\base\Event; +use Yii; + +Event::on('*', '*', function ($event) { + // triggered for any event at any class + Yii::debug('trigger event: ' . $event->name); +}); +``` + +> Note: usage wildcards for event handlers setup may reduce the application performance. + It is better to be avoided if possible. + +In order to detach event handler specified by wildcard pattern, you should repeat same pattern at +[[yii\base\Component::off()]] or [[yii\base\Event::off()]] invocation. Keep in mind that passing wildcard +during detaching of event handler will detach only the handler specified for this wildcard, while handlers +attached for regular event names will remain even if they match the pattern. For example: + +```php +use Yii; + +$foo = new Foo(); + +// attach regular handler +$foo->on('event.hello', function ($event) { + echo 'direct-handler' +}); + +// attach wildcard handler +$foo->on('*', function ($event) { + echo 'wildcard-handler' +}); + +// detach wildcard handler only! +$foo->off('*'); + +$foo->trigger('event.hello'); // outputs: 'direct-handler' +``` diff --git a/docs/guide-ar/concept-properties.md b/docs/guide-ar/concept-properties.md new file mode 100644 index 0000000..01c2d44 --- /dev/null +++ b/docs/guide-ar/concept-properties.md @@ -0,0 +1,86 @@ +Properties +========== + +In PHP, class member variables are also called *properties*. These variables are part of the class definition, and are used +to represent the state of a class instance (i.e., to differentiate one instance of the class from another). +In practice, you may often want to handle the reading or writing of properties in special ways. For example, +you may want to always trim a string when it is being assigned +to a `label` property. You *could* use the following code to achieve this task: + +```php +$object->label = trim($label); +``` + +The drawback of the above code is that you would have to call `trim()` everywhere in your code where you might set the `label` +property. If, in the future, the `label` property gets a new requirement, such as the first letter must be capitalized, +you would again have to modify every bit of code that assigns a value to `label`. +The repetition of code leads to bugs, and is a practice you want to avoid as much as possible. + +To solve this problem, Yii introduces a base class called [[yii\base\BaseObject]] that supports defining properties +based on *getter* and *setter* class methods. If a class needs that functionality, it should extend from +[[yii\base\BaseObject]], or from a child class. + +> Info: Nearly every core class in the Yii framework extends from [[yii\base\BaseObject]] or a child class. + This means, that whenever you see a getter or setter in a core class, you can use it like a property. + +A getter method is a method whose name starts with the word `get`; a setter method starts with `set`. +The name after the `get` or `set` prefix defines the name of a property. For example, a getter `getLabel()` and/or +a setter `setLabel()` defines a property named `label`, as shown in the following code: + +```php +namespace app\components; + +use yii\base\BaseObject; + +class Foo extends BaseObject +{ + private $_label; + + public function getLabel() + { + return $this->_label; + } + + public function setLabel($value) + { + $this->_label = trim($value); + } +} +``` + +To be clear, the getter and setter methods create the property `label`, which in this case internally refers to a private +property named `_label`. + +Properties defined by getters and setters can be used like class member variables. The main difference is that +when such property is being read, the corresponding getter method will be called; when the property is +being assigned a value, the corresponding setter method will be called. For example: + +```php +// equivalent to $label = $object->getLabel(); +$label = $object->label; + +// equivalent to $object->setLabel('abc'); +$object->label = 'abc'; +``` + +A property defined by a getter without a setter is *read only*. Trying to assign a value to such a property will cause +an [[yii\base\InvalidCallException|InvalidCallException]]. Similarly, a property defined by a setter without a getter +is *write only*, and trying to read such a property will also cause an exception. It is not common to have write-only +properties. + +There are several special rules for, and limitations on, the properties defined via getters and setters: + +* The names of such properties are *case-insensitive*. For example, `$object->label` and `$object->Label` are the same. + This is because method names in PHP are case-insensitive. +* If the name of such a property is the same as a class member variable, the latter will take precedence. + For example, if the above `Foo` class has a member variable `label`, then the assignment `$object->label = 'abc'` + will affect the *member variable* `label`; that line would not call the `setLabel()` setter method. +* These properties do not support visibility. It makes no difference to the defining getter or setter method if the property is public, protected or private. +* The properties can only be defined by *non-static* getters and/or setters. Static methods will not be treated in the same manner. +* A normal call to `property_exists()` does not work to determine magic properties. You should call [[yii\base\BaseObject::canGetProperty()|canGetProperty()]] + or [[yii\base\BaseObject::canSetProperty()|canSetProperty()]] respectively. + +Returning back to the problem described at the beginning of this guide, instead of calling `trim()` everywhere a `label` value is assigned, +`trim()` now only needs to be invoked within the setter `setLabel()`. +And if a new requirement makes it necessary that the label be initially capitalized, the `setLabel()` method can quickly +be modified without touching any other code. The one change will universally affect every assignment to `label`. diff --git a/docs/guide-ar/concept-service-locator.md b/docs/guide-ar/concept-service-locator.md new file mode 100644 index 0000000..6308618 --- /dev/null +++ b/docs/guide-ar/concept-service-locator.md @@ -0,0 +1,131 @@ +Service Locator +=============== + +A service locator is an object that knows how to provide all sorts of services (or components) that an application +might need. Within a service locator, each component exists as only a single instance, uniquely identified by an ID. +You use the ID to retrieve a component from the service locator. + +In Yii, a service locator is simply an instance of [[yii\di\ServiceLocator]] or a child class. + +The most commonly used service locator in Yii is the *application* object, which can be accessed through +`\Yii::$app`. The services it provides are called *application components*, such as the `request`, `response`, and +`urlManager` components. You may configure these components, or even replace them with your own implementations, easily +through functionality provided by the service locator. + +Besides the application object, each module object is also a service locator. Modules implement [tree traversal](#tree-traversal). + +To use a service locator, the first step is to register components with it. A component can be registered +via [[yii\di\ServiceLocator::set()]]. The following code shows different ways of registering components: + +```php +use yii\di\ServiceLocator; +use yii\caching\FileCache; + +$locator = new ServiceLocator; + +// register "cache" using a class name that can be used to create a component +$locator->set('cache', 'yii\caching\ApcCache'); + +// register "db" using a configuration array that can be used to create a component +$locator->set('db', [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=demo', + 'username' => 'root', + 'password' => '', +]); + +// register "search" using an anonymous function that builds a component +$locator->set('search', function () { + return new app\components\SolrService; +}); + +// register "pageCache" using a component +$locator->set('pageCache', new FileCache); +``` + +Once a component has been registered, you can access it using its ID, in one of the two following ways: + +```php +$cache = $locator->get('cache'); +// or alternatively +$cache = $locator->cache; +``` + +As shown above, [[yii\di\ServiceLocator]] allows you to access a component like a property using the component ID. +When you access a component for the first time, [[yii\di\ServiceLocator]] will use the component registration +information to create a new instance of the component and return it. Later, if the component is accessed again, +the service locator will return the same instance. + +You may use [[yii\di\ServiceLocator::has()]] to check if a component ID has already been registered. +If you call [[yii\di\ServiceLocator::get()]] with an invalid ID, an exception will be thrown. + + +Because service locators are often being created with [configurations](concept-configurations.md), +a writable property named [[yii\di\ServiceLocator::setComponents()|components]] is provided. This allows you +to configure and register multiple components at once. The following code shows a configuration array +that can be used to configure a service locator (e.g. an [application](structure-applications.md)) with +the `db`, `cache`, `tz` and `search` components: + +```php +return [ + // ... + 'components' => [ + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=demo', + 'username' => 'root', + 'password' => '', + ], + 'cache' => 'yii\caching\ApcCache', + 'tz' => function() { + return new \DateTimeZone(Yii::$app->formatter->defaultTimeZone); + }, + 'search' => function () { + $solr = new app\components\SolrService('127.0.0.1'); + // ... other initializations ... + return $solr; + }, + ], +]; +``` + +In the above, there is an alternative way to configure the `search` component. Instead of directly writing a PHP +callback which builds a `SolrService` instance, you can use a static class method to return such a callback, like +shown as below: + +```php +class SolrServiceBuilder +{ + public static function build($ip) + { + return function () use ($ip) { + $solr = new app\components\SolrService($ip); + // ... other initializations ... + return $solr; + }; + } +} + +return [ + // ... + 'components' => [ + // ... + 'search' => SolrServiceBuilder::build('127.0.0.1'), + ], +]; +``` + +This alternative approach is most preferable when you are releasing a Yii component which encapsulates some non-Yii +3rd-party library. You use the static method like shown above to represent the complex logic of building the +3rd-party object, and the user of your component only needs to call the static method to configure the component. + +## Tree traversal + +Modules allow arbitrary nesting; a Yii application is essentially a tree of modules. +Since each of these modules is a service locator it makes sense for children to have access to their parent. +This allows modules to use `$this->get('db')` instead of referencing the root service locator `Yii::$app->get('db')`. +Added benefit is the option for a developer to override configuration in a module. + +Any request for a service to be retrieved from a module will be passed on to its parent in case the module is not able to satisfy it. + +Note that configuration from components in a module is never merged with configuration from a component in a parent module. The Service Locator pattern allows us to define named services but one cannot assume servicees with the same name use the same configuration parameters. diff --git a/docs/guide-ar/db-active-record.md b/docs/guide-ar/db-active-record.md new file mode 100644 index 0000000..f026b6a --- /dev/null +++ b/docs/guide-ar/db-active-record.md @@ -0,0 +1,1762 @@ +Active Record +============= + +[Active Record](http://en.wikipedia.org/wiki/Active_record_pattern) provides an object-oriented interface +for accessing and manipulating data stored in databases. An Active Record class is associated with a database table, +an Active Record instance corresponds to a row of that table, and an *attribute* of an Active Record +instance represents the value of a particular column in that row. Instead of writing raw SQL statements, +you would access Active Record attributes and call Active Record methods to access and manipulate the data stored +in database tables. + +For example, assume `Customer` is an Active Record class which is associated with the `customer` table +and `name` is a column of the `customer` table. You can write the following code to insert a new +row into the `customer` table: + +```php +$customer = new Customer(); +$customer->name = 'Qiang'; +$customer->save(); +``` + +The above code is equivalent to using the following raw SQL statement for MySQL, which is less +intuitive, more error prone, and may even have compatibility problems if you are using a different kind of database: + +```php +$db->createCommand('INSERT INTO `customer` (`name`) VALUES (:name)', [ + ':name' => 'Qiang', +])->execute(); +``` + +Yii provides the Active Record support for the following relational databases: + +* MySQL 4.1 or later: via [[yii\db\ActiveRecord]] +* PostgreSQL 7.3 or later: via [[yii\db\ActiveRecord]] +* SQLite 2 and 3: via [[yii\db\ActiveRecord]] +* Microsoft SQL Server 2008 or later: via [[yii\db\ActiveRecord]] +* Oracle: via [[yii\db\ActiveRecord]] +* CUBRID 9.3 or later: via [[yii\db\ActiveRecord]] (Note that due to a [bug](http://jira.cubrid.org/browse/APIS-658) in + the cubrid PDO extension, quoting of values will not work, so you need CUBRID 9.3 as the client as well as the server) +* Sphinx: via [[yii\sphinx\ActiveRecord]], requires the `yii2-sphinx` extension +* ElasticSearch: via [[yii\elasticsearch\ActiveRecord]], requires the `yii2-elasticsearch` extension + +Additionally, Yii also supports using Active Record with the following NoSQL databases: + +* Redis 2.6.12 or later: via [[yii\redis\ActiveRecord]], requires the `yii2-redis` extension +* MongoDB 1.3.0 or later: via [[yii\mongodb\ActiveRecord]], requires the `yii2-mongodb` extension + +In this tutorial, we will mainly describe the usage of Active Record for relational databases. +However, most content described here are also applicable to Active Record for NoSQL databases. + + +## Declaring Active Record Classes + +To get started, declare an Active Record class by extending [[yii\db\ActiveRecord]]. + +### Setting a table name + +By default each Active Record class is associated with its database table. +The [[yii\db\ActiveRecord::tableName()|tableName()]] method returns the table name by converting the class name via [[yii\helpers\Inflector::camel2id()]]. +You may override this method if the table is not named after this convention. + +Also a default [[yii\db\Connection::$tablePrefix|tablePrefix]] can be applied. For example if + [[yii\db\Connection::$tablePrefix|tablePrefix]] is `tbl_`, `Customer` becomes `tbl_customer` and `OrderItem` becomes `tbl_order_item`. + +If a table name is given as `{{%TableName}}`, then the percentage character `%` will be replaced with the table prefix. +For example, `{{%post}}` becomes `{{tbl_post}}`. The brackets around the table name are used for +[quoting in an SQL query](db-dao.md#quoting-table-and-column-names). + +In the following example, we declare an Active Record class named `Customer` for the `customer` database table. + +```php +namespace app\models; + +use yii\db\ActiveRecord; + +class Customer extends ActiveRecord +{ + const STATUS_INACTIVE = 0; + const STATUS_ACTIVE = 1; + + /** + * @return string the name of the table associated with this ActiveRecord class. + */ + public static function tableName() + { + return '{{customer}}'; + } +} +``` + +### Active records are called "models" + +Active Record instances are considered as [models](structure-models.md). For this reason, we usually put Active Record +classes under the `app\models` namespace (or other namespaces for keeping model classes). + +Because [[yii\db\ActiveRecord]] extends from [[yii\base\Model]], it inherits *all* [model](structure-models.md) features, +such as attributes, validation rules, data serialization, etc. + + +## Connecting to Databases + +By default, Active Record uses the `db` [application component](structure-application-components.md) +as the [[yii\db\Connection|DB connection]] to access and manipulate the database data. As explained in +[Database Access Objects](db-dao.md), you can configure the `db` component in the application configuration like shown +below, + +```php +return [ + 'components' => [ + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=testdb', + 'username' => 'demo', + 'password' => 'demo', + ], + ], +]; +``` + +If you want to use a different database connection other than the `db` component, you should override +the [[yii\db\ActiveRecord::getDb()|getDb()]] method: + +```php +class Customer extends ActiveRecord +{ + // ... + + public static function getDb() + { + // use the "db2" application component + return \Yii::$app->db2; + } +} +``` + + +## Querying Data + +After declaring an Active Record class, you can use it to query data from the corresponding database table. +The process usually takes the following three steps: + +1. Create a new query object by calling the [[yii\db\ActiveRecord::find()]] method; +2. Build the query object by calling [query building methods](db-query-builder.md#building-queries); +3. Call a [query method](db-query-builder.md#query-methods) to retrieve data in terms of Active Record instances. + +As you can see, this is very similar to the procedure with [query builder](db-query-builder.md). The only difference +is that instead of using the `new` operator to create a query object, you call [[yii\db\ActiveRecord::find()]] +to return a new query object which is of class [[yii\db\ActiveQuery]]. + +Below are some examples showing how to use Active Query to query data: + +```php +// return a single customer whose ID is 123 +// SELECT * FROM `customer` WHERE `id` = 123 +$customer = Customer::find() + ->where(['id' => 123]) + ->one(); + +// return all active customers and order them by their IDs +// SELECT * FROM `customer` WHERE `status` = 1 ORDER BY `id` +$customers = Customer::find() + ->where(['status' => Customer::STATUS_ACTIVE]) + ->orderBy('id') + ->all(); + +// return the number of active customers +// SELECT COUNT(*) FROM `customer` WHERE `status` = 1 +$count = Customer::find() + ->where(['status' => Customer::STATUS_ACTIVE]) + ->count(); + +// return all customers in an array indexed by customer IDs +// SELECT * FROM `customer` +$customers = Customer::find() + ->indexBy('id') + ->all(); +``` + +In the above, `$customer` is a `Customer` object while `$customers` is an array of `Customer` objects. They are +all populated with the data retrieved from the `customer` table. + +> Info: Because [[yii\db\ActiveQuery]] extends from [[yii\db\Query]], you can use *all* query building methods and + query methods as described in the Section [Query Builder](db-query-builder.md). + +Because it is a common task to query by primary key values or a set of column values, Yii provides two shortcut +methods for this purpose: + +- [[yii\db\ActiveRecord::findOne()]]: returns a single Active Record instance populated with the first row of the query result. +- [[yii\db\ActiveRecord::findAll()]]: returns an array of Active Record instances populated with *all* query result. + +Both methods can take one of the following parameter formats: + +- a scalar value: the value is treated as the desired primary key value to be looked for. Yii will determine + automatically which column is the primary key column by reading database schema information. +- an array of scalar values: the array is treated as the desired primary key values to be looked for. +- an associative array: the keys are column names and the values are the corresponding desired column values to + be looked for. Please refer to [Hash Format](db-query-builder.md#hash-format) for more details. + +The following code shows how these methods can be used: + +```php +// returns a single customer whose ID is 123 +// SELECT * FROM `customer` WHERE `id` = 123 +$customer = Customer::findOne(123); + +// returns customers whose ID is 100, 101, 123 or 124 +// SELECT * FROM `customer` WHERE `id` IN (100, 101, 123, 124) +$customers = Customer::findAll([100, 101, 123, 124]); + +// returns an active customer whose ID is 123 +// SELECT * FROM `customer` WHERE `id` = 123 AND `status` = 1 +$customer = Customer::findOne([ + 'id' => 123, + 'status' => Customer::STATUS_ACTIVE, +]); + +// returns all inactive customers +// SELECT * FROM `customer` WHERE `status` = 0 +$customers = Customer::findAll([ + 'status' => Customer::STATUS_INACTIVE, +]); +``` + +> Warning: If you need to pass user input to these methods, make sure the input value is scalar or in case of +> array condition, make sure the array structure can not be changed from the outside: +> +> ```php +> // yii\web\Controller ensures that $id is scalar +> public function actionView($id) +> { +> $model = Post::findOne($id); +> // ... +> } +> +> // explicitly specifying the column to search, passing a scalar or array here will always result in finding a single record +> $model = Post::findOne(['id' => Yii::$app->request->get('id')]); +> +> // do NOT use the following code! it is possible to inject an array condition to filter by arbitrary column values! +> $model = Post::findOne(Yii::$app->request->get('id')); +> ``` + + +> Note: Neither [[yii\db\ActiveRecord::findOne()]] nor [[yii\db\ActiveQuery::one()]] will add `LIMIT 1` to + the generated SQL statement. If your query may return many rows of data, you should call `limit(1)` explicitly + to improve the performance, e.g., `Customer::find()->limit(1)->one()`. + +Besides using query building methods, you can also write raw SQLs to query data and populate the results into +Active Record objects. You can do so by calling the [[yii\db\ActiveRecord::findBySql()]] method: + +```php +// returns all inactive customers +$sql = 'SELECT * FROM customer WHERE status=:status'; +$customers = Customer::findBySql($sql, [':status' => Customer::STATUS_INACTIVE])->all(); +``` + +Do not call extra query building methods after calling [[yii\db\ActiveRecord::findBySql()|findBySql()]] as they +will be ignored. + + +## Accessing Data + +As aforementioned, the data brought back from the database are populated into Active Record instances, and +each row of the query result corresponds to a single Active Record instance. You can access the column values +by accessing the attributes of the Active Record instances, for example, + +```php +// "id" and "email" are the names of columns in the "customer" table +$customer = Customer::findOne(123); +$id = $customer->id; +$email = $customer->email; +``` + +> Note: The Active Record attributes are named after the associated table columns in a case-sensitive manner. + Yii automatically defines an attribute in Active Record for every column of the associated table. + You should NOT redeclare any of the attributes. + +Because Active Record attributes are named after table columns, you may find you are writing PHP code like +`$customer->first_name`, which uses underscores to separate words in attribute names if your table columns are +named in this way. If you are concerned about code style consistency, you should rename your table columns accordingly +(to use camelCase, for example). + + +### Data Transformation + +It often happens that the data being entered and/or displayed are in a format which is different from the one used in +storing the data in a database. For example, in the database you are storing customers' birthdays as UNIX timestamps +(which is not a good design, though), while in most cases you would like to manipulate birthdays as strings in +the format of `'YYYY/MM/DD'`. To achieve this goal, you can define *data transformation* methods in the `Customer` +Active Record class like the following: + +```php +class Customer extends ActiveRecord +{ + // ... + + public function getBirthdayText() + { + return date('Y/m/d', $this->birthday); + } + + public function setBirthdayText($value) + { + $this->birthday = strtotime($value); + } +} +``` + +Now in your PHP code, instead of accessing `$customer->birthday`, you would access `$customer->birthdayText`, which +will allow you to input and display customer birthdays in the format of `'YYYY/MM/DD'`. + +> Tip: The above example shows a generic way of transforming data in different formats. If you are working with +> date values, you may use [DateValidator](tutorial-core-validators.md#date) and [[yii\jui\DatePicker|DatePicker]], +> which is easier to use and more powerful. + + +### Retrieving Data in Arrays + +While retrieving data in terms of Active Record objects is convenient and flexible, it is not always desirable +when you have to bring back a large amount of data due to the big memory footprint. In this case, you can retrieve +data using PHP arrays by calling [[yii\db\ActiveQuery::asArray()|asArray()]] before executing a query method: + +```php +// return all customers +// each customer is returned as an associative array +$customers = Customer::find() + ->asArray() + ->all(); +``` + +> Note: While this method saves memory and improves performance, it is closer to the lower DB abstraction layer + and you will lose most of the Active Record features. A very important distinction lies in the data type of + the column values. When you return data in Active Record instances, column values will be automatically typecast + according to the actual column types; on the other hand when you return data in arrays, column values will be + strings (since they are the result of PDO without any processing), regardless their actual column types. + + +### Retrieving Data in Batches + +In [Query Builder](db-query-builder.md), we have explained that you may use *batch query* to minimize your memory +usage when querying a large amount of data from the database. You may use the same technique in Active Record. For example, + +```php +// fetch 10 customers at a time +foreach (Customer::find()->batch(10) as $customers) { + // $customers is an array of 10 or fewer Customer objects +} + +// fetch 10 customers at a time and iterate them one by one +foreach (Customer::find()->each(10) as $customer) { + // $customer is a Customer object +} + +// batch query with eager loading +foreach (Customer::find()->with('orders')->each() as $customer) { + // $customer is a Customer object with the 'orders' relation populated +} +``` + + +## Saving Data + +Using Active Record, you can easily save data to the database by taking the following steps: + +1. Prepare an Active Record instance +2. Assign new values to Active Record attributes +3. Call [[yii\db\ActiveRecord::save()]] to save the data into database. + +For example, + +```php +// insert a new row of data +$customer = new Customer(); +$customer->name = 'James'; +$customer->email = 'james@example.com'; +$customer->save(); + +// update an existing row of data +$customer = Customer::findOne(123); +$customer->email = 'james@newexample.com'; +$customer->save(); +``` + +The [[yii\db\ActiveRecord::save()|save()]] method can either insert or update a row of data, depending on the state +of the Active Record instance. If the instance is newly created via the `new` operator, calling +[[yii\db\ActiveRecord::save()|save()]] will cause insertion of a new row; If the instance is the result of a query method, +calling [[yii\db\ActiveRecord::save()|save()]] will update the row associated with the instance. + +You can differentiate the two states of an Active Record instance by checking its +[[yii\db\ActiveRecord::isNewRecord|isNewRecord]] property value. This property is also used by +[[yii\db\ActiveRecord::save()|save()]] internally as follows: + +```php +public function save($runValidation = true, $attributeNames = null) +{ + if ($this->getIsNewRecord()) { + return $this->insert($runValidation, $attributeNames); + } else { + return $this->update($runValidation, $attributeNames) !== false; + } +} +``` + +> Tip: You can call [[yii\db\ActiveRecord::insert()|insert()]] or [[yii\db\ActiveRecord::update()|update()]] + directly to insert or update a row. + + +### Data Validation + +Because [[yii\db\ActiveRecord]] extends from [[yii\base\Model]], it shares the same [data validation](input-validation.md) feature. +You can declare validation rules by overriding the [[yii\db\ActiveRecord::rules()|rules()]] method and perform +data validation by calling the [[yii\db\ActiveRecord::validate()|validate()]] method. + +When you call [[yii\db\ActiveRecord::save()|save()]], by default it will call [[yii\db\ActiveRecord::validate()|validate()]] +automatically. Only when the validation passes, will it actually save the data; otherwise it will simply return `false`, +and you can check the [[yii\db\ActiveRecord::errors|errors]] property to retrieve the validation error messages. + +> Tip: If you are certain that your data do not need validation (e.g., the data comes from trustable sources), + you can call `save(false)` to skip the validation. + + +### Massive Assignment + +Like normal [models](structure-models.md), Active Record instances also enjoy the [massive assignment feature](structure-models.md#massive-assignment). +Using this feature, you can assign values to multiple attributes of an Active Record instance in a single PHP statement, +like shown below. Do remember that only [safe attributes](structure-models.md#safe-attributes) can be massively assigned, though. + +```php +$values = [ + 'name' => 'James', + 'email' => 'james@example.com', +]; + +$customer = new Customer(); + +$customer->attributes = $values; +$customer->save(); +``` + + +### Updating Counters + +It is a common task to increment or decrement a column in a database table. We call these columns "counter columns". +You can use [[yii\db\ActiveRecord::updateCounters()|updateCounters()]] to update one or multiple counter columns. +For example, + +```php +$post = Post::findOne(100); + +// UPDATE `post` SET `view_count` = `view_count` + 1 WHERE `id` = 100 +$post->updateCounters(['view_count' => 1]); +``` + +> Note: If you use [[yii\db\ActiveRecord::save()]] to update a counter column, you may end up with inaccurate result, + because it is likely the same counter is being saved by multiple requests which read and write the same counter value. + + +### Dirty Attributes + +When you call [[yii\db\ActiveRecord::save()|save()]] to save an Active Record instance, only *dirty attributes* +are being saved. An attribute is considered *dirty* if its value has been modified since it was loaded from DB or +saved to DB most recently. Note that data validation will be performed regardless if the Active Record +instance has dirty attributes or not. + +Active Record automatically maintains the list of dirty attributes. It does so by maintaining an older version of +the attribute values and comparing them with the latest one. You can call [[yii\db\ActiveRecord::getDirtyAttributes()]] +to get the attributes that are currently dirty. You can also call [[yii\db\ActiveRecord::markAttributeDirty()]] +to explicitly mark an attribute as dirty. + +If you are interested in the attribute values prior to their most recent modification, you may call +[[yii\db\ActiveRecord::getOldAttributes()|getOldAttributes()]] or [[yii\db\ActiveRecord::getOldAttribute()|getOldAttribute()]]. + +> Note: The comparison of old and new values will be done using the `===` operator so a value will be considered dirty +> even if it has the same value but a different type. This is often the case when the model receives user input from +> HTML forms where every value is represented as a string. +> To ensure the correct type for e.g. integer values you may apply a [validation filter](input-validation.md#data-filtering): +> `['attributeName', 'filter', 'filter' => 'intval']`. This works with all the typecasting functions of PHP like +> [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... + +### Default Attribute Values + +Some of your table columns may have default values defined in the database. Sometimes, you may want to pre-populate your +Web form for an Active Record instance with these default values. To avoid writing the same default values again, +you can call [[yii\db\ActiveRecord::loadDefaultValues()|loadDefaultValues()]] to populate the DB-defined default values +into the corresponding Active Record attributes: + +```php +$customer = new Customer(); +$customer->loadDefaultValues(); +// $customer->xyz will be assigned the default value declared when defining the "xyz" column +``` + + +### Attributes Typecasting + +Being populated by query results, [[yii\db\ActiveRecord]] performs automatic typecast for its attribute values, using +information from [database table schema](db-dao.md#database-schema). This allows data retrieved from table column +declared as integer to be populated in ActiveRecord instance with PHP integer, boolean with boolean and so on. +However, typecasting mechanism has several limitations: + +* Float values are not be converted and will be represented as strings, otherwise they may loose precision. +* Conversion of the integer values depends on the integer capacity of the operation system you use. In particular: + values of column declared as 'unsigned integer' or 'big integer' will be converted to PHP integer only at 64-bit + operation system, while on 32-bit ones - they will be represented as strings. + +Note that attribute typecast is performed only during populating ActiveRecord instance from query result. There is no +automatic conversion for the values loaded from HTTP request or set directly via property access. +The table schema will also be used while preparing SQL statements for the ActiveRecord data saving, ensuring +values are bound to the query with correct type. However, ActiveRecord instance attribute values will not be +converted during saving process. + +> Tip: you may use [[yii\behaviors\AttributeTypecastBehavior]] to facilitate attribute values typecasting + on ActiveRecord validation or saving. + +Since 2.0.14, Yii ActiveRecord supports complex data types, such as JSON or multidimensional arrays. + +#### JSON in MySQL and PostgreSQL + +After data population, the value from JSON column will be automatically decoded from JSON according to standard JSON +decoding rules. + +To save attribute value to a JSON column, ActiveRecord will automatically create a [[yii\db\JsonExpression|JsonExpression]] object +that will be encoded to a JSON string on [QueryBuilder](db-query-builder.md) level. + +#### Arrays in PostgreSQL + +After data population, the value from Array column will be automatically decoded from PgSQL notation to an [[yii\db\ArrayExpression|ArrayExpression]] +object. It implements PHP `ArrayAccess` interface, so you can use it as an array, or call `->getValue()` to get the array itself. + +To save attribute value to an array column, ActiveRecord will automatically create an [[yii\db\ArrayExpression|ArrayExpression]] object +that will be encoded by [QueryBuilder](db-query-builder.md) to an PgSQL string representation of array. + +You can also use conditions for JSON columns: + +```php +$query->andWhere(['=', 'json', new ArrayExpression(['foo' => 'bar']) +``` + +To learn more about expressions building system read the [Query Builder – Adding custom Conditions and Expressions](db-query-builder.md#adding-custom-conditions-and-expressions) +article. + +### Updating Multiple Rows + +The methods described above all work on individual Active Record instances, causing inserting or updating of individual +table rows. To update multiple rows simultaneously, you should call [[yii\db\ActiveRecord::updateAll()|updateAll()]], instead, +which is a static method. + +```php +// UPDATE `customer` SET `status` = 1 WHERE `email` LIKE `%@example.com%` +Customer::updateAll(['status' => Customer::STATUS_ACTIVE], ['like', 'email', '@example.com']); +``` + +Similarly, you can call [[yii\db\ActiveRecord::updateAllCounters()|updateAllCounters()]] to update counter columns of +multiple rows at the same time. + +```php +// UPDATE `customer` SET `age` = `age` + 1 +Customer::updateAllCounters(['age' => 1]); +``` + + +## Deleting Data + +To delete a single row of data, first retrieve the Active Record instance corresponding to that row and then call +the [[yii\db\ActiveRecord::delete()]] method. + +```php +$customer = Customer::findOne(123); +$customer->delete(); +``` + +You can call [[yii\db\ActiveRecord::deleteAll()]] to delete multiple or all rows of data. For example, + +```php +Customer::deleteAll(['status' => Customer::STATUS_INACTIVE]); +``` + +> Note: Be very careful when calling [[yii\db\ActiveRecord::deleteAll()|deleteAll()]] because it may totally + erase all data from your table if you make a mistake in specifying the condition. + + +## Active Record Life Cycles + +It is important to understand the life cycles of Active Record when it is used for different purposes. +During each life cycle, a certain sequence of methods will be invoked, and you can override these methods +to get a chance to customize the life cycle. You can also respond to certain Active Record events triggered +during a life cycle to inject your custom code. These events are especially useful when you are developing +Active Record [behaviors](concept-behaviors.md) which need to customize Active Record life cycles. + +In the following, we will summarize the various Active Record life cycles and the methods/events that are involved +in the life cycles. + + +### New Instance Life Cycle + +When creating a new Active Record instance via the `new` operator, the following life cycle will happen: + +1. Class constructor. +2. [[yii\db\ActiveRecord::init()|init()]]: triggers an [[yii\db\ActiveRecord::EVENT_INIT|EVENT_INIT]] event. + + +### Querying Data Life Cycle + +When querying data through one of the [querying methods](#querying-data), each newly populated Active Record will +undergo the following life cycle: + +1. Class constructor. +2. [[yii\db\ActiveRecord::init()|init()]]: triggers an [[yii\db\ActiveRecord::EVENT_INIT|EVENT_INIT]] event. +3. [[yii\db\ActiveRecord::afterFind()|afterFind()]]: triggers an [[yii\db\ActiveRecord::EVENT_AFTER_FIND|EVENT_AFTER_FIND]] event. + + +### Saving Data Life Cycle + +When calling [[yii\db\ActiveRecord::save()|save()]] to insert or update an Active Record instance, the following +life cycle will happen: + +1. [[yii\db\ActiveRecord::beforeValidate()|beforeValidate()]]: triggers + an [[yii\db\ActiveRecord::EVENT_BEFORE_VALIDATE|EVENT_BEFORE_VALIDATE]] event. If the method returns `false` + or [[yii\base\ModelEvent::isValid]] is `false`, the rest of the steps will be skipped. +2. Performs data validation. If data validation fails, the steps after Step 3 will be skipped. +3. [[yii\db\ActiveRecord::afterValidate()|afterValidate()]]: triggers + an [[yii\db\ActiveRecord::EVENT_AFTER_VALIDATE|EVENT_AFTER_VALIDATE]] event. +4. [[yii\db\ActiveRecord::beforeSave()|beforeSave()]]: triggers + an [[yii\db\ActiveRecord::EVENT_BEFORE_INSERT|EVENT_BEFORE_INSERT]] + or [[yii\db\ActiveRecord::EVENT_BEFORE_UPDATE|EVENT_BEFORE_UPDATE]] event. If the method returns `false` + or [[yii\base\ModelEvent::isValid]] is `false`, the rest of the steps will be skipped. +5. Performs the actual data insertion or updating. +6. [[yii\db\ActiveRecord::afterSave()|afterSave()]]: triggers + an [[yii\db\ActiveRecord::EVENT_AFTER_INSERT|EVENT_AFTER_INSERT]] + or [[yii\db\ActiveRecord::EVENT_AFTER_UPDATE|EVENT_AFTER_UPDATE]] event. + + +### Deleting Data Life Cycle + +When calling [[yii\db\ActiveRecord::delete()|delete()]] to delete an Active Record instance, the following +life cycle will happen: + +1. [[yii\db\ActiveRecord::beforeDelete()|beforeDelete()]]: triggers + an [[yii\db\ActiveRecord::EVENT_BEFORE_DELETE|EVENT_BEFORE_DELETE]] event. If the method returns `false` + or [[yii\base\ModelEvent::isValid]] is `false`, the rest of the steps will be skipped. +2. Performs the actual data deletion. +3. [[yii\db\ActiveRecord::afterDelete()|afterDelete()]]: triggers + an [[yii\db\ActiveRecord::EVENT_AFTER_DELETE|EVENT_AFTER_DELETE]] event. + + +> Note: Calling any of the following methods will NOT initiate any of the above life cycles because they work on the +> database directly and not on a record basis: +> +> - [[yii\db\ActiveRecord::updateAll()]] +> - [[yii\db\ActiveRecord::deleteAll()]] +> - [[yii\db\ActiveRecord::updateCounters()]] +> - [[yii\db\ActiveRecord::updateAllCounters()]] + +### Refreshing Data Life Cycle + +When calling [[yii\db\ActiveRecord::refresh()|refresh()]] to refresh an Active Record instance, the +[[yii\db\ActiveRecord::EVENT_AFTER_REFRESH|EVENT_AFTER_REFRESH]] event is triggered if refresh is successful and the method returns `true`. + + +## Working with Transactions + +There are two ways of using [transactions](db-dao.md#performing-transactions) while working with Active Record. + +The first way is to explicitly enclose Active Record method calls in a transactional block, like shown below, + +```php +$customer = Customer::findOne(123); + +Customer::getDb()->transaction(function($db) use ($customer) { + $customer->id = 200; + $customer->save(); + // ...other DB operations... +}); + +// or alternatively + +$transaction = Customer::getDb()->beginTransaction(); +try { + $customer->id = 200; + $customer->save(); + // ...other DB operations... + $transaction->commit(); +} catch(\Exception $e) { + $transaction->rollBack(); + throw $e; +} catch(\Throwable $e) { + $transaction->rollBack(); + throw $e; +} +``` + +> Note: in the above code we have two catch-blocks for compatibility +> with PHP 5.x and PHP 7.x. `\Exception` implements the [`\Throwable` interface](http://php.net/manual/en/class.throwable.php) +> since PHP 7.0, so you can skip the part with `\Exception` if your app uses only PHP 7.0 and higher. + +The second way is to list the DB operations that require transactional support in the [[yii\db\ActiveRecord::transactions()]] +method. For example, + +```php +class Customer extends ActiveRecord +{ + public function transactions() + { + return [ + 'admin' => self::OP_INSERT, + 'api' => self::OP_INSERT | self::OP_UPDATE | self::OP_DELETE, + // the above is equivalent to the following: + // 'api' => self::OP_ALL, + ]; + } +} +``` + +The [[yii\db\ActiveRecord::transactions()]] method should return an array whose keys are [scenario](structure-models.md#scenarios) +names and values are the corresponding operations that should be enclosed within transactions. You should use the following +constants to refer to different DB operations: + +* [[yii\db\ActiveRecord::OP_INSERT|OP_INSERT]]: insertion operation performed by [[yii\db\ActiveRecord::insert()|insert()]]; +* [[yii\db\ActiveRecord::OP_UPDATE|OP_UPDATE]]: update operation performed by [[yii\db\ActiveRecord::update()|update()]]; +* [[yii\db\ActiveRecord::OP_DELETE|OP_DELETE]]: deletion operation performed by [[yii\db\ActiveRecord::delete()|delete()]]. + +Use the `|` operators to concatenate the above constants to indicate multiple operations. You may also use the shortcut +constant [[yii\db\ActiveRecord::OP_ALL|OP_ALL]] to refer to all three operations above. + +Transactions that are created using this method will be started before calling [[yii\db\ActiveRecord::beforeSave()|beforeSave()]] +and will be committed after [[yii\db\ActiveRecord::afterSave()|afterSave()]] has run. + +## Optimistic Locks + +Optimistic locking is a way to prevent conflicts that may occur when a single row of data is being +updated by multiple users. For example, both user A and user B are editing the same wiki article +at the same time. After user A saves his edits, user B clicks on the "Save" button in an attempt to +save his edits as well. Because user B was actually working on an outdated version of the article, +it would be desirable to have a way to prevent him from saving the article and show him some hint message. + +Optimistic locking solves the above problem by using a column to record the version number of each row. +When a row is being saved with an outdated version number, a [[yii\db\StaleObjectException]] exception +will be thrown, which prevents the row from being saved. Optimistic locking is only supported when you +update or delete an existing row of data using [[yii\db\ActiveRecord::update()]] or [[yii\db\ActiveRecord::delete()]], +respectively. + +To use optimistic locking, + +1. Create a column in the DB table associated with the Active Record class to store the version number of each row. + The column should be of big integer type (in MySQL it would be `BIGINT DEFAULT 0`). +2. Override the [[yii\db\ActiveRecord::optimisticLock()]] method to return the name of this column. +3. Implement [[\yii\behaviors\OptimisticLockBehavior|OptimisticLockBehavior]] inside your model class to automatically parse its value from received requests. + Remove the version attribute from validation rules as [[\yii\behaviors\OptimisticLockBehavior|OptimisticLockBehavior]] should handle it. +4. In the Web form that takes user inputs, add a hidden field to store the current version number of the row being updated. +5. In the controller action that updates the row using Active Record, try and catch the [[yii\db\StaleObjectException]] + exception. Implement necessary business logic (e.g. merging the changes, prompting staled data) to resolve the conflict. + +For example, assume the version column is named as `version`. You can implement optimistic locking with the code like +the following. + +```php +// ------ view code ------- + +use yii\helpers\Html; + +// ...other input fields +echo Html::activeHiddenInput($model, 'version'); + + +// ------ controller code ------- + +use yii\db\StaleObjectException; + +public function actionUpdate($id) +{ + $model = $this->findModel($id); + + try { + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } catch (StaleObjectException $e) { + // logic to resolve the conflict + } +} + +// ------ model code ------- + +use yii\behaviors\OptimisticLockBehavior; + +public function behaviors() +{ + return [ + OptimisticLockBehavior::className(), + ]; +} +``` +> Note: Because [[\yii\behaviors\OptimisticLockBehavior|OptimisticLockBehavior]] will ensure the record is only saved +> if user submits a valid version number by directly parsing [[\yii\web\Request::getBodyParam()|getBodyParam()]], it +> may be useful to extend your model class and do step 2 in parent model while attaching the behavior (step 3) to the child +> class so you can have an instance dedicated to internal use while tying the other to controllers responsible of receiving +> end user inputs. Alternatively, you can implement your own logic by configuring its [[\yii\behaviors\OptimisticLockBehavior::$value|value]] property. + + +## Working with Relational Data + +Besides working with individual database tables, Active Record is also capable of bringing together related data, +making them readily accessible through the primary data. For example, the customer data is related with the order +data because one customer may have placed one or multiple orders. With appropriate declaration of this relation, +you'll be able to access a customer's order information using the expression `$customer->orders` which gives +back the customer's order information in terms of an array of `Order` Active Record instances. + + +### Declaring Relations + +To work with relational data using Active Record, you first need to declare relations in Active Record classes. +The task is as simple as declaring a *relation method* for every interested relation, like the following, + +```php +class Customer extends ActiveRecord +{ + // ... + + public function getOrders() + { + return $this->hasMany(Order::className(), ['customer_id' => 'id']); + } +} + +class Order extends ActiveRecord +{ + // ... + + public function getCustomer() + { + return $this->hasOne(Customer::className(), ['id' => 'customer_id']); + } +} +``` + +In the above code, we have declared an `orders` relation for the `Customer` class, and a `customer` relation +for the `Order` class. + +Each relation method must be named as `getXyz`. We call `xyz` (the first letter is in lower case) the *relation name*. +Note that relation names are *case sensitive*. + +While declaring a relation, you should specify the following information: + +- the multiplicity of the relation: specified by calling either [[yii\db\ActiveRecord::hasMany()|hasMany()]] + or [[yii\db\ActiveRecord::hasOne()|hasOne()]]. In the above example you may easily read in the relation + declarations that a customer has many orders while an order only has one customer. +- the name of the related Active Record class: specified as the first parameter to + either [[yii\db\ActiveRecord::hasMany()|hasMany()]] or [[yii\db\ActiveRecord::hasOne()|hasOne()]]. + A recommended practice is to call `Xyz::className()` to get the class name string so that you can receive + IDE auto-completion support as well as error detection at compiling stage. +- the link between the two types of data: specifies the column(s) through which the two types of data are related. + The array values are the columns of the primary data (represented by the Active Record class that you are declaring + relations), while the array keys are the columns of the related data. + + An easy rule to remember this is, as you see in the example above, you write the column that belongs to the related + Active Record directly next to it. You see there that `customer_id` is a property of `Order` and `id` is a property + of `Customer`. + + +### Accessing Relational Data + +After declaring relations, you can access relational data through relation names. This is just like accessing +an object [property](concept-properties.md) defined by the relation method. For this reason, we call it *relation property*. +For example, + +```php +// SELECT * FROM `customer` WHERE `id` = 123 +$customer = Customer::findOne(123); + +// SELECT * FROM `order` WHERE `customer_id` = 123 +// $orders is an array of Order objects +$orders = $customer->orders; +``` + +> Info: When you declare a relation named `xyz` via a getter method `getXyz()`, you will be able to access + `xyz` like an [object property](concept-properties.md). Note that the name is case sensitive. + +If a relation is declared with [[yii\db\ActiveRecord::hasMany()|hasMany()]], accessing this relation property +will return an array of the related Active Record instances; if a relation is declared with +[[yii\db\ActiveRecord::hasOne()|hasOne()]], accessing the relation property will return the related +Active Record instance or `null` if no related data is found. + +When you access a relation property for the first time, a SQL statement will be executed, like shown in the +above example. If the same property is accessed again, the previous result will be returned without re-executing +the SQL statement. To force re-executing the SQL statement, you should unset the relation property +first: `unset($customer->orders)`. + +> Note: While this concept looks similar to the [object property](concept-properties.md) feature, there is an +> important difference. For normal object properties the property value is of the same type as the defining getter method. +> A relation method however returns an [[yii\db\ActiveQuery]] instance, while accessing a relation property will either +> return a [[yii\db\ActiveRecord]] instance or an array of these. +> +> ```php +> $customer->orders; // is an array of `Order` objects +> $customer->getOrders(); // returns an ActiveQuery instance +> ``` +> +> This is useful for creating customized queries, which is described in the next section. + + +### Dynamic Relational Query + +Because a relation method returns an instance of [[yii\db\ActiveQuery]], you can further build this query +using query building methods before performing DB query. For example, + +```php +$customer = Customer::findOne(123); + +// SELECT * FROM `order` WHERE `customer_id` = 123 AND `subtotal` > 200 ORDER BY `id` +$orders = $customer->getOrders() + ->where(['>', 'subtotal', 200]) + ->orderBy('id') + ->all(); +``` + +Unlike accessing a relation property, each time you perform a dynamic relational query via a relation method, +a SQL statement will be executed, even if the same dynamic relational query was performed before. + +Sometimes you may even want to parametrize a relation declaration so that you can more easily perform +dynamic relational query. For example, you may declare a `bigOrders` relation as follows, + +```php +class Customer extends ActiveRecord +{ + public function getBigOrders($threshold = 100) + { + return $this->hasMany(Order::className(), ['customer_id' => 'id']) + ->where('subtotal > :threshold', [':threshold' => $threshold]) + ->orderBy('id'); + } +} +``` + +Then you will be able to perform the following relational queries: + +```php +// SELECT * FROM `order` WHERE `customer_id` = 123 AND `subtotal` > 200 ORDER BY `id` +$orders = $customer->getBigOrders(200)->all(); + +// SELECT * FROM `order` WHERE `customer_id` = 123 AND `subtotal` > 100 ORDER BY `id` +$orders = $customer->bigOrders; +``` + + +### Relations via a Junction Table + +In database modelling, when the multiplicity between two related tables is many-to-many, +a [junction table](https://en.wikipedia.org/wiki/Junction_table) is usually introduced. For example, the `order` +table and the `item` table may be related via a junction table named `order_item`. One order will then correspond +to multiple order items, while one product item will also correspond to multiple order items. + +When declaring such relations, you would call either [[yii\db\ActiveQuery::via()|via()]] or [[yii\db\ActiveQuery::viaTable()|viaTable()]] +to specify the junction table. The difference between [[yii\db\ActiveQuery::via()|via()]] and [[yii\db\ActiveQuery::viaTable()|viaTable()]] +is that the former specifies the junction table in terms of an existing relation name while the latter directly uses +the junction table. For example, + +```php +class Order extends ActiveRecord +{ + public function getItems() + { + return $this->hasMany(Item::className(), ['id' => 'item_id']) + ->viaTable('order_item', ['order_id' => 'id']); + } +} +``` + +or alternatively, + +```php +class Order extends ActiveRecord +{ + public function getOrderItems() + { + return $this->hasMany(OrderItem::className(), ['order_id' => 'id']); + } + + public function getItems() + { + return $this->hasMany(Item::className(), ['id' => 'item_id']) + ->via('orderItems'); + } +} +``` + +The usage of relations declared with a junction table is the same as that of normal relations. For example, + +```php +// SELECT * FROM `order` WHERE `id` = 100 +$order = Order::findOne(100); + +// SELECT * FROM `order_item` WHERE `order_id` = 100 +// SELECT * FROM `item` WHERE `item_id` IN (...) +// returns an array of Item objects +$items = $order->items; +``` + + +### Chaining relation definitions via multiple tables + +Its further possible to define relations via multiple tables by chaining relation definitions using [[yii\db\ActiveQuery::via()|via()]]. +Considering the examples above, we have classes `Customer`, `Order`, and `Item`. +We can add a relation to the `Customer` class that lists all items from all the orders they placed, +and name it `getPurchasedItems()`, the chaining of relations is show in the following code example: + +```php +class Customer extends ActiveRecord +{ + // ... + + public function getPurchasedItems() + { + // customer's items, matching 'id' column of `Item` to 'item_id' in OrderItem + return $this->hasMany(Item::className(), ['id' => 'item_id']) + ->via('orderItems'); + } + + public function getOrderItems() + { + // customer's order items, matching 'id' column of `Order` to 'order_id' in OrderItem + return $this->hasMany(OrderItem::className(), ['order_id' => 'id']) + ->via('orders'); + } + + public function getOrders() + { + // same as above + return $this->hasMany(Order::className(), ['customer_id' => 'id']); + } +} +``` + + +### Lazy Loading and Eager Loading + +In [Accessing Relational Data](#accessing-relational-data), we explained that you can access a relation property +of an Active Record instance like accessing a normal object property. A SQL statement will be executed only when +you access the relation property the first time. We call such relational data accessing method *lazy loading*. +For example, + +```php +// SELECT * FROM `customer` WHERE `id` = 123 +$customer = Customer::findOne(123); + +// SELECT * FROM `order` WHERE `customer_id` = 123 +$orders = $customer->orders; + +// no SQL executed +$orders2 = $customer->orders; +``` + +Lazy loading is very convenient to use. However, it may suffer from a performance issue when you need to access +the same relation property of multiple Active Record instances. Consider the following code example. How many +SQL statements will be executed? + +```php +// SELECT * FROM `customer` LIMIT 100 +$customers = Customer::find()->limit(100)->all(); + +foreach ($customers as $customer) { + // SELECT * FROM `order` WHERE `customer_id` = ... + $orders = $customer->orders; +} +``` + +As you can see from the code comment above, there are 101 SQL statements being executed! This is because each +time you access the `orders` relation property of a different `Customer` object in the for-loop, a SQL statement +will be executed. + +To solve this performance problem, you can use the so-called *eager loading* approach as shown below, + +```php +// SELECT * FROM `customer` LIMIT 100; +// SELECT * FROM `orders` WHERE `customer_id` IN (...) +$customers = Customer::find() + ->with('orders') + ->limit(100) + ->all(); + +foreach ($customers as $customer) { + // no SQL executed + $orders = $customer->orders; +} +``` + +By calling [[yii\db\ActiveQuery::with()]], you instruct Active Record to bring back the orders for the first 100 +customers in one single SQL statement. As a result, you reduce the number of the executed SQL statements from 101 to 2! + +You can eagerly load one or multiple relations. You can even eagerly load *nested relations*. A nested relation is a relation +that is declared within a related Active Record class. For example, `Customer` is related with `Order` through the `orders` +relation, and `Order` is related with `Item` through the `items` relation. When querying for `Customer`, you can eagerly +load `items` using the nested relation notation `orders.items`. + +The following code shows different usage of [[yii\db\ActiveQuery::with()|with()]]. We assume the `Customer` class +has two relations `orders` and `country`, while the `Order` class has one relation `items`. + +```php +// eager loading both "orders" and "country" +$customers = Customer::find()->with('orders', 'country')->all(); +// equivalent to the array syntax below +$customers = Customer::find()->with(['orders', 'country'])->all(); +// no SQL executed +$orders= $customers[0]->orders; +// no SQL executed +$country = $customers[0]->country; + +// eager loading "orders" and the nested relation "orders.items" +$customers = Customer::find()->with('orders.items')->all(); +// access the items of the first order of the first customer +// no SQL executed +$items = $customers[0]->orders[0]->items; +``` + +You can eagerly load deeply nested relations, such as `a.b.c.d`. All parent relations will be eagerly loaded. +That is, when you call [[yii\db\ActiveQuery::with()|with()]] using `a.b.c.d`, you will eagerly load +`a`, `a.b`, `a.b.c` and `a.b.c.d`. + +> Info: In general, when eagerly loading `N` relations among which `M` relations are defined with a + [junction table](#junction-table), a total number of `N+M+1` SQL statements will be executed. + Note that a nested relation `a.b.c.d` counts as 4 relations. + +When eagerly loading a relation, you can customize the corresponding relational query using an anonymous function. +For example, + +```php +// find customers and bring back together their country and active orders +// SELECT * FROM `customer` +// SELECT * FROM `country` WHERE `id` IN (...) +// SELECT * FROM `order` WHERE `customer_id` IN (...) AND `status` = 1 +$customers = Customer::find()->with([ + 'country', + 'orders' => function ($query) { + $query->andWhere(['status' => Order::STATUS_ACTIVE]); + }, +])->all(); +``` + +When customizing the relational query for a relation, you should specify the relation name as an array key +and use an anonymous function as the corresponding array value. The anonymous function will receive a `$query` parameter +which represents the [[yii\db\ActiveQuery]] object used to perform the relational query for the relation. +In the code example above, we are modifying the relational query by appending an additional condition about order status. + +> Note: If you call [[yii\db\Query::select()|select()]] while eagerly loading relations, you have to make sure +> the columns referenced in the relation declarations are being selected. Otherwise, the related models may not +> be loaded properly. For example, +> +> ```php +> $orders = Order::find()->select(['id', 'amount'])->with('customer')->all(); +> // $orders[0]->customer is always `null`. To fix the problem, you should do the following: +> $orders = Order::find()->select(['id', 'amount', 'customer_id'])->with('customer')->all(); +> ``` + + +### Joining with Relations + +> Note: The content described in this subsection is only applicable to relational databases, such as + MySQL, PostgreSQL, etc. + +The relational queries that we have described so far only reference the primary table columns when +querying for the primary data. In reality we often need to reference columns in the related tables. For example, +we may want to bring back the customers who have at least one active order. To solve this problem, we can +build a join query like the following: + +```php +// SELECT `customer`.* FROM `customer` +// LEFT JOIN `order` ON `order`.`customer_id` = `customer`.`id` +// WHERE `order`.`status` = 1 +// +// SELECT * FROM `order` WHERE `customer_id` IN (...) +$customers = Customer::find() + ->select('customer.*') + ->leftJoin('order', '`order`.`customer_id` = `customer`.`id`') + ->where(['order.status' => Order::STATUS_ACTIVE]) + ->with('orders') + ->all(); +``` + +> Note: It is important to disambiguate column names when building relational queries involving JOIN SQL statements. + A common practice is to prefix column names with their corresponding table names. + +However, a better approach is to exploit the existing relation declarations by calling [[yii\db\ActiveQuery::joinWith()]]: + +```php +$customers = Customer::find() + ->joinWith('orders') + ->where(['order.status' => Order::STATUS_ACTIVE]) + ->all(); +``` + +Both approaches execute the same set of SQL statements. The latter approach is much cleaner and drier, though. + +By default, [[yii\db\ActiveQuery::joinWith()|joinWith()]] will use `LEFT JOIN` to join the primary table with the +related table. You can specify a different join type (e.g. `RIGHT JOIN`) via its third parameter `$joinType`. If +the join type you want is `INNER JOIN`, you can simply call [[yii\db\ActiveQuery::innerJoinWith()|innerJoinWith()]], instead. + +Calling [[yii\db\ActiveQuery::joinWith()|joinWith()]] will [eagerly load](#lazy-eager-loading) the related data by default. +If you do not want to bring in the related data, you can specify its second parameter `$eagerLoading` as `false`. + +> Note: Even when using [[yii\db\ActiveQuery::joinWith()|joinWith()]] or [[yii\db\ActiveQuery::innerJoinWith()|innerJoinWith()]] + with eager loading enabled the related data will **not** be populated from the result of the `JOIN` query. So there's + still an extra query for each joined relation as explained in the section on [eager loading](#lazy-eager-loading). + +Like [[yii\db\ActiveQuery::with()|with()]], you can join with one or multiple relations; you may customize the relation +queries on-the-fly; you may join with nested relations; and you may mix the use of [[yii\db\ActiveQuery::with()|with()]] +and [[yii\db\ActiveQuery::joinWith()|joinWith()]]. For example, + +```php +$customers = Customer::find()->joinWith([ + 'orders' => function ($query) { + $query->andWhere(['>', 'subtotal', 100]); + }, +])->with('country') + ->all(); +``` + +Sometimes when joining two tables, you may need to specify some extra conditions in the `ON` part of the JOIN query. +This can be done by calling the [[yii\db\ActiveQuery::onCondition()]] method like the following: + +```php +// SELECT `customer`.* FROM `customer` +// LEFT JOIN `order` ON `order`.`customer_id` = `customer`.`id` AND `order`.`status` = 1 +// +// SELECT * FROM `order` WHERE `customer_id` IN (...) +$customers = Customer::find()->joinWith([ + 'orders' => function ($query) { + $query->onCondition(['order.status' => Order::STATUS_ACTIVE]); + }, +])->all(); +``` + +This above query brings back *all* customers, and for each customer it brings back all active orders. +Note that this differs from our earlier example which only brings back customers who have at least one active order. + +> Info: When [[yii\db\ActiveQuery]] is specified with a condition via [[yii\db\ActiveQuery::onCondition()|onCondition()]], + the condition will be put in the `ON` part if the query involves a JOIN query. If the query does not involve + JOIN, the on-condition will be automatically appended to the `WHERE` part of the query. + Thus it may only contain conditions including columns of the related table. + +#### Relation table aliases + +As noted before, when using JOIN in a query, we need to disambiguate column names. Therefor often an alias is +defined for a table. Setting an alias for the relational query would be possible by customizing the relation query in the following way: + +```php +$query->joinWith([ + 'orders' => function ($q) { + $q->from(['o' => Order::tableName()]); + }, +]) +``` + +This however looks very complicated and involves either hardcoding the related objects table name or calling `Order::tableName()`. +Since version 2.0.7, Yii provides a shortcut for this. You may now define and use the alias for the relation table like the following: + +```php +// join the orders relation and sort the result by orders.id +$query->joinWith(['orders o'])->orderBy('o.id'); +``` + +The above syntax works for simple relations. If you need an alias for an intermediate table when joining over +nested relations, e.g. `$query->joinWith(['orders.product'])`, +you need to nest the joinWith calls like in the following example: + +```php +$query->joinWith(['orders o' => function($q) { + $q->joinWith('product p'); + }]) + ->where('o.amount > 100'); +``` + +### Inverse Relations + +Relation declarations are often reciprocal between two Active Record classes. For example, `Customer` is related +to `Order` via the `orders` relation, and `Order` is related back to `Customer` via the `customer` relation. + +```php +class Customer extends ActiveRecord +{ + public function getOrders() + { + return $this->hasMany(Order::className(), ['customer_id' => 'id']); + } +} + +class Order extends ActiveRecord +{ + public function getCustomer() + { + return $this->hasOne(Customer::className(), ['id' => 'customer_id']); + } +} +``` + +Now consider the following piece of code: + +```php +// SELECT * FROM `customer` WHERE `id` = 123 +$customer = Customer::findOne(123); + +// SELECT * FROM `order` WHERE `customer_id` = 123 +$order = $customer->orders[0]; + +// SELECT * FROM `customer` WHERE `id` = 123 +$customer2 = $order->customer; + +// displays "not the same" +echo $customer2 === $customer ? 'same' : 'not the same'; +``` + +We would think `$customer` and `$customer2` are the same, but they are not! Actually they do contain the same +customer data, but they are different objects. When accessing `$order->customer`, an extra SQL statement +is executed to populate a new object `$customer2`. + +To avoid the redundant execution of the last SQL statement in the above example, we should tell Yii that +`customer` is an *inverse relation* of `orders` by calling the [[yii\db\ActiveQuery::inverseOf()|inverseOf()]] method +like shown below: + +```php +class Customer extends ActiveRecord +{ + public function getOrders() + { + return $this->hasMany(Order::className(), ['customer_id' => 'id'])->inverseOf('customer'); + } +} +``` + +With this modified relation declaration, we will have: + +```php +// SELECT * FROM `customer` WHERE `id` = 123 +$customer = Customer::findOne(123); + +// SELECT * FROM `order` WHERE `customer_id` = 123 +$order = $customer->orders[0]; + +// No SQL will be executed +$customer2 = $order->customer; + +// displays "same" +echo $customer2 === $customer ? 'same' : 'not the same'; +``` + +> Note: Inverse relations cannot be defined for relations involving a [junction table](#junction-table). + That is, if a relation is defined with [[yii\db\ActiveQuery::via()|via()]] or [[yii\db\ActiveQuery::viaTable()|viaTable()]], + you should not call [[yii\db\ActiveQuery::inverseOf()|inverseOf()]] further. + + +## Saving Relations + +When working with relational data, you often need to establish relationships between different data or destroy +existing relationships. This requires setting proper values for the columns that define the relations. Using Active Record, +you may end up writing the code like the following: + +```php +$customer = Customer::findOne(123); +$order = new Order(); +$order->subtotal = 100; +// ... + +// setting the attribute that defines the "customer" relation in Order +$order->customer_id = $customer->id; +$order->save(); +``` + +Active Record provides the [[yii\db\ActiveRecord::link()|link()]] method that allows you to accomplish this task more nicely: + +```php +$customer = Customer::findOne(123); +$order = new Order(); +$order->subtotal = 100; +// ... + +$order->link('customer', $customer); +``` + +The [[yii\db\ActiveRecord::link()|link()]] method requires you to specify the relation name and the target Active Record +instance that the relationship should be established with. The method will modify the values of the attributes that +link two Active Record instances and save them to the database. In the above example, it will set the `customer_id` +attribute of the `Order` instance to be the value of the `id` attribute of the `Customer` instance and then save it +to the database. + +> Note: You cannot link two newly created Active Record instances. + +The benefit of using [[yii\db\ActiveRecord::link()|link()]] is even more obvious when a relation is defined via +a [junction table](#junction-table). For example, you may use the following code to link an `Order` instance +with an `Item` instance: + +```php +$order->link('items', $item); +``` + +The above code will automatically insert a row in the `order_item` junction table to relate the order with the item. + +> Info: The [[yii\db\ActiveRecord::link()|link()]] method will NOT perform any data validation while + saving the affected Active Record instance. It is your responsibility to validate any input data before + calling this method. + +The opposite operation to [[yii\db\ActiveRecord::link()|link()]] is [[yii\db\ActiveRecord::unlink()|unlink()]] +which breaks an existing relationship between two Active Record instances. For example, + +```php +$customer = Customer::find()->with('orders')->where(['id' => 123])->one(); +$customer->unlink('orders', $customer->orders[0]); +``` + +By default, the [[yii\db\ActiveRecord::unlink()|unlink()]] method will set the foreign key value(s) that specify +the existing relationship to be `null`. You may, however, choose to delete the table row that contains the foreign key value +by passing the `$delete` parameter as `true` to the method. + +When a junction table is involved in a relation, calling [[yii\db\ActiveRecord::unlink()|unlink()]] will cause +the foreign keys in the junction table to be cleared, or the deletion of the corresponding row in the junction table +if `$delete` is `true`. + + +## Cross-Database Relations + +Active Record allows you to declare relations between Active Record classes that are powered by different databases. +The databases can be of different types (e.g. MySQL and PostgreSQL, or MS SQL and MongoDB), and they can run on +different servers. You can use the same syntax to perform relational queries. For example, + +```php +// Customer is associated with the "customer" table in a relational database (e.g. MySQL) +class Customer extends \yii\db\ActiveRecord +{ + public static function tableName() + { + return 'customer'; + } + + public function getComments() + { + // a customer has many comments + return $this->hasMany(Comment::className(), ['customer_id' => 'id']); + } +} + +// Comment is associated with the "comment" collection in a MongoDB database +class Comment extends \yii\mongodb\ActiveRecord +{ + public static function collectionName() + { + return 'comment'; + } + + public function getCustomer() + { + // a comment has one customer + return $this->hasOne(Customer::className(), ['id' => 'customer_id']); + } +} + +$customers = Customer::find()->with('comments')->all(); +``` + +You can use most of the relational query features that have been described in this section. + +> Note: Usage of [[yii\db\ActiveQuery::joinWith()|joinWith()]] is limited to databases that allow cross-database JOIN queries. + For this reason, you cannot use this method in the above example because MongoDB does not support JOIN. + + +## Customizing Query Classes + +By default, all Active Record queries are supported by [[yii\db\ActiveQuery]]. To use a customized query class +in an Active Record class, you should override the [[yii\db\ActiveRecord::find()]] method and return an instance +of your customized query class. For example, + +```php +// file Comment.php +namespace app\models; + +use yii\db\ActiveRecord; + +class Comment extends ActiveRecord +{ + public static function find() + { + return new CommentQuery(get_called_class()); + } +} +``` + +Now whenever you are performing a query (e.g. `find()`, `findOne()`) or defining a relation (e.g. `hasOne()`) +with `Comment`, you will be calling an instance of `CommentQuery` instead of `ActiveQuery`. + +You now have to define the `CommentQuery` class, which can be customized in many creative ways to improve your query building experience. For example, + +```php +// file CommentQuery.php +namespace app\models; + +use yii\db\ActiveQuery; + +class CommentQuery extends ActiveQuery +{ + // conditions appended by default (can be skipped) + public function init() + { + $this->andOnCondition(['deleted' => false]); + parent::init(); + } + + // ... add customized query methods here ... + + public function active($state = true) + { + return $this->andOnCondition(['active' => $state]); + } +} +``` + +> Note: Instead of calling [[yii\db\ActiveQuery::onCondition()|onCondition()]], you usually should call + [[yii\db\ActiveQuery::andOnCondition()|andOnCondition()]] or [[yii\db\ActiveQuery::orOnCondition()|orOnCondition()]] + to append additional conditions when defining new query building methods so that any existing conditions are not overwritten. + +This allows you to write query building code like the following: + +```php +$comments = Comment::find()->active()->all(); +$inactiveComments = Comment::find()->active(false)->all(); +``` + +> Tip: In big projects, it is recommended that you use customized query classes to hold most query-related code + so that the Active Record classes can be kept clean. + +You can also use the new query building methods when defining relations about `Comment` or performing relational query: + +```php +class Customer extends \yii\db\ActiveRecord +{ + public function getActiveComments() + { + return $this->hasMany(Comment::className(), ['customer_id' => 'id'])->active(); + } +} + +$customers = Customer::find()->joinWith('activeComments')->all(); + +// or alternatively +class Customer extends \yii\db\ActiveRecord +{ + public function getComments() + { + return $this->hasMany(Comment::className(), ['customer_id' => 'id']); + } +} + +$customers = Customer::find()->joinWith([ + 'comments' => function($q) { + $q->active(); + } +])->all(); +``` + +> Info: In Yii 1.1, there is a concept called *scope*. Scope is no longer directly supported in Yii 2.0, + and you should use customized query classes and query methods to achieve the same goal. + + +## Selecting extra fields + +When Active Record instance is populated from query results, its attributes are filled up by corresponding column +values from received data set. + +You are able to fetch additional columns or values from query and store it inside the Active Record. +For example, assume we have a table named `room`, which contains information about rooms available in the hotel. +Each room stores information about its geometrical size using fields `length`, `width`, `height`. +Imagine we need to retrieve list of all available rooms with their volume in descendant order. +So you can not calculate volume using PHP, because we need to sort the records by its value, but you also want `volume` +to be displayed in the list. +To achieve the goal, you need to declare an extra field in your `Room` Active Record class, which will store `volume` value: + +```php +class Room extends \yii\db\ActiveRecord +{ + public $volume; + + // ... +} +``` + +Then you need to compose a query, which calculates volume of the room and performs the sort: + +```php +$rooms = Room::find() + ->select([ + '{{room}}.*', // select all columns + '([[length]] * [[width]] * [[height]]) AS volume', // calculate a volume + ]) + ->orderBy('volume DESC') // apply sort + ->all(); + +foreach ($rooms as $room) { + echo $room->volume; // contains value calculated by SQL +} +``` + +Ability to select extra fields can be exceptionally useful for aggregation queries. +Assume you need to display a list of customers with the count of orders they have made. +First of all, you need to declare a `Customer` class with `orders` relation and extra field for count storage: + +```php +class Customer extends \yii\db\ActiveRecord +{ + public $ordersCount; + + // ... + + public function getOrders() + { + return $this->hasMany(Order::className(), ['customer_id' => 'id']); + } +} +``` + +Then you can compose a query, which joins the orders and calculates their count: + +```php +$customers = Customer::find() + ->select([ + '{{customer}}.*', // select all customer fields + 'COUNT({{order}}.id) AS ordersCount' // calculate orders count + ]) + ->joinWith('orders') // ensure table junction + ->groupBy('{{customer}}.id') // group the result to ensure aggregation function works + ->all(); +``` + +A disadvantage of using this method would be that, if the information isn't loaded on the SQL query - it has to be calculated +separately. Thus, if you have found particular record via regular query without extra select statements, it +will be unable to return actual value for the extra field. Same will happen for the newly saved record. + +```php +$room = new Room(); +$room->length = 100; +$room->width = 50; +$room->height = 2; + +$room->volume; // this value will be `null`, since it was not declared yet +``` + +Using the [[yii\db\BaseActiveRecord::__get()|__get()]] and [[yii\db\BaseActiveRecord::__set()|__set()]] magic methods +we can emulate the behavior of a property: + +```php +class Room extends \yii\db\ActiveRecord +{ + private $_volume; + + public function setVolume($volume) + { + $this->_volume = (float) $volume; + } + + public function getVolume() + { + if (empty($this->length) || empty($this->width) || empty($this->height)) { + return null; + } + + if ($this->_volume === null) { + $this->setVolume( + $this->length * $this->width * $this->height + ); + } + + return $this->_volume; + } + + // ... +} +``` + +When the select query doesn't provide the volume, the model will be able to calculate it automatically using +the attributes of the model. + +You can calculate the aggregation fields as well using defined relations: + +```php +class Customer extends \yii\db\ActiveRecord +{ + private $_ordersCount; + + public function setOrdersCount($count) + { + $this->_ordersCount = (int) $count; + } + + public function getOrdersCount() + { + if ($this->isNewRecord) { + return null; // this avoid calling a query searching for null primary keys + } + + if ($this->_ordersCount === null) { + $this->setOrdersCount($this->getOrders()->count()); // calculate aggregation on demand from relation + } + + return $this->_ordersCount; + } + + // ... + + public function getOrders() + { + return $this->hasMany(Order::className(), ['customer_id' => 'id']); + } +} +``` + +With this code, in case 'ordersCount' is present in 'select' statement - `Customer::ordersCount` will be populated +by query results, otherwise it will be calculated on demand using `Customer::orders` relation. + +This approach can be as well used for creation of the shortcuts for some relational data, especially for the aggregation. +For example: + +```php +class Customer extends \yii\db\ActiveRecord +{ + /** + * Defines read-only virtual property for aggregation data. + */ + public function getOrdersCount() + { + if ($this->isNewRecord) { + return null; // this avoid calling a query searching for null primary keys + } + + return empty($this->ordersAggregation) ? 0 : $this->ordersAggregation[0]['counted']; + } + + /** + * Declares normal 'orders' relation. + */ + public function getOrders() + { + return $this->hasMany(Order::className(), ['customer_id' => 'id']); + } + + /** + * Declares new relation based on 'orders', which provides aggregation. + */ + public function getOrdersAggregation() + { + return $this->getOrders() + ->select(['customer_id', 'counted' => 'count(*)']) + ->groupBy('customer_id') + ->asArray(true); + } + + // ... +} + +foreach (Customer::find()->with('ordersAggregation')->all() as $customer) { + echo $customer->ordersCount; // outputs aggregation data from relation without extra query due to eager loading +} + +$customer = Customer::findOne($pk); +$customer->ordersCount; // output aggregation data from lazy loaded relation +``` diff --git a/docs/guide-ar/db-dao.md b/docs/guide-ar/db-dao.md new file mode 100644 index 0000000..ad55f61 --- /dev/null +++ b/docs/guide-ar/db-dao.md @@ -0,0 +1,680 @@ +Database Access Objects +======================= + +Built on top of [PDO](http://www.php.net/manual/en/book.pdo.php), Yii DAO (Database Access Objects) provides an +object-oriented API for accessing relational databases. It is the foundation for other more advanced database +access methods, including [query builder](db-query-builder.md) and [active record](db-active-record.md). + +When using Yii DAO, you mainly need to deal with plain SQLs and PHP arrays. As a result, it is the most efficient +way to access databases. However, because SQL syntax may vary for different databases, using Yii DAO also means +you have to take extra effort to create a database-agnostic application. + +In Yii 2.0, DAO supports the following databases out of the box: + +- [MySQL](http://www.mysql.com/) +- [MariaDB](https://mariadb.com/) +- [SQLite](http://sqlite.org/) +- [PostgreSQL](http://www.postgresql.org/): version 8.4 or higher +- [CUBRID](http://www.cubrid.org/): version 9.3 or higher. +- [Oracle](http://www.oracle.com/us/products/database/overview/index.html) +- [MSSQL](https://www.microsoft.com/en-us/sqlserver/default.aspx): version 2008 or higher. + +> Info: In Yii 2.1 and later, the DAO supports for CUBRID, Oracle and MSSQL are no longer provided as the built-in + core components of the framework. They have to be installed as the separated [extensions](structure-extensions.md). + There are [yiisoft/yii2-oracle](https://www.yiiframework.com/extension/yiisoft/yii2-oracle) and + [yiisoft/yii2-mssql](https://www.yiiframework.com/extension/yiisoft/yii2-mssql) in the + [official extensions](https://www.yiiframework.com/extensions/official). + +> Note: New version of pdo_oci for PHP 7 currently exists only as the source code. Follow + [instruction provided by community](https://github.com/yiisoft/yii2/issues/10975#issuecomment-248479268) + to compile it or use [PDO emulation layer](https://github.com/taq/pdooci). + +## Creating DB Connections + +To access a database, you first need to connect to it by creating an instance of [[yii\db\Connection]]: + +```php +$db = new yii\db\Connection([ + 'dsn' => 'mysql:host=localhost;dbname=example', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', +]); +``` + +Because a DB connection often needs to be accessed in different places, a common practice is to configure it +in terms of an [application component](structure-application-components.md) like the following: + +```php +return [ + // ... + 'components' => [ + // ... + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=example', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', + ], + ], + // ... +]; +``` + +You can then access the DB connection via the expression `Yii::$app->db`. + +> Tip: You can configure multiple DB application components if your application needs to access multiple databases. + +When configuring a DB connection, you should always specify its Data Source Name (DSN) via the [[yii\db\Connection::dsn|dsn]] +property. The format of DSN varies for different databases. Please refer to the [PHP manual](http://www.php.net/manual/en/function.PDO-construct.php) +for more details. Below are some examples: + +* MySQL, MariaDB: `mysql:host=localhost;dbname=mydatabase` +* SQLite: `sqlite:/path/to/database/file` +* PostgreSQL: `pgsql:host=localhost;port=5432;dbname=mydatabase` +* CUBRID: `cubrid:dbname=demodb;host=localhost;port=33000` +* MS SQL Server (via sqlsrv driver): `sqlsrv:Server=localhost;Database=mydatabase` +* MS SQL Server (via dblib driver): `dblib:host=localhost;dbname=mydatabase` +* MS SQL Server (via mssql driver): `mssql:host=localhost;dbname=mydatabase` +* Oracle: `oci:dbname=//localhost:1521/mydatabase` + +Note that if you are connecting with a database via ODBC, you should configure the [[yii\db\Connection::driverName]] +property so that Yii can know the actual database type. For example, + +```php +'db' => [ + 'class' => 'yii\db\Connection', + 'driverName' => 'mysql', + 'dsn' => 'odbc:Driver={MySQL};Server=localhost;Database=test', + 'username' => 'root', + 'password' => '', +], +``` + +Besides the [[yii\db\Connection::dsn|dsn]] property, you often need to configure [[yii\db\Connection::username|username]] +and [[yii\db\Connection::password|password]]. Please refer to [[yii\db\Connection]] for the full list of configurable properties. + +> Info: When you create a DB connection instance, the actual connection to the database is not established until + you execute the first SQL or you call the [[yii\db\Connection::open()|open()]] method explicitly. + +> Tip: Sometimes you may want to execute some queries right after the database connection is established to initialize +> some environment variables (e.g., to set the timezone or character set). You can do so by registering an event handler +> for the [[yii\db\Connection::EVENT_AFTER_OPEN|afterOpen]] event +> of the database connection. You may register the handler directly in the application configuration like so: +> +> ```php +> 'db' => [ +> // ... +> 'on afterOpen' => function($event) { +> // $event->sender refers to the DB connection +> $event->sender->createCommand("SET time_zone = 'UTC'")->execute(); +> } +> ], +> ``` + + +## Executing SQL Queries + +Once you have a database connection instance, you can execute a SQL query by taking the following steps: + +1. Create a [[yii\db\Command]] with a plain SQL query; +2. Bind parameters (optional); +3. Call one of the SQL execution methods in [[yii\db\Command]]. + +The following example shows various ways of fetching data from a database: + +```php +// return a set of rows. each row is an associative array of column names and values. +// an empty array is returned if the query returned no results +$posts = Yii::$app->db->createCommand('SELECT * FROM post') + ->queryAll(); + +// return a single row (the first row) +// false is returned if the query has no result +$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=1') + ->queryOne(); + +// return a single column (the first column) +// an empty array is returned if the query returned no results +$titles = Yii::$app->db->createCommand('SELECT title FROM post') + ->queryColumn(); + +// return a scalar value +// false is returned if the query has no result +$count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM post') + ->queryScalar(); +``` + +> Note: To preserve precision, the data fetched from databases are all represented as strings, even if the corresponding + database column types are numerical. + + +### Binding Parameters + +When creating a DB command from a SQL with parameters, you should almost always use the approach of binding parameters +to prevent SQL injection attacks. For example, + +```php +$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status') + ->bindValue(':id', $_GET['id']) + ->bindValue(':status', 1) + ->queryOne(); +``` + +In the SQL statement, you can embed one or multiple parameter placeholders (e.g. `:id` in the above example). A parameter +placeholder should be a string starting with a colon. You may then call one of the following parameter binding methods +to bind the parameter values: + +* [[yii\db\Command::bindValue()|bindValue()]]: bind a single parameter value +* [[yii\db\Command::bindValues()|bindValues()]]: bind multiple parameter values in one call +* [[yii\db\Command::bindParam()|bindParam()]]: similar to [[yii\db\Command::bindValue()|bindValue()]] but also + support binding parameter references. + +The following example shows alternative ways of binding parameters: + +```php +$params = [':id' => $_GET['id'], ':status' => 1]; + +$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status') + ->bindValues($params) + ->queryOne(); + +$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status', $params) + ->queryOne(); +``` + +Parameter binding is implemented via [prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php). +Besides preventing SQL injection attacks, it may also improve performance by preparing a SQL statement once and +executing it multiple times with different parameters. For example, + +```php +$command = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id'); + +$post1 = $command->bindValue(':id', 1)->queryOne(); +$post2 = $command->bindValue(':id', 2)->queryOne(); +// ... +``` + +Because [[yii\db\Command::bindParam()|bindParam()]] supports binding parameters by references, the above code +can also be written like the following: + +```php +$command = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id') + ->bindParam(':id', $id); + +$id = 1; +$post1 = $command->queryOne(); + +$id = 2; +$post2 = $command->queryOne(); +// ... +``` + +Notice that you bind the placeholder to the `$id` variable before the execution, and then change the value of that variable +before each subsequent execution (this is often done with loops). Executing queries in this manner can be vastly +more efficient than running a new query for every different parameter value. + +> Info: Parameter binding is only used in places where values need to be inserted into strings that contain plain SQL. +> In many places in higher abstraction layers like [query builder](db-query-builder.md) and [active record](db-active-record.md) +> you often specify an array of values which will be transformed into SQL. In these places parameter binding is done by Yii +> internally, so there is no need to specify params manually. + + +### Executing Non-SELECT Queries + +The `queryXyz()` methods introduced in the previous sections all deal with SELECT queries which fetch data from databases. +For queries that do not bring back data, you should call the [[yii\db\Command::execute()]] method instead. For example, + +```php +Yii::$app->db->createCommand('UPDATE post SET status=1 WHERE id=1') + ->execute(); +``` + +The [[yii\db\Command::execute()]] method returns the number of rows affected by the SQL execution. + +For INSERT, UPDATE and DELETE queries, instead of writing plain SQLs, you may call [[yii\db\Command::insert()|insert()]], +[[yii\db\Command::update()|update()]], [[yii\db\Command::delete()|delete()]], respectively, to build the corresponding +SQLs. These methods will properly quote table and column names and bind parameter values. For example, + +```php +// INSERT (table name, column values) +Yii::$app->db->createCommand()->insert('user', [ + 'name' => 'Sam', + 'age' => 30, +])->execute(); + +// UPDATE (table name, column values, condition) +Yii::$app->db->createCommand()->update('user', ['status' => 1], 'age > 30')->execute(); + +// DELETE (table name, condition) +Yii::$app->db->createCommand()->delete('user', 'status = 0')->execute(); +``` + +You may also call [[yii\db\Command::batchInsert()|batchInsert()]] to insert multiple rows in one shot, which is much +more efficient than inserting one row at a time: + +```php +// table name, column names, column values +Yii::$app->db->createCommand()->batchInsert('user', ['name', 'age'], [ + ['Tom', 30], + ['Jane', 20], + ['Linda', 25], +])->execute(); +``` + +Another useful method is [[yii\db\Command::upsert()|upsert()]]. Upsert is an atomic operation that inserts rows into +a database table if they do not already exist (matching unique constraints), or update them if they do: + +```php +Yii::$app->db->createCommand()->upsert('pages', [ + 'name' => 'Front page', + 'url' => 'http://example.com/', // url is unique + 'visits' => 0, +], [ + 'visits' => new \yii\db\Expression('visits + 1'), +], $params)->execute(); +``` + +The code above will either insert a new page record or increment its visit counter atomically. + +Note that the aforementioned methods only create the query and you always have to call [[yii\db\Command::execute()|execute()]] +to actually run them. + + +## Quoting Table and Column Names + +When writing database-agnostic code, properly quoting table and column names is often a headache because +different databases have different name quoting rules. To overcome this problem, you may use the following +quoting syntax introduced by Yii: + +* `[[column name]]`: enclose a column name to be quoted in double square brackets; +* `{{table name}}`: enclose a table name to be quoted in double curly brackets. + +Yii DAO will automatically convert such constructs into the corresponding quoted column or table names using the +DBMS specific syntax. +For example, + +```php +// executes this SQL for MySQL: SELECT COUNT(`id`) FROM `employee` +$count = Yii::$app->db->createCommand("SELECT COUNT([[id]]) FROM {{employee}}") + ->queryScalar(); +``` + + +### Using Table Prefix + +If most of your DB tables names share a common prefix, you may use the table prefix feature provided +by Yii DAO. + +First, specify the table prefix via the [[yii\db\Connection::tablePrefix]] property in the application config: + +```php +return [ + // ... + 'components' => [ + // ... + 'db' => [ + // ... + 'tablePrefix' => 'tbl_', + ], + ], +]; +``` + +Then in your code, whenever you need to refer to a table whose name contains such a prefix, use the syntax +`{{%table_name}}`. The percentage character will be automatically replaced with the table prefix that you have specified +when configuring the DB connection. For example, + +```php +// executes this SQL for MySQL: SELECT COUNT(`id`) FROM `tbl_employee` +$count = Yii::$app->db->createCommand("SELECT COUNT([[id]]) FROM {{%employee}}") + ->queryScalar(); +``` + + +## Performing Transactions + +When running multiple related queries in a sequence, you may need to wrap them in a transaction to ensure the integrity +and consistency of your database. If any of the queries fails, the database will be rolled back to the state as if +none of these queries were executed. + +The following code shows a typical way of using transactions: + +```php +Yii::$app->db->transaction(function($db) { + $db->createCommand($sql1)->execute(); + $db->createCommand($sql2)->execute(); + // ... executing other SQL statements ... +}); +``` + +The above code is equivalent to the following, which gives you more control about the error handling code: + +```php +$db = Yii::$app->db; +$transaction = $db->beginTransaction(); +try { + $db->createCommand($sql1)->execute(); + $db->createCommand($sql2)->execute(); + // ... executing other SQL statements ... + + $transaction->commit(); +} catch(\Exception $e) { + $transaction->rollBack(); + throw $e; +} catch(\Throwable $e) { + $transaction->rollBack(); + throw $e; +} +``` + +By calling the [[yii\db\Connection::beginTransaction()|beginTransaction()]] method, a new transaction is started. +The transaction is represented as a [[yii\db\Transaction]] object stored in the `$transaction` variable. Then, +the queries being executed are enclosed in a `try...catch...` block. If all queries are executed successfully, +the [[yii\db\Transaction::commit()|commit()]] method is called to commit the transaction. Otherwise, if an exception +will be triggered and caught, the [[yii\db\Transaction::rollBack()|rollBack()]] method is called to roll back +the changes made by the queries prior to that failed query in the transaction. `throw $e` will then re-throw the +exception as if we had not caught it, so the normal error handling process will take care of it. + +> Note: in the above code we have two catch-blocks for compatibility +> with PHP 5.x and PHP 7.x. `\Exception` implements the [`\Throwable` interface](http://php.net/manual/en/class.throwable.php) +> since PHP 7.0, so you can skip the part with `\Exception` if your app uses only PHP 7.0 and higher. + + +### Specifying Isolation Levels + +Yii also supports setting [isolation levels] for your transactions. By default, when starting a new transaction, +it will use the default isolation level set by your database system. You can override the default isolation level as follows, + +```php +$isolationLevel = \yii\db\Transaction::REPEATABLE_READ; + +Yii::$app->db->transaction(function ($db) { + .... +}, $isolationLevel); + +// or alternatively + +$transaction = Yii::$app->db->beginTransaction($isolationLevel); +``` + +Yii provides four constants for the most common isolation levels: + +- [[\yii\db\Transaction::READ_UNCOMMITTED]] - the weakest level, Dirty reads, non-repeatable reads and phantoms may occur. +- [[\yii\db\Transaction::READ_COMMITTED]] - avoid dirty reads. +- [[\yii\db\Transaction::REPEATABLE_READ]] - avoid dirty reads and non-repeatable reads. +- [[\yii\db\Transaction::SERIALIZABLE]] - the strongest level, avoids all of the above named problems. + +Besides using the above constants to specify isolation levels, you may also use strings with a valid syntax supported +by the DBMS that you are using. For example, in PostgreSQL, you may use `"SERIALIZABLE READ ONLY DEFERRABLE"`. + +Note that some DBMS allow setting the isolation level only for the whole connection. Any subsequent transactions +will get the same isolation level even if you do not specify any. When using this feature +you may need to set the isolation level for all transactions explicitly to avoid conflicting settings. +At the time of this writing, only MSSQL and SQLite are affected by this limitation. + +> Note: SQLite only supports two isolation levels, so you can only use `READ UNCOMMITTED` and `SERIALIZABLE`. +Usage of other levels will result in an exception being thrown. + +> Note: PostgreSQL does not allow setting the isolation level before the transaction starts so you can not +specify the isolation level directly when starting the transaction. +You have to call [[yii\db\Transaction::setIsolationLevel()]] in this case after the transaction has started. + +[isolation levels]: http://en.wikipedia.org/wiki/Isolation_%28database_systems%29#Isolation_levels + + +### Nesting Transactions + +If your DBMS supports Savepoint, you may nest multiple transactions like the following: + +```php +Yii::$app->db->transaction(function ($db) { + // outer transaction + + $db->transaction(function ($db) { + // inner transaction + }); +}); +``` + +Or alternatively, + +```php +$db = Yii::$app->db; +$outerTransaction = $db->beginTransaction(); +try { + $db->createCommand($sql1)->execute(); + + $innerTransaction = $db->beginTransaction(); + try { + $db->createCommand($sql2)->execute(); + $innerTransaction->commit(); + } catch (\Exception $e) { + $innerTransaction->rollBack(); + throw $e; + } catch (\Throwable $e) { + $innerTransaction->rollBack(); + throw $e; + } + + $outerTransaction->commit(); +} catch (\Exception $e) { + $outerTransaction->rollBack(); + throw $e; +} catch (\Throwable $e) { + $outerTransaction->rollBack(); + throw $e; +} +``` + + +## Replication and Read-Write Splitting + +Many DBMS support [database replication](http://en.wikipedia.org/wiki/Replication_(computing)#Database_replication) +to get better database availability and faster server response time. With database replication, data are replicated +from the so-called *master servers* to *slave servers*. All writes and updates must take place on the master servers, +while reads may also take place on the slave servers. + +To take advantage of database replication and achieve read-write splitting, you can configure a [[yii\db\Connection]] +component like the following: + +```php +[ + 'class' => 'yii\db\Connection', + + // configuration for the master + 'dsn' => 'dsn for master server', + 'username' => 'master', + 'password' => '', + + // common configuration for slaves + 'slaveConfig' => [ + 'username' => 'slave', + 'password' => '', + 'attributes' => [ + // use a smaller connection timeout + PDO::ATTR_TIMEOUT => 10, + ], + ], + + // list of slave configurations + 'slaves' => [ + ['dsn' => 'dsn for slave server 1'], + ['dsn' => 'dsn for slave server 2'], + ['dsn' => 'dsn for slave server 3'], + ['dsn' => 'dsn for slave server 4'], + ], +] +``` + +The above configuration specifies a setup with a single master and multiple slaves. One of the slaves will +be connected and used to perform read queries, while the master will be used to perform write queries. +Such read-write splitting is accomplished automatically with this configuration. For example, + +```php +// create a Connection instance using the above configuration +Yii::$app->db = Yii::createObject($config); + +// query against one of the slaves +$rows = Yii::$app->db->createCommand('SELECT * FROM user LIMIT 10')->queryAll(); + +// query against the master +Yii::$app->db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute(); +``` + +> Info: Queries performed by calling [[yii\db\Command::execute()]] are considered as write queries, while + all other queries done through one of the "query" methods of [[yii\db\Command]] are read queries. + You can get the currently active slave connection via `Yii::$app->db->slave`. + +The `Connection` component supports load balancing and failover between slaves. +When performing a read query for the first time, the `Connection` component will randomly pick a slave and +try connecting to it. If the slave is found "dead", it will try another one. If none of the slaves is available, +it will connect to the master. By configuring a [[yii\db\Connection::serverStatusCache|server status cache]], +a "dead" server can be remembered so that it will not be tried again during a +[[yii\db\Connection::serverRetryInterval|certain period of time]]. + +> Info: In the above configuration, a connection timeout of 10 seconds is specified for every slave. + This means if a slave cannot be reached in 10 seconds, it is considered as "dead". You can adjust this parameter + based on your actual environment. + + +You can also configure multiple masters with multiple slaves. For example, + + +```php +[ + 'class' => 'yii\db\Connection', + + // common configuration for masters + 'masterConfig' => [ + 'username' => 'master', + 'password' => '', + 'attributes' => [ + // use a smaller connection timeout + PDO::ATTR_TIMEOUT => 10, + ], + ], + + // list of master configurations + 'masters' => [ + ['dsn' => 'dsn for master server 1'], + ['dsn' => 'dsn for master server 2'], + ], + + // common configuration for slaves + 'slaveConfig' => [ + 'username' => 'slave', + 'password' => '', + 'attributes' => [ + // use a smaller connection timeout + PDO::ATTR_TIMEOUT => 10, + ], + ], + + // list of slave configurations + 'slaves' => [ + ['dsn' => 'dsn for slave server 1'], + ['dsn' => 'dsn for slave server 2'], + ['dsn' => 'dsn for slave server 3'], + ['dsn' => 'dsn for slave server 4'], + ], +] +``` + +The above configuration specifies two masters and four slaves. The `Connection` component also supports +load balancing and failover between masters just as it does between slaves. A difference is that when none +of the masters are available an exception will be thrown. + +> Note: When you use the [[yii\db\Connection::masters|masters]] property to configure one or multiple + masters, all other properties for specifying a database connection (e.g. `dsn`, `username`, `password`) + with the `Connection` object itself will be ignored. + + +By default, transactions use the master connection. And within a transaction, all DB operations will use +the master connection. For example, + +```php +$db = Yii::$app->db; +// the transaction is started on the master connection +$transaction = $db->beginTransaction(); + +try { + // both queries are performed against the master + $rows = $db->createCommand('SELECT * FROM user LIMIT 10')->queryAll(); + $db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute(); + + $transaction->commit(); +} catch(\Exception $e) { + $transaction->rollBack(); + throw $e; +} catch(\Throwable $e) { + $transaction->rollBack(); + throw $e; +} +``` + +If you want to start a transaction with the slave connection, you should explicitly do so, like the following: + +```php +$transaction = Yii::$app->db->slave->beginTransaction(); +``` + +Sometimes, you may want to force using the master connection to perform a read query. This can be achieved +with the `useMaster()` method: + +```php +$rows = Yii::$app->db->useMaster(function ($db) { + return $db->createCommand('SELECT * FROM user LIMIT 10')->queryAll(); +}); +``` + +You may also directly set `Yii::$app->db->enableSlaves` to be `false` to direct all queries to the master connection. + + +## Working with Database Schema + +Yii DAO provides a whole set of methods to let you manipulate the database schema, such as creating new tables, +dropping a column from a table, etc. These methods are listed as follows: + +* [[yii\db\Command::createTable()|createTable()]]: creating a table +* [[yii\db\Command::renameTable()|renameTable()]]: renaming a table +* [[yii\db\Command::dropTable()|dropTable()]]: removing a table +* [[yii\db\Command::truncateTable()|truncateTable()]]: removing all rows in a table +* [[yii\db\Command::addColumn()|addColumn()]]: adding a column +* [[yii\db\Command::renameColumn()|renameColumn()]]: renaming a column +* [[yii\db\Command::dropColumn()|dropColumn()]]: removing a column +* [[yii\db\Command::alterColumn()|alterColumn()]]: altering a column +* [[yii\db\Command::addPrimaryKey()|addPrimaryKey()]]: adding a primary key +* [[yii\db\Command::dropPrimaryKey()|dropPrimaryKey()]]: removing a primary key +* [[yii\db\Command::addForeignKey()|addForeignKey()]]: adding a foreign key +* [[yii\db\Command::dropForeignKey()|dropForeignKey()]]: removing a foreign key +* [[yii\db\Command::createIndex()|createIndex()]]: creating an index +* [[yii\db\Command::dropIndex()|dropIndex()]]: removing an index + +These methods can be used like the following: + +```php +// CREATE TABLE +Yii::$app->db->createCommand()->createTable('post', [ + 'id' => 'pk', + 'title' => 'string', + 'text' => 'text', +]); +``` + +The above array describes the name and types of the columns to be created. For the column types, Yii provides +a set of abstract data types, that allow you to define a database agnostic schema. These are converted to +DBMS specific type definitions dependent on the database, the table is created in. +Please refer to the API documentation of the [[yii\db\Command::createTable()|createTable()]]-method for more information. + +Besides changing the database schema, you can also retrieve the definition information about a table through +the [[yii\db\Connection::getTableSchema()|getTableSchema()]] method of a DB connection. For example, + +```php +$table = Yii::$app->db->getTableSchema('post'); +``` + +The method returns a [[yii\db\TableSchema]] object which contains the information about the table's columns, +primary keys, foreign keys, etc. All these information are mainly utilized by [query builder](db-query-builder.md) +and [active record](db-active-record.md) to help you write database-agnostic code. diff --git a/docs/guide-ar/db-migrations.md b/docs/guide-ar/db-migrations.md new file mode 100644 index 0000000..0c536c9 --- /dev/null +++ b/docs/guide-ar/db-migrations.md @@ -0,0 +1,1054 @@ +Database Migration +================== + +During the course of developing and maintaining a database-driven application, the structure of the database +being used evolves just like the source code does. For example, during the development of an application, +a new table may be found necessary; after the application is deployed to production, it may be discovered +that an index should be created to improve the query performance; and so on. Because a database structure change +often requires some source code changes, Yii supports the so-called *database migration* feature that allows +you to keep track of database changes in terms of *database migrations* which are version-controlled together +with the source code. + +The following steps show how database migration can be used by a team during development: + +1. Tim creates a new migration (e.g. creates a new table, changes a column definition, etc.). +2. Tim commits the new migration into the source control system (e.g. Git, Mercurial). +3. Doug updates his repository from the source control system and receives the new migration. +4. Doug applies the migration to his local development database, thereby synchronizing his database + to reflect the changes that Tim has made. + +And the following steps show how to deploy a new release with database migrations to production: + +1. Scott creates a release tag for the project repository that contains some new database migrations. +2. Scott updates the source code on the production server to the release tag. +3. Scott applies any accumulated database migrations to the production database. + +Yii provides a set of migration command line tools that allow you to: + +* create new migrations; +* apply migrations; +* revert migrations; +* re-apply migrations; +* show migration history and status. + +All these tools are accessible through the command `yii migrate`. In this section we will describe in detail +how to accomplish various tasks using these tools. You may also get the usage of each tool via the help +command `yii help migrate`. + +> Tip: migrations could affect not only database schema but adjust existing data to fit new schema, create RBAC + hierarchy or clean up cache. + +> Note: When manipulating data using a migration you may find that using your [Active Record](db-active-record.md) classes +> for this might be useful because some of the logic is already implemented there. Keep in mind however, that in contrast +> to code written in the migrations, who's nature is to stay constant forever, application logic is subject to change. +> So when using Active Record in migration code, changes to the logic in the Active Record layer may accidentally break +> existing migrations. For this reason migration code should be kept independent from other application logic such +> as Active Record classes. + + +## Creating Migrations + +To create a new migration, run the following command: + +``` +yii migrate/create +``` + +The required `name` argument gives a brief description about the new migration. For example, if +the migration is about creating a new table named *news*, you may use the name `create_news_table` +and run the following command: + +``` +yii migrate/create create_news_table +``` + +> Note: Because the `name` argument will be used as part of the generated migration class name, + it should only contain letters, digits, and/or underscore characters. + +The above command will create a new PHP class file named `m150101_185401_create_news_table.php` +in the `@app/migrations` directory. The file contains the following code which mainly declares +a migration class `m150101_185401_create_news_table` with the skeleton code: + +```php +_`, where + +* `` refers to the UTC datetime at which the migration creation command is executed. +* `` is the same as the value of the `name` argument that you provide to the command. + +In the migration class, you are expected to write code in the `up()` method that makes changes to the database structure. +You may also want to write code in the `down()` method to revert the changes made by `up()`. The `up()` method is invoked +when you upgrade the database with this migration, while the `down()` method is invoked when you downgrade the database. +The following code shows how you may implement the migration class to create a `news` table: + +```php +createTable('news', [ + 'id' => Schema::TYPE_PK, + 'title' => Schema::TYPE_STRING . ' NOT NULL', + 'content' => Schema::TYPE_TEXT, + ]); + } + + public function down() + { + $this->dropTable('news'); + } +} +``` + +> Info: Not all migrations are reversible. For example, if the `up()` method deletes a row of a table, you may + not be able to recover this row in the `down()` method. Sometimes, you may be just too lazy to implement + the `down()`, because it is not very common to revert database migrations. In this case, you should return + `false` in the `down()` method to indicate that the migration is not reversible. + +The base migration class [[yii\db\Migration]] exposes a database connection via the [[yii\db\Migration::db|db]] +property. You can use it to manipulate the database schema using the methods as described in +[Working with Database Schema](db-dao.md#database-schema). + +Rather than using physical types, when creating a table or column you should use *abstract types* +so that your migrations are independent of specific DBMS. The [[yii\db\Schema]] class defines +a set of constants to represent the supported abstract types. These constants are named in the format +of `TYPE_`. For example, `TYPE_PK` refers to auto-incremental primary key type; `TYPE_STRING` +refers to a string type. When a migration is applied to a particular database, the abstract types +will be translated into the corresponding physical types. In the case of MySQL, `TYPE_PK` will be turned +into `int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY`, while `TYPE_STRING` becomes `varchar(255)`. + +You can append additional constraints when using abstract types. In the above example, ` NOT NULL` is appended +to `Schema::TYPE_STRING` to specify that the column cannot be `null`. + +> Info: The mapping between abstract types and physical types is specified by + the [[yii\db\QueryBuilder::$typeMap|$typeMap]] property in each concrete `QueryBuilder` class. + +Since version 2.0.6, you can make use of the newly introduced schema builder which provides more convenient way of defining column schema. +So the migration above could be written like the following: + +```php +createTable('news', [ + 'id' => $this->primaryKey(), + 'title' => $this->string()->notNull(), + 'content' => $this->text(), + ]); + } + + public function down() + { + $this->dropTable('news'); + } +} +``` + +A list of all available methods for defining the column types is available in the API documentation of [[yii\db\SchemaBuilderTrait]]. + + +## Generating Migrations + +Since version 2.0.7 migration console provides a convenient way to create migrations. + +If the migration name is of a special form, for example `create_xxx_table` or `drop_xxx_table` then the generated migration +file will contain extra code, in this case for creating/dropping tables. +In the following all variants of this feature are described. + +### Create Table + +``` +yii migrate/create create_post_table +``` + +generates + +```php +/** + * Handles the creation for table `post`. + */ +class m150811_220037_create_post_table extends Migration +{ + /** + * {@inheritdoc} + */ + public function up() + { + $this->createTable('post', [ + 'id' => $this->primaryKey() + ]); + } + + /** + * {@inheritdoc} + */ + public function down() + { + $this->dropTable('post'); + } +} +``` + +To create table fields right away, specify them via `--fields` option. + +``` +yii migrate/create create_post_table --fields="title:string,body:text" +``` + +generates + +```php +/** + * Handles the creation for table `post`. + */ +class m150811_220037_create_post_table extends Migration +{ + /** + * {@inheritdoc} + */ + public function up() + { + $this->createTable('post', [ + 'id' => $this->primaryKey(), + 'title' => $this->string(), + 'body' => $this->text(), + ]); + } + + /** + * {@inheritdoc} + */ + public function down() + { + $this->dropTable('post'); + } +} + +``` + +You can specify more field parameters. + +``` +yii migrate/create create_post_table --fields="title:string(12):notNull:unique,body:text" +``` + +generates + +```php +/** + * Handles the creation for table `post`. + */ +class m150811_220037_create_post_table extends Migration +{ + /** + * {@inheritdoc} + */ + public function up() + { + $this->createTable('post', [ + 'id' => $this->primaryKey(), + 'title' => $this->string(12)->notNull()->unique(), + 'body' => $this->text() + ]); + } + + /** + * {@inheritdoc} + */ + public function down() + { + $this->dropTable('post'); + } +} +``` + +> Note: primary key is added automatically and is named `id` by default. If you want to use another name you may +> specify it explicitly like `--fields="name:primaryKey"`. + +#### Foreign keys + +Since 2.0.8 the generator supports foreign keys using the `foreignKey` keyword. + +``` +yii migrate/create create_post_table --fields="author_id:integer:notNull:foreignKey(user),category_id:integer:defaultValue(1):foreignKey,title:string,body:text" +``` + +generates + +```php +/** + * Handles the creation for table `post`. + * Has foreign keys to the tables: + * + * - `user` + * - `category` + */ +class m160328_040430_create_post_table extends Migration +{ + /** + * {@inheritdoc} + */ + public function up() + { + $this->createTable('post', [ + 'id' => $this->primaryKey(), + 'author_id' => $this->integer()->notNull(), + 'category_id' => $this->integer()->defaultValue(1), + 'title' => $this->string(), + 'body' => $this->text(), + ]); + + // creates index for column `author_id` + $this->createIndex( + 'idx-post-author_id', + 'post', + 'author_id' + ); + + // add foreign key for table `user` + $this->addForeignKey( + 'fk-post-author_id', + 'post', + 'author_id', + 'user', + 'id', + 'CASCADE' + ); + + // creates index for column `category_id` + $this->createIndex( + 'idx-post-category_id', + 'post', + 'category_id' + ); + + // add foreign key for table `category` + $this->addForeignKey( + 'fk-post-category_id', + 'post', + 'category_id', + 'category', + 'id', + 'CASCADE' + ); + } + + /** + * {@inheritdoc} + */ + public function down() + { + // drops foreign key for table `user` + $this->dropForeignKey( + 'fk-post-author_id', + 'post' + ); + + // drops index for column `author_id` + $this->dropIndex( + 'idx-post-author_id', + 'post' + ); + + // drops foreign key for table `category` + $this->dropForeignKey( + 'fk-post-category_id', + 'post' + ); + + // drops index for column `category_id` + $this->dropIndex( + 'idx-post-category_id', + 'post' + ); + + $this->dropTable('post'); + } +} +``` + +The position of the `foreignKey` keyword in the column description doesn't +change the generated code. That means: + +- `author_id:integer:notNull:foreignKey(user)` +- `author_id:integer:foreignKey(user):notNull` +- `author_id:foreignKey(user):integer:notNull` + +All generate the same code. + +The `foreignKey` keyword can take a parameter between parenthesis which will be +the name of the related table for the generated foreign key. If no parameter +is passed then the table name will be deduced from the column name. + +In the example above `author_id:integer:notNull:foreignKey(user)` will generate a +column named `author_id` with a foreign key to the `user` table while +`category_id:integer:defaultValue(1):foreignKey` will generate a column +`category_id` with a foreign key to the `category` table. + +Since 2.0.11, `foreignKey` keyword accepts a second parameter, separated by whitespace. +It accepts the name of the related column for the foreign key generated. +If no second parameter is passed, the column name will be fetched from table schema. +If no schema exists, primary key isn't set or is composite, default name `id` will be used. + +### Drop Table + +``` +yii migrate/create drop_post_table --fields="title:string(12):notNull:unique,body:text" +``` + +generates + +```php +class m150811_220037_drop_post_table extends Migration +{ + public function up() + { + $this->dropTable('post'); + } + + public function down() + { + $this->createTable('post', [ + 'id' => $this->primaryKey(), + 'title' => $this->string(12)->notNull()->unique(), + 'body' => $this->text() + ]); + } +} +``` + +### Add Column + +If the migration name is of the form `add_xxx_column_to_yyy_table` then the file +content would contain `addColumn` and `dropColumn` statements necessary. + +To add column: + +``` +yii migrate/create add_position_column_to_post_table --fields="position:integer" +``` + +generates + +```php +class m150811_220037_add_position_column_to_post_table extends Migration +{ + public function up() + { + $this->addColumn('post', 'position', $this->integer()); + } + + public function down() + { + $this->dropColumn('post', 'position'); + } +} +``` + +You can specify multiple columns as follows: + +``` +yii migrate/create add_xxx_column_yyy_column_to_zzz_table --fields="xxx:integer,yyy:text" +``` + +### Drop Column + +If the migration name is of the form `drop_xxx_column_from_yyy_table` then +the file content would contain `addColumn` and `dropColumn` statements necessary. + +```php +yii migrate/create drop_position_column_from_post_table --fields="position:integer" +``` + +generates + +```php +class m150811_220037_drop_position_column_from_post_table extends Migration +{ + public function up() + { + $this->dropColumn('post', 'position'); + } + + public function down() + { + $this->addColumn('post', 'position', $this->integer()); + } +} +``` + +### Add Junction Table + +If the migration name is of the form `create_junction_table_for_xxx_and_yyy_tables` or `create_junction_xxx_and_yyy_tables` +then code necessary to create junction table will be generated. + +``` +yii migrate/create create_junction_table_for_post_and_tag_tables --fields="created_at:dateTime" +``` + +generates + +```php +/** + * Handles the creation for table `post_tag`. + * Has foreign keys to the tables: + * + * - `post` + * - `tag` + */ +class m160328_041642_create_junction_table_for_post_and_tag_tables extends Migration +{ + /** + * {@inheritdoc} + */ + public function up() + { + $this->createTable('post_tag', [ + 'post_id' => $this->integer(), + 'tag_id' => $this->integer(), + 'created_at' => $this->dateTime(), + 'PRIMARY KEY(post_id, tag_id)', + ]); + + // creates index for column `post_id` + $this->createIndex( + 'idx-post_tag-post_id', + 'post_tag', + 'post_id' + ); + + // add foreign key for table `post` + $this->addForeignKey( + 'fk-post_tag-post_id', + 'post_tag', + 'post_id', + 'post', + 'id', + 'CASCADE' + ); + + // creates index for column `tag_id` + $this->createIndex( + 'idx-post_tag-tag_id', + 'post_tag', + 'tag_id' + ); + + // add foreign key for table `tag` + $this->addForeignKey( + 'fk-post_tag-tag_id', + 'post_tag', + 'tag_id', + 'tag', + 'id', + 'CASCADE' + ); + } + + /** + * {@inheritdoc} + */ + public function down() + { + // drops foreign key for table `post` + $this->dropForeignKey( + 'fk-post_tag-post_id', + 'post_tag' + ); + + // drops index for column `post_id` + $this->dropIndex( + 'idx-post_tag-post_id', + 'post_tag' + ); + + // drops foreign key for table `tag` + $this->dropForeignKey( + 'fk-post_tag-tag_id', + 'post_tag' + ); + + // drops index for column `tag_id` + $this->dropIndex( + 'idx-post_tag-tag_id', + 'post_tag' + ); + + $this->dropTable('post_tag'); + } +} +``` + +Since 2.0.11 foreign key column names for junction tables are fetched from table schema. +In case table isn't defined in schema, or the primary key isn't set or is composite, default name `id` is used. + +### Transactional Migrations + +While performing complex DB migrations, it is important to ensure each migration to either succeed or fail as a whole +so that the database can maintain integrity and consistency. To achieve this goal, it is recommended that you +enclose the DB operations of each migration in a [transaction](db-dao.md#performing-transactions). + +An even easier way of implementing transactional migrations is to put migration code in the `safeUp()` and `safeDown()` +methods. These two methods differ from `up()` and `down()` in that they are enclosed implicitly in a transaction. +As a result, if any operation in these methods fails, all prior operations will be rolled back automatically. + +In the following example, besides creating the `news` table we also insert an initial row into this table. + +```php +createTable('news', [ + 'id' => $this->primaryKey(), + 'title' => $this->string()->notNull(), + 'content' => $this->text(), + ]); + + $this->insert('news', [ + 'title' => 'test 1', + 'content' => 'content 1', + ]); + } + + public function safeDown() + { + $this->delete('news', ['id' => 1]); + $this->dropTable('news'); + } +} +``` + +Note that usually when you perform multiple DB operations in `safeUp()`, you should reverse their execution order +in `safeDown()`. In the above example we first create the table and then insert a row in `safeUp()`; while +in `safeDown()` we first delete the row and then drop the table. + +> Note: Not all DBMS support transactions. And some DB queries cannot be put into a transaction. For some examples, + please refer to [implicit commit](http://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html). If this is the case, + you should still implement `up()` and `down()`, instead. + + +### Database Accessing Methods + +The base migration class [[yii\db\Migration]] provides a set of methods to let you access and manipulate databases. +You may find these methods are named similarly as the [DAO methods](db-dao.md) provided by the [[yii\db\Command]] class. +For example, the [[yii\db\Migration::createTable()]] method allows you to create a new table, +just like [[yii\db\Command::createTable()]] does. + +The benefit of using the methods provided by [[yii\db\Migration]] is that you do not need to explicitly +create [[yii\db\Command]] instances and the execution of each method will automatically display useful messages +telling you what database operations are done and how long they take. + +Below is the list of all these database accessing methods: + +* [[yii\db\Migration::execute()|execute()]]: executing a SQL statement +* [[yii\db\Migration::insert()|insert()]]: inserting a single row +* [[yii\db\Migration::batchInsert()|batchInsert()]]: inserting multiple rows +* [[yii\db\Migration::update()|update()]]: updating rows +* [[yii\db\Migration::delete()|delete()]]: deleting rows +* [[yii\db\Migration::createTable()|createTable()]]: creating a table +* [[yii\db\Migration::renameTable()|renameTable()]]: renaming a table +* [[yii\db\Migration::dropTable()|dropTable()]]: removing a table +* [[yii\db\Migration::truncateTable()|truncateTable()]]: removing all rows in a table +* [[yii\db\Migration::addColumn()|addColumn()]]: adding a column +* [[yii\db\Migration::renameColumn()|renameColumn()]]: renaming a column +* [[yii\db\Migration::dropColumn()|dropColumn()]]: removing a column +* [[yii\db\Migration::alterColumn()|alterColumn()]]: altering a column +* [[yii\db\Migration::addPrimaryKey()|addPrimaryKey()]]: adding a primary key +* [[yii\db\Migration::dropPrimaryKey()|dropPrimaryKey()]]: removing a primary key +* [[yii\db\Migration::addForeignKey()|addForeignKey()]]: adding a foreign key +* [[yii\db\Migration::dropForeignKey()|dropForeignKey()]]: removing a foreign key +* [[yii\db\Migration::createIndex()|createIndex()]]: creating an index +* [[yii\db\Migration::dropIndex()|dropIndex()]]: removing an index +* [[yii\db\Migration::addCommentOnColumn()|addCommentOnColumn()]]: adding comment to column +* [[yii\db\Migration::dropCommentFromColumn()|dropCommentFromColumn()]]: dropping comment from column +* [[yii\db\Migration::addCommentOnTable()|addCommentOnTable()]]: adding comment to table +* [[yii\db\Migration::dropCommentFromTable()|dropCommentFromTable()]]: dropping comment from table + +> Info: [[yii\db\Migration]] does not provide a database query method. This is because you normally do not need +> to display extra message about retrieving data from a database. It is also because you can use the powerful +> [Query Builder](db-query-builder.md) to build and run complex queries. +> Using Query Builder in a migration may look like this: +> +> ```php +> // update status field for all users +> foreach((new Query)->from('users')->each() as $user) { +> $this->update('users', ['status' => 1], ['id' => $user['id']]); +> } +> ``` + + +## Applying Migrations + +To upgrade a database to its latest structure, you should apply all available new migrations using the following command: + +``` +yii migrate +``` + +This command will list all migrations that have not been applied so far. If you confirm that you want to apply +these migrations, it will run the `up()` or `safeUp()` method in every new migration class, one after another, +in the order of their timestamp values. If any of the migrations fails, the command will quit without applying +the rest of the migrations. + +> Tip: In case you don't have command line at your server you may try [web shell](https://github.com/samdark/yii2-webshell) +> extension. + +For each migration that has been successfully applied, the command will insert a row into a database table named +`migration` to record the successful application of the migration. This will allow the migration tool to identify +which migrations have been applied and which have not. + +> Info: The migration tool will automatically create the `migration` table in the database specified by + the [[yii\console\controllers\MigrateController::db|db]] option of the command. By default, the database + is specified by the `db` [application component](structure-application-components.md). + +Sometimes, you may only want to apply one or a few new migrations, instead of all available migrations. +You can do so by specifying the number of migrations that you want to apply when running the command. +For example, the following command will try to apply the next three available migrations: + +``` +yii migrate 3 +``` + +You can also explicitly specify a particular migration to which the database should be migrated +by using the `migrate/to` command in one of the following formats: + +``` +yii migrate/to 150101_185401 # using timestamp to specify the migration +yii migrate/to "2015-01-01 18:54:01" # using a string that can be parsed by strtotime() +yii migrate/to m150101_185401_create_news_table # using full name +yii migrate/to 1392853618 # using UNIX timestamp +``` + +If there are any unapplied migrations earlier than the specified one, they will all be applied before the specified +migration is applied. + +If the specified migration has already been applied before, any later applied migrations will be reverted. + + +## Reverting Migrations + +To revert (undo) one or multiple migrations that have been applied before, you can run the following command: + +``` +yii migrate/down # revert the most recently applied migration +yii migrate/down 3 # revert the most 3 recently applied migrations +``` + +> Note: Not all migrations are reversible. Trying to revert such migrations will cause an error and stop the + entire reverting process. + + +## Redoing Migrations + +Redoing migrations means first reverting the specified migrations and then applying again. This can be done +as follows: + +``` +yii migrate/redo # redo the last applied migration +yii migrate/redo 3 # redo the last 3 applied migrations +``` + +> Note: If a migration is not reversible, you will not be able to redo it. + +## Refreshing Migrations + +Since Yii 2.0.13 you can delete all tables and foreign keys from the database and apply all migrations from the beginning. + +``` +yii migrate/fresh # Truncate the database and apply all migrations from the beginning. +``` + +## Listing Migrations + +To list which migrations have been applied and which are not, you may use the following commands: + +``` +yii migrate/history # showing the last 10 applied migrations +yii migrate/history 5 # showing the last 5 applied migrations +yii migrate/history all # showing all applied migrations + +yii migrate/new # showing the first 10 new migrations +yii migrate/new 5 # showing the first 5 new migrations +yii migrate/new all # showing all new migrations +``` + + +## Modifying Migration History + +Instead of actually applying or reverting migrations, sometimes you may simply want to mark that your database +has been upgraded to a particular migration. This often happens when you manually change the database to a particular +state and you do not want the migration(s) for that change to be re-applied later. You can achieve this goal with +the following command: + +``` +yii migrate/mark 150101_185401 # using timestamp to specify the migration +yii migrate/mark "2015-01-01 18:54:01" # using a string that can be parsed by strtotime() +yii migrate/mark m150101_185401_create_news_table # using full name +yii migrate/mark 1392853618 # using UNIX timestamp +``` + +The command will modify the `migration` table by adding or deleting certain rows to indicate that the database +has been applied migrations to the specified one. No migrations will be applied or reverted by this command. + + +## Customizing Migrations + +There are several ways to customize the migration command. + + +### Using Command Line Options + +The migration command comes with a few command-line options that can be used to customize its behaviors: + +* `interactive`: boolean (defaults to `true`), specifies whether to perform migrations in an interactive mode. + When this is `true`, the user will be prompted before the command performs certain actions. + You may want to set this to `false` if the command is being used in a background process. + +* `migrationPath`: string|array (defaults to `@app/migrations`), specifies the directory storing all migration + class files. This can be specified as either a directory path or a path [alias](concept-aliases.md). + Note that the directory must exist, or the command may trigger an error. Since version 2.0.12 an array can be + specified for loading migrations from multiple sources. + +* `migrationTable`: string (defaults to `migration`), specifies the name of the database table for storing + migration history information. The table will be automatically created by the command if it does not exist. + You may also manually create it using the structure `version varchar(255) primary key, apply_time integer`. + +* `db`: string (defaults to `db`), specifies the ID of the database [application component](structure-application-components.md). + It represents the database that will be migrated using this command. + +* `templateFile`: string (defaults to `@yii/views/migration.php`), specifies the path of the template file + that is used for generating skeleton migration class files. This can be specified as either a file path + or a path [alias](concept-aliases.md). The template file is a PHP script in which you can use a predefined variable + named `$className` to get the migration class name. + +* `generatorTemplateFiles`: array (defaults to `[ + 'create_table' => '@yii/views/createTableMigration.php', + 'drop_table' => '@yii/views/dropTableMigration.php', + 'add_column' => '@yii/views/addColumnMigration.php', + 'drop_column' => '@yii/views/dropColumnMigration.php', + 'create_junction' => '@yii/views/createTableMigration.php' + ]`), specifies template files for generating migration code. See "[Generating Migrations](#generating-migrations)" + for more details. + +* `fields`: array of column definition strings used for creating migration code. Defaults to `[]`. The format of each + definition is `COLUMN_NAME:COLUMN_TYPE:COLUMN_DECORATOR`. For example, `--fields=name:string(12):notNull` produces + a string column of size 12 which is not `null`. + +The following example shows how you can use these options. + +For example, if we want to migrate a `forum` module whose migration files +are located within the module's `migrations` directory, we can use the following +command: + +``` +# migrate the migrations in a forum module non-interactively +yii migrate --migrationPath=@app/modules/forum/migrations --interactive=0 +``` + + +### Configuring Command Globally + +Instead of entering the same option values every time you run the migration command, you may configure it +once for all in the application configuration like shown below: + +```php +return [ + 'controllerMap' => [ + 'migrate' => [ + 'class' => 'yii\console\controllers\MigrateController', + 'migrationTable' => 'backend_migration', + ], + ], +]; +``` + +With the above configuration, each time you run the migration command, the `backend_migration` table +will be used to record the migration history. You no longer need to specify it via the `migrationTable` +command-line option. + + +### Namespaced Migrations + +Since 2.0.10 you can use namespaces for the migration classes. You can specify the list of the migration namespaces via +[[yii\console\controllers\MigrateController::migrationNamespaces|migrationNamespaces]]. Using of the namespaces for +migration classes allows you usage of the several source locations for the migrations. For example: + +```php +return [ + 'controllerMap' => [ + 'migrate' => [ + 'class' => 'yii\console\controllers\MigrateController', + 'migrationPath' => null, // disable non-namespaced migrations if app\migrations is listed below + 'migrationNamespaces' => [ + 'app\migrations', // Common migrations for the whole application + 'module\migrations', // Migrations for the specific project's module +                'some\extension\migrations', // Migrations for the specific extension + ], + ], + ], +]; +``` + +> Note: migrations applied from different namespaces will create a **single** migration history, e.g. you might be + unable to apply or revert migrations from particular namespace only. + +While operating namespaced migrations: creating new, reverting and so on, you should specify full namespace before +migration name. Note that backslash (`\`) symbol is usually considered a special character in the shell, so you need +to escape it properly to avoid shell errors or incorrect behavior. For example: + +``` +yii migrate/create 'app\\migrations\\createUserTable' +``` + +> Note: migrations specified via [[yii\console\controllers\MigrateController::migrationPath|migrationPath]] can not + contain a namespace, namespaced migration can be applied only via [[yii\console\controllers\MigrateController::migrationNamespaces]] + property. + +Since version 2.0.12 the [[yii\console\controllers\MigrateController::migrationPath|migrationPath]] property +also accepts an array for specifying multiple directories that contain migrations without a namespace. +This is mainly added to be used in existing projects which use migrations from different locations. These migrations mainly come +from external sources, like Yii extensions developed by other developers, +which can not be changed to use namespaces easily when starting to use the new approach. + +### Separated Migrations + +Sometimes using single migration history for all project migrations is not desirable. For example: you may install some +'blog' extension, which contains fully separated functionality and contain its own migrations, which should not affect +the ones dedicated to main project functionality. + +If you want several migrations to be applied and tracked down completely separated from each other, you can configure multiple +migration commands which will use different namespaces and migration history tables: + +```php +return [ + 'controllerMap' => [ + // Common migrations for the whole application + 'migrate-app' => [ + 'class' => 'yii\console\controllers\MigrateController', + 'migrationNamespaces' => ['app\migrations'], + 'migrationTable' => 'migration_app', + 'migrationPath' => null, + ], + // Migrations for the specific project's module + 'migrate-module' => [ + 'class' => 'yii\console\controllers\MigrateController', + 'migrationNamespaces' => ['module\migrations'], + 'migrationTable' => 'migration_module', + 'migrationPath' => null, + ], + // Migrations for the specific extension + 'migrate-rbac' => [ + 'class' => 'yii\console\controllers\MigrateController', + 'migrationPath' => '@yii/rbac/migrations', + 'migrationTable' => 'migration_rbac', + ], + ], +]; +``` + +Note that to synchronize database you now need to run multiple commands instead of one: + +``` +yii migrate-app +yii migrate-module +yii migrate-rbac +``` + + +## Migrating Multiple Databases + +By default, migrations are applied to the same database specified by the `db` [application component](structure-application-components.md). +If you want them to be applied to a different database, you may specify the `db` command-line option like shown below, + +``` +yii migrate --db=db2 +``` + +The above command will apply migrations to the `db2` database. + +Sometimes it may happen that you want to apply *some* of the migrations to one database, while some others to another +database. To achieve this goal, when implementing a migration class you should explicitly specify the DB component +ID that the migration would use, like the following: + +```php +db = 'db2'; + parent::init(); + } +} +``` + +The above migration will be applied to `db2`, even if you specify a different database through the `db` command-line +option. Note that the migration history will still be recorded in the database specified by the `db` command-line option. + +If you have multiple migrations that use the same database, it is recommended that you create a base migration class +with the above `init()` code. Then each migration class can extend from this base class. + +> Tip: Besides setting the [[yii\db\Migration::db|db]] property, you can also operate on different databases + by creating new database connections to them in your migration classes. You then use the [DAO methods](db-dao.md) + with these connections to manipulate different databases. + +Another strategy that you can take to migrate multiple databases is to keep migrations for different databases in +different migration paths. Then you can migrate these databases in separate commands like the following: + +``` +yii migrate --migrationPath=@app/migrations/db1 --db=db1 +yii migrate --migrationPath=@app/migrations/db2 --db=db2 +... +``` + +The first command will apply migrations in `@app/migrations/db1` to the `db1` database, the second command +will apply migrations in `@app/migrations/db2` to `db2`, and so on. diff --git a/docs/guide-ar/db-query-builder.md b/docs/guide-ar/db-query-builder.md new file mode 100644 index 0000000..a61a679 --- /dev/null +++ b/docs/guide-ar/db-query-builder.md @@ -0,0 +1,1013 @@ +Query Builder +============= + +Built on top of [Database Access Objects](db-dao.md), query builder allows you to construct a SQL query +in a programmatic and DBMS-agnostic way. Compared to writing raw SQL statements, using query builder will help you write +more readable SQL-related code and generate more secure SQL statements. + +Using query builder usually involves two steps: + +1. Build a [[yii\db\Query]] object to represent different parts (e.g. `SELECT`, `FROM`) of a SELECT SQL statement. +2. Execute a query method (e.g. `all()`) of [[yii\db\Query]] to retrieve data from the database. + +The following code shows a typical way of using query builder: + +```php +$rows = (new \yii\db\Query()) + ->select(['id', 'email']) + ->from('user') + ->where(['last_name' => 'Smith']) + ->limit(10) + ->all(); +``` + +The above code generates and executes the following SQL query, where the `:last_name` parameter is bound with the +string `'Smith'`. + +```sql +SELECT `id`, `email` +FROM `user` +WHERE `last_name` = :last_name +LIMIT 10 +``` + +> Info: You usually mainly work with [[yii\db\Query]] instead of [[yii\db\QueryBuilder]]. The latter is invoked + by the former implicitly when you call one of the query methods. [[yii\db\QueryBuilder]] is the class responsible + for generating DBMS-dependent SQL statements (e.g. quoting table/column names differently) from DBMS-independent + [[yii\db\Query]] objects. + + +## Building Queries + +To build a [[yii\db\Query]] object, you call different query building methods to specify different parts of +a SQL query. The names of these methods resemble the SQL keywords used in the corresponding parts of the SQL +statement. For example, to specify the `FROM` part of a SQL query, you would call the [[yii\db\Query::from()|from()]] method. +All the query building methods return the query object itself, which allows you to chain multiple calls together. + +In the following, we will describe the usage of each query building method. + + +### [[yii\db\Query::select()|select()]] + +The [[yii\db\Query::select()|select()]] method specifies the `SELECT` fragment of a SQL statement. You can specify +columns to be selected in either an array or a string, like the following. The column names being selected will +be automatically quoted when the SQL statement is being generated from a query object. + +```php +$query->select(['id', 'email']); + +// equivalent to: + +$query->select('id, email'); +``` + +The column names being selected may include table prefixes and/or column aliases, like you do when writing raw SQL queries. +For example, + +```php +$query->select(['user.id AS user_id', 'email']); + +// equivalent to: + +$query->select('user.id AS user_id, email'); +``` + +If you are using the array format to specify columns, you can also use the array keys to specify the column aliases. +For example, the above code can be rewritten as follows, + +```php +$query->select(['user_id' => 'user.id', 'email']); +``` + +If you do not call the [[yii\db\Query::select()|select()]] method when building a query, `*` will be selected, which +means selecting *all* columns. + +Besides column names, you can also select DB expressions. You must use the array format when selecting a DB expression +that contains commas to avoid incorrect automatic name quoting. For example, + +```php +$query->select(["CONCAT(first_name, ' ', last_name) AS full_name", 'email']); +``` + +As with all places where raw SQL is involved, you may use the [DBMS agnostic quoting syntax](db-dao.md#quoting-table-and-column-names) +for table and column names when writing DB expressions in select. + +Starting from version 2.0.1, you may also select sub-queries. You should specify each sub-query in terms of +a [[yii\db\Query]] object. For example, + +```php +$subQuery = (new Query())->select('COUNT(*)')->from('user'); + +// SELECT `id`, (SELECT COUNT(*) FROM `user`) AS `count` FROM `post` +$query = (new Query())->select(['id', 'count' => $subQuery])->from('post'); +``` + +To select distinct rows, you may call [[yii\db\Query::distinct()|distinct()]], like the following: + +```php +// SELECT DISTINCT `user_id` ... +$query->select('user_id')->distinct(); +``` + +You can call [[yii\db\Query::addSelect()|addSelect()]] to select additional columns. For example, + +```php +$query->select(['id', 'username']) + ->addSelect(['email']); +``` + + +### [[yii\db\Query::from()|from()]] + +The [[yii\db\Query::from()|from()]] method specifies the `FROM` fragment of a SQL statement. For example, + +```php +// SELECT * FROM `user` +$query->from('user'); +``` + +You can specify the table(s) being selected from in either a string or an array. The table names may contain +schema prefixes and/or table aliases, like you do when writing raw SQL statements. For example, + +```php +$query->from(['public.user u', 'public.post p']); + +// equivalent to: + +$query->from('public.user u, public.post p'); +``` + +If you are using the array format, you can also use the array keys to specify the table aliases, like the following: + +```php +$query->from(['u' => 'public.user', 'p' => 'public.post']); +``` + +Besides table names, you can also select from sub-queries by specifying them in terms of [[yii\db\Query]] objects. +For example, + +```php +$subQuery = (new Query())->select('id')->from('user')->where('status=1'); + +// SELECT * FROM (SELECT `id` FROM `user` WHERE status=1) u +$query->from(['u' => $subQuery]); +``` + +#### Prefixes +Also a default [[yii\db\Connection::$tablePrefix|tablePrefix]] can be applied. Implementation instructions +are in the ["Quoting Tables" section of the "Database Access Objects" guide](guide-db-dao.html#quoting-table-and-column-names). + +### [[yii\db\Query::where()|where()]] + +The [[yii\db\Query::where()|where()]] method specifies the `WHERE` fragment of a SQL query. You can use one of +the four formats to specify a `WHERE` condition: + +- string format, e.g., `'status=1'` +- hash format, e.g. `['status' => 1, 'type' => 2]` +- operator format, e.g. `['like', 'name', 'test']` +- object format, e.g. `new LikeCondition('name', 'LIKE', 'test')` + +#### String Format + +String format is best used to specify very simple conditions or if you need to use built-in functions of the DBMS. +It works as if you are writing a raw SQL. For example, + +```php +$query->where('status=1'); + +// or use parameter binding to bind dynamic parameter values +$query->where('status=:status', [':status' => $status]); + +// raw SQL using MySQL YEAR() function on a date field +$query->where('YEAR(somedate) = 2015'); +``` + +Do NOT embed variables directly in the condition like the following, especially if the variable values come from +end user inputs, because this will make your application subject to SQL injection attacks. + +```php +// Dangerous! Do NOT do this unless you are very certain $status must be an integer. +$query->where("status=$status"); +``` + +When using `parameter binding`, you may call [[yii\db\Query::params()|params()]] or [[yii\db\Query::addParams()|addParams()]] +to specify parameters separately. + +```php +$query->where('status=:status') + ->addParams([':status' => $status]); +``` + +As with all places where raw SQL is involved, you may use the [DBMS agnostic quoting syntax](db-dao.md#quoting-table-and-column-names) +for table and column names when writing conditions in string format. + +#### Hash Format + +Hash format is best used to specify multiple `AND`-concatenated sub-conditions each being a simple equality assertion. +It is written as an array whose keys are column names and values the corresponding values that the columns should be. +For example, + +```php +// ...WHERE (`status` = 10) AND (`type` IS NULL) AND (`id` IN (4, 8, 15)) +$query->where([ + 'status' => 10, + 'type' => null, + 'id' => [4, 8, 15], +]); +``` + +As you can see, the query builder is intelligent enough to properly handle values that are nulls or arrays. + +You can also use sub-queries with hash format like the following: + +```php +$userQuery = (new Query())->select('id')->from('user'); + +// ...WHERE `id` IN (SELECT `id` FROM `user`) +$query->where(['id' => $userQuery]); +``` + +Using the Hash Format, Yii internally applies parameter binding for values, so in contrast to the [string format](#string-format), +here you do not have to add parameters manually. However, note that Yii never escapes column names, so if you pass +a variable obtained from user side as a column name without any additional checks, the application will become vulnerable +to SQL injection attack. In order to keep the application secure, either do not use variables as column names or +filter variable against white list. In case you need to get column name from user, read the [Filtering Data](output-data-widgets.md#filtering-data) +guide article. For example the following code is vulnerable: + +```php +// Vulnerable code: +$column = $request->get('column'); +$value = $request->get('value'); +$query->where([$column => $value]); +// $value is safe, but $column name won't be encoded! +``` + +#### Operator Format + +Operator format allows you to specify arbitrary conditions in a programmatic way. It takes the following format: + +```php +[operator, operand1, operand2, ...] +``` + +where the operands can each be specified in string format, hash format or operator format recursively, while +the operator can be one of the following: + +- `and`: the operands should be concatenated together using `AND`. For example, + `['and', 'id=1', 'id=2']` will generate `id=1 AND id=2`. If an operand is an array, + it will be converted into a string using the rules described here. For example, + `['and', 'type=1', ['or', 'id=1', 'id=2']]` will generate `type=1 AND (id=1 OR id=2)`. + The method will NOT do any quoting or escaping. + +- `or`: similar to the `and` operator except that the operands are concatenated using `OR`. + +- `not`: requires only operand 1, which will be wrapped in `NOT()`. For example, `['not', 'id=1']` will generate `NOT (id=1)`. Operand 1 may also be an array to describe multiple expressions. For example `['not', ['status' => 'draft', 'name' => 'example']]` will generate `NOT ((status='draft') AND (name='example'))`. + +- `between`: operand 1 should be the column name, and operand 2 and 3 should be the + starting and ending values of the range that the column is in. + For example, `['between', 'id', 1, 10]` will generate `id BETWEEN 1 AND 10`. + In case you need to build a condition where value is between two columns (like `11 BETWEEN min_id AND max_id`), + you should use [[yii\db\conditions\BetweenColumnsCondition|BetweenColumnsCondition]]. + See [Conditions – Object Format](#object-format) chapter to learn more about object definition of conditions. + +- `not between`: similar to `between` except the `BETWEEN` is replaced with `NOT BETWEEN` + in the generated condition. + +- `in`: operand 1 should be a column or DB expression. Operand 2 can be either an array or a `Query` object. + It will generate an `IN` condition. If Operand 2 is an array, it will represent the range of the values + that the column or DB expression should be; If Operand 2 is a `Query` object, a sub-query will be generated + and used as the range of the column or DB expression. For example, + `['in', 'id', [1, 2, 3]]` will generate `id IN (1, 2, 3)`. + The method will properly quote the column name and escape values in the range. + The `in` operator also supports composite columns. In this case, operand 1 should be an array of the columns, + while operand 2 should be an array of arrays or a `Query` object representing the range of the columns. + +- `not in`: similar to the `in` operator except that `IN` is replaced with `NOT IN` in the generated condition. + +- `like`: operand 1 should be a column or DB expression, and operand 2 be a string or an array representing + the values that the column or DB expression should be like. + For example, `['like', 'name', 'tester']` will generate `name LIKE '%tester%'`. + When the value range is given as an array, multiple `LIKE` predicates will be generated and concatenated + using `AND`. For example, `['like', 'name', ['test', 'sample']]` will generate + `name LIKE '%test%' AND name LIKE '%sample%'`. + You may also provide an optional third operand to specify how to escape special characters in the values. + The operand should be an array of mappings from the special characters to their + escaped counterparts. If this operand is not provided, a default escape mapping will be used. + You may use `false` or an empty array to indicate the values are already escaped and no escape + should be applied. Note that when using an escape mapping (or the third operand is not provided), + the values will be automatically enclosed within a pair of percentage characters. + + > Note: When using PostgreSQL you may also use [`ilike`](http://www.postgresql.org/docs/8.3/static/functions-matching.html#FUNCTIONS-LIKE) + > instead of `like` for case-insensitive matching. + +- `or like`: similar to the `like` operator except that `OR` is used to concatenate the `LIKE` + predicates when operand 2 is an array. + +- `not like`: similar to the `like` operator except that `LIKE` is replaced with `NOT LIKE` + in the generated condition. + +- `or not like`: similar to the `not like` operator except that `OR` is used to concatenate + the `NOT LIKE` predicates. + +- `exists`: requires one operand which must be an instance of [[yii\db\Query]] representing the sub-query. + It will build an `EXISTS (sub-query)` expression. + +- `not exists`: similar to the `exists` operator and builds a `NOT EXISTS (sub-query)` expression. + +- `>`, `<=`, or any other valid DB operator that takes two operands: the first operand must be a column name + while the second operand a value. For example, `['>', 'age', 10]` will generate `age>10`. + +Using the Operator Format, Yii internally uses parameter binding for values, so in contrast to the [string format](#string-format), +here you do not have to add parameters manually. However, note that Yii never escapes column names, so if you pass +a variable as a column name, the application will likely become vulnerable to SQL injection attack. In order to keep +application secure, either do not use variables as column names or filter variable against white list. +In case you need to get column name from user, read the [Filtering Data](output-data-widgets.md#filtering-data) +guide article. For example the following code is vulnerable: + +```php +// Vulnerable code: +$column = $request->get('column'); +$value = $request->get('value); +$query->where(['=', $column, $value]); +// $value is safe, but $column name won't be encoded! +``` + +#### Object Format + +Object Form is available since 2.0.14 and is both most powerful and most complex way to define conditions. +You need to follow it either if you want to build your own abstraction over query builder or if you want to implement +your own complex conditions. + +Instances of condition classes are immutable. Their only purpose is to store condition data and provide getters +for condition builders. Condition builder is a class that holds the logic that transforms data +stored in condition into the SQL expression. + +Internally the formats described above are implicitly converted to object format prior to building raw SQL, +so it is possible to combine formats in a single condition: + +```php +$query->andWhere(new OrCondition([ + new InCondition('type', 'in', $types), + ['like', 'name', '%good%'], + 'disabled=false' +])) +``` + +Conversion from operator format into object format is performed according to +[[yii\db\QueryBuilder::conditionClasses|QueryBuilder::conditionClasses]] property, that maps operators names +to representative class names: + +- `AND`, `OR` -> `yii\db\conditions\ConjunctionCondition` +- `NOT` -> `yii\db\conditions\NotCondition` +- `IN`, `NOT IN` -> `yii\db\conditions\InCondition` +- `BETWEEN`, `NOT BETWEEN` -> `yii\db\conditions\BetweenCondition` + +And so on. + +Using the object format makes it possible to create your own conditions or to change the way default ones are built. +See [Adding Custom Conditions and Expressions](#adding-custom-conditions-and-expressions) chapter to learn more. + + +#### Appending Conditions + +You can use [[yii\db\Query::andWhere()|andWhere()]] or [[yii\db\Query::orWhere()|orWhere()]] to append +additional conditions to an existing one. You can call them multiple times to append multiple conditions +separately. For example, + +```php +$status = 10; +$search = 'yii'; + +$query->where(['status' => $status]); + +if (!empty($search)) { + $query->andWhere(['like', 'title', $search]); +} +``` + +If `$search` is not empty, the following `WHERE` condition will be generated: + +```sql +WHERE (`status` = 10) AND (`title` LIKE '%yii%') +``` + + +#### Filter Conditions + +When building `WHERE` conditions based on input from end users, you usually want to ignore those input values, that are empty. +For example, in a search form that allows you to search by username and email, you would like to ignore the username/email +condition if the user does not enter anything in the username/email input field. You can achieve this goal by +using the [[yii\db\Query::filterWhere()|filterWhere()]] method: + +```php +// $username and $email are from user inputs +$query->filterWhere([ + 'username' => $username, + 'email' => $email, +]); +``` + +The only difference between [[yii\db\Query::filterWhere()|filterWhere()]] and [[yii\db\Query::where()|where()]] +is that the former will ignore empty values provided in the condition in [hash format](#hash-format). So if `$email` +is empty while `$username` is not, the above code will result in the SQL condition `WHERE username=:username`. + +> Info: A value is considered empty if it is `null`, an empty array, an empty string or a string consisting of whitespaces only. + +Like [[yii\db\Query::andWhere()|andWhere()]] and [[yii\db\Query::orWhere()|orWhere()]], you can use +[[yii\db\Query::andFilterWhere()|andFilterWhere()]] and [[yii\db\Query::orFilterWhere()|orFilterWhere()]] +to append additional filter conditions to the existing one. + +Additionally, there is [[yii\db\Query::andFilterCompare()]] that can intelligently determine operator based on what's +in the value: + +```php +$query->andFilterCompare('name', 'John Doe'); +$query->andFilterCompare('rating', '>9'); +$query->andFilterCompare('value', '<=100'); +``` + +You can also specify operator explicitly: + +```php +$query->andFilterCompare('name', 'Doe', 'like'); +``` + +Since Yii 2.0.11 there are similar methods for `HAVING` condition: + +- [[yii\db\Query::filterHaving()|filterHaving()]] +- [[yii\db\Query::andFilterHaving()|andFilterHaving()]] +- [[yii\db\Query::orFilterHaving()|orFilterHaving()]] + +### [[yii\db\Query::orderBy()|orderBy()]] + +The [[yii\db\Query::orderBy()|orderBy()]] method specifies the `ORDER BY` fragment of a SQL query. For example, + +```php +// ... ORDER BY `id` ASC, `name` DESC +$query->orderBy([ + 'id' => SORT_ASC, + 'name' => SORT_DESC, +]); +``` + +In the above code, the array keys are column names while the array values are the corresponding order by directions. +The PHP constant `SORT_ASC` specifies ascending sort and `SORT_DESC` descending sort. + +If `ORDER BY` only involves simple column names, you can specify it using a string, just like you do when writing +raw SQL statements. For example, + +```php +$query->orderBy('id ASC, name DESC'); +``` + +> Note: You should use the array format if `ORDER BY` involves some DB expression. + +You can call [[yii\db\Query::addOrderBy()|addOrderBy()]] to add additional columns to the `ORDER BY` fragment. +For example, + +```php +$query->orderBy('id ASC') + ->addOrderBy('name DESC'); +``` + + +### [[yii\db\Query::groupBy()|groupBy()]] + +The [[yii\db\Query::groupBy()|groupBy()]] method specifies the `GROUP BY` fragment of a SQL query. For example, + +```php +// ... GROUP BY `id`, `status` +$query->groupBy(['id', 'status']); +``` + +If `GROUP BY` only involves simple column names, you can specify it using a string, just like you do when writing +raw SQL statements. For example, + +```php +$query->groupBy('id, status'); +``` + +> Note: You should use the array format if `GROUP BY` involves some DB expression. + +You can call [[yii\db\Query::addGroupBy()|addGroupBy()]] to add additional columns to the `GROUP BY` fragment. +For example, + +```php +$query->groupBy(['id', 'status']) + ->addGroupBy('age'); +``` + + +### [[yii\db\Query::having()|having()]] + +The [[yii\db\Query::having()|having()]] method specifies the `HAVING` fragment of a SQL query. It takes +a condition which can be specified in the same way as that for [where()](#where). For example, + +```php +// ... HAVING `status` = 1 +$query->having(['status' => 1]); +``` + +Please refer to the documentation for [where()](#where) for more details about how to specify a condition. + +You can call [[yii\db\Query::andHaving()|andHaving()]] or [[yii\db\Query::orHaving()|orHaving()]] to append +additional conditions to the `HAVING` fragment. For example, + +```php +// ... HAVING (`status` = 1) AND (`age` > 30) +$query->having(['status' => 1]) + ->andHaving(['>', 'age', 30]); +``` + + +### [[yii\db\Query::limit()|limit()]] and [[yii\db\Query::offset()|offset()]] + +The [[yii\db\Query::limit()|limit()]] and [[yii\db\Query::offset()|offset()]] methods specify the `LIMIT` +and `OFFSET` fragments of a SQL query. For example, + +```php +// ... LIMIT 10 OFFSET 20 +$query->limit(10)->offset(20); +``` + +If you specify an invalid limit or offset (e.g. a negative value), it will be ignored. + +> Info: For DBMS that do not support `LIMIT` and `OFFSET` (e.g. MSSQL), query builder will generate a SQL + statement that emulates the `LIMIT`/`OFFSET` behavior. + + +### [[yii\db\Query::join()|join()]] + +The [[yii\db\Query::join()|join()]] method specifies the `JOIN` fragment of a SQL query. For example, + +```php +// ... LEFT JOIN `post` ON `post`.`user_id` = `user`.`id` +$query->join('LEFT JOIN', 'post', 'post.user_id = user.id'); +``` + +The [[yii\db\Query::join()|join()]] method takes four parameters: + +- `$type`: join type, e.g., `'INNER JOIN'`, `'LEFT JOIN'`. +- `$table`: the name of the table to be joined. +- `$on`: optional, the join condition, i.e., the `ON` fragment. Please refer to [where()](#where) for details + about specifying a condition. Note, that the array syntax does **not** work for specifying a column based + condition, e.g. `['user.id' => 'comment.userId']` will result in a condition where the user id must be equal + to the string `'comment.userId'`. You should use the string syntax instead and specify the condition as + `'user.id = comment.userId'`. +- `$params`: optional, the parameters to be bound to the join condition. + +You can use the following shortcut methods to specify `INNER JOIN`, `LEFT JOIN` and `RIGHT JOIN`, respectively. + +- [[yii\db\Query::innerJoin()|innerJoin()]] +- [[yii\db\Query::leftJoin()|leftJoin()]] +- [[yii\db\Query::rightJoin()|rightJoin()]] + +For example, + +```php +$query->leftJoin('post', 'post.user_id = user.id'); +``` + +To join with multiple tables, call the above join methods multiple times, once for each table. + +Besides joining with tables, you can also join with sub-queries. To do so, specify the sub-queries to be joined +as [[yii\db\Query]] objects. For example, + +```php +$subQuery = (new \yii\db\Query())->from('post'); +$query->leftJoin(['u' => $subQuery], 'u.id = author_id'); +``` + +In this case, you should put the sub-query in an array and use the array key to specify the alias. + + +### [[yii\db\Query::union()|union()]] + +The [[yii\db\Query::union()|union()]] method specifies the `UNION` fragment of a SQL query. For example, + +```php +$query1 = (new \yii\db\Query()) + ->select("id, category_id AS type, name") + ->from('post') + ->limit(10); + +$query2 = (new \yii\db\Query()) + ->select('id, type, name') + ->from('user') + ->limit(10); + +$query1->union($query2); +``` + +You can call [[yii\db\Query::union()|union()]] multiple times to append more `UNION` fragments. + + +## Query Methods + +[[yii\db\Query]] provides a whole set of methods for different query purposes: + +- [[yii\db\Query::all()|all()]]: returns an array of rows with each row being an associative array of name-value pairs. +- [[yii\db\Query::one()|one()]]: returns the first row of the result. +- [[yii\db\Query::column()|column()]]: returns the first column of the result. +- [[yii\db\Query::scalar()|scalar()]]: returns a scalar value located at the first row and first column of the result. +- [[yii\db\Query::exists()|exists()]]: returns a value indicating whether the query contains any result. +- [[yii\db\Query::count()|count()]]: returns the result of a `COUNT` query. +- Other aggregation query methods, including [[yii\db\Query::sum()|sum($q)]], [[yii\db\Query::average()|average($q)]], + [[yii\db\Query::max()|max($q)]], [[yii\db\Query::min()|min($q)]]. The `$q` parameter is mandatory for these methods + and can be either a column name or a DB expression. + +For example, + +```php +// SELECT `id`, `email` FROM `user` +$rows = (new \yii\db\Query()) + ->select(['id', 'email']) + ->from('user') + ->all(); + +// SELECT * FROM `user` WHERE `username` LIKE `%test%` +$row = (new \yii\db\Query()) + ->from('user') + ->where(['like', 'username', 'test']) + ->one(); +``` + +> Note: The [[yii\db\Query::one()|one()]] method only returns the first row of the query result. It does NOT + add `LIMIT 1` to the generated SQL statement. This is fine and preferred if you know the query will return only one + or a few rows of data (e.g. if you are querying with some primary keys). However, if the query may potentially + result in many rows of data, you should call `limit(1)` explicitly to improve the performance, e.g., + `(new \yii\db\Query())->from('user')->limit(1)->one()`. + +All these query methods take an optional `$db` parameter representing the [[yii\db\Connection|DB connection]] that +should be used to perform a DB query. If you omit this parameter, the `db` [application component](structure-application-components.md) will be used +as the DB connection. Below is another example using the [[yii\db\Query::count()|count()]] query method: + +```php +// executes SQL: SELECT COUNT(*) FROM `user` WHERE `last_name`=:last_name +$count = (new \yii\db\Query()) + ->from('user') + ->where(['last_name' => 'Smith']) + ->count(); +``` + +When you call a query method of [[yii\db\Query]], it actually does the following work internally: + +* Call [[yii\db\QueryBuilder]] to generate a SQL statement based on the current construct of [[yii\db\Query]]; +* Create a [[yii\db\Command]] object with the generated SQL statement; +* Call a query method (e.g. [[yii\db\Command::queryAll()|queryAll()]]) of [[yii\db\Command]] to execute the SQL statement and retrieve the data. + +Sometimes, you may want to examine or use the SQL statement built from a [[yii\db\Query]] object. You can +achieve this goal with the following code: + +```php +$command = (new \yii\db\Query()) + ->select(['id', 'email']) + ->from('user') + ->where(['last_name' => 'Smith']) + ->limit(10) + ->createCommand(); + +// show the SQL statement +echo $command->sql; +// show the parameters to be bound +print_r($command->params); + +// returns all rows of the query result +$rows = $command->queryAll(); +``` + + +### Indexing Query Results + +When you call [[yii\db\Query::all()|all()]], it will return an array of rows which are indexed by consecutive integers. +Sometimes you may want to index them differently, such as indexing by a particular column or expression values. +You can achieve this goal by calling [[yii\db\Query::indexBy()|indexBy()]] before [[yii\db\Query::all()|all()]]. +For example, + +```php +// returns [100 => ['id' => 100, 'username' => '...', ...], 101 => [...], 103 => [...], ...] +$query = (new \yii\db\Query()) + ->from('user') + ->limit(10) + ->indexBy('id') + ->all(); +``` + +To index by expression values, pass an anonymous function to the [[yii\db\Query::indexBy()|indexBy()]] method: + +```php +$query = (new \yii\db\Query()) + ->from('user') + ->indexBy(function ($row) { + return $row['id'] . $row['username']; + })->all(); +``` + +The anonymous function takes a parameter `$row` which contains the current row data and should return a scalar +value which will be used as the index value for the current row. + +> Note: In contrast to query methods like [[yii\db\Query::groupBy()|groupBy()]] or [[yii\db\Query::orderBy()|orderBy()]] +> which are converted to SQL and are part of the query, this method works after the data has been fetched from the database. +> That means that only those column names can be used that have been part of SELECT in your query. +> Also if you selected a column with table prefix, e.g. `customer.id`, the result set will only contain `id` so you have to call +> `->indexBy('id')` without table prefix. + + +### Batch Query + +When working with large amounts of data, methods such as [[yii\db\Query::all()]] are not suitable +because they require loading the whole query result into the client's memory. To solve this issue +Yii provides batch query support. The server holds the query result, and the client uses a cursor +to iterate over the result set one batch at a time. + +> Warning: There are known limitations and workarounds for the MySQL implementation of batch queries. See below. + +Batch query can be used like the following: + +```php +use yii\db\Query; + +$query = (new Query()) + ->from('user') + ->orderBy('id'); + +foreach ($query->batch() as $users) { + // $users is an array of 100 or fewer rows from the user table +} + +// or to iterate the row one by one +foreach ($query->each() as $user) { + // data is being fetched from the server in batches of 100, + // but $user represents one row of data from the user table +} +``` + +The method [[yii\db\Query::batch()]] and [[yii\db\Query::each()]] return an [[yii\db\BatchQueryResult]] +object which implements the `Iterator` interface and thus can be used in the `foreach` construct. +During the first iteration, a SQL query is made to the database. Data is then fetched in batches +in the remaining iterations. By default, the batch size is 100, meaning 100 rows of data are being fetched in each batch. +You can change the batch size by passing the first parameter to the `batch()` or `each()` method. + +Compared to the [[yii\db\Query::all()]], the batch query only loads 100 rows of data at a time into the memory. + +If you specify the query result to be indexed by some column via [[yii\db\Query::indexBy()]], +the batch query will still keep the proper index. + +For example: + +```php +$query = (new \yii\db\Query()) + ->from('user') + ->indexBy('username'); + +foreach ($query->batch() as $users) { + // $users is indexed by the "username" column +} + +foreach ($query->each() as $username => $user) { + // ... +} +``` + +#### Limitations of batch query in MySQL + +MySQL implementation of batch queries relies on the PDO driver library. By default, MySQL queries are +[`buffered`](http://php.net/manual/en/mysqlinfo.concepts.buffering.php). This defeats the purpose +of using the cursor to get the data, because it doesn't prevent the whole result set from being +loaded into the client's memory by the driver. + +> Note: When `libmysqlclient` is used (typical of PHP5), PHP's memory limit won't count the memory + used for result sets. It may seem that batch queries work correctly, but in reality the whole + dataset is loaded into client's memory, and has the potential of using it up. + +To disable buffering and reduce client memory requirements, PDO connection property +`PDO::MYSQL_ATTR_USE_BUFFERED_QUERY` must be set to `false`. However, until the whole dataset has +been retrieved, no other query can be made through the same connection. This may prevent `ActiveRecord` +from making a query to get the table schema when it needs to. If this is not a problem +(the table schema is cached already), it is possible to switch the original connection into +unbuffered mode, and then roll back when the batch query is done. + +```php +Yii::$app->db->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + +// Do batch query + +Yii::$app->db->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); +``` + +> Note: In the case of MyISAM, for the duration of the batch query, the table may become locked, + delaying or denying write access for other connections. When using unbuffered queries, + try to keep the cursor open for as little time as possible. + +If the schema is not cached, or it is necessary to run other queries while the batch query is +being processed, you can create a separate unbuffered connection to the database: + +```php +$unbufferedDb = new \yii\db\Connection([ + 'dsn' => Yii::$app->db->dsn, + 'username' => Yii::$app->db->username, + 'password' => Yii::$app->db->password, + 'charset' => Yii::$app->db->charset, +]); +$unbufferedDb->open(); +$unbufferedDb->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); +``` + +If you want to ensure that the `$unbufferedDb` has exactly the same PDO attributes like the original +buffered `$db` but the `PDO::MYSQL_ATTR_USE_BUFFERED_QUERY` is `false`, +[consider a deep copy of `$db`](https://github.com/yiisoft/yii2/issues/8420#issuecomment-301423833), +set it to false manually. + +Then, queries are created normally. The new connection is used to run batch queries and retrieve +results either in batches or one by one: + +```php +// getting data in batches of 1000 +foreach ($query->batch(1000, $unbufferedDb) as $users) { + // ... +} + + +// data is fetched from server in batches of 1000, but is iterated one by one +foreach ($query->each(1000, $unbufferedDb) as $user) { + // ... +} +``` + +When the connection is no longer necessary and the result set has been retrieved, it can be closed: + +```php +$unbufferedDb->close(); +``` + +> Note: unbuffered query uses less memory on the PHP-side, but can increase the load on the MySQL server. +It is recommended to design your own code with your production practice for extra massive data, +[for example, divide the range for integer keys, loop them with Unbuffered Queries](https://github.com/yiisoft/yii2/issues/8420#issuecomment-296109257). + +### Adding custom Conditions and Expressions + +As it was mentioned in [Conditions – Object Format](#object-format) chapter, it is possible to create custom condition +classes. For example, let's create a condition that will check that specific columns are less than some value. +Using the operator format, it would look like the following: + +```php +[ + 'and', + '>', 'posts', $minLimit, + '>', 'comments', $minLimit, + '>', 'reactions', $minLimit, + '>', 'subscriptions', $minLimit +] +``` + +When such condition applied once, it is fine. In case it is used multiple times in a single query it can +be optimized a lot. Let's create a custom condition object to demonstrate it. + +Yii has a [[yii\db\conditions\ConditionInterface|ConditionInterface]], that must be used to mark classes, that represent +a condition. It requires `fromArrayDefinition()` method implementation, in order to make possible to create condition +from array format. In case you don't need it, you can implement this method with exception throwing. + +Since we create our custom condition class, we can build API that suits our task the most. + +```php +namespace app\db\conditions; + +class AllGreaterCondition implements \yii\db\conditions\ConditionInterface +{ + private $columns; + private $value; + + /** + * @param string[] $columns Array of columns that must be greater, than $value + * @param mixed $value the value to compare each $column against. + */ + public function __construct(array $columns, $value) + { + $this->columns = $columns; + $this->value = $value; + } + + public static function fromArrayDefinition($operator, $operands) + { + throw new InvalidArgumentException('Not implemented yet, but we will do it later'); + } + + public function getColumns() { return $this->columns; } + public function getValue() { return $this->vaule; } +} +``` + +So we can create a condition object: + +```php +$conditon = new AllGreaterCondition(['col1', 'col2'], 42); +``` + +But `QueryBuilder` still does not know, to make an SQL condition out of this object. +Now we need to create a builder for this condition. It must implement [[yii\db\ExpressionBuilderInterface]] +that requires us to implement a `build()` method. + +```php +namespace app\db\conditions; + +class AllGreaterConditionBuilder implements \yii\db\ExpressionBuilderInterface +{ + use \yii\db\ExpressionBuilderTrait; // Contains constructor and `queryBuilder` property. + + /** + * @param ExpressionInterface $condition the condition to be built + * @param array $params the binding parameters. + * @return AllGreaterCondition + */ + public function build(ExpressionInterface $expression, array &$params = []) + { + $value = $condition->getValue(); + + $conditions = []; + foreach ($expression->getColumns() as $column) { + $conditions[] = new SimpleCondition($column, '>', $value); + } + + return $this->queryBuilder->buildCondition(new AndCondition($conditions), $params); + } +} +``` + +Then simple let [[yii\db\QueryBuilder|QueryBuilder]] know about our new condition – add a mapping for it to +the `expressionBuilders` array. It could be done right from the application configuration: + +```php +'db' => [ + 'class' => 'yii\db\mysql\Connection', + // ... + 'queryBuilder' => [ + 'expressionBuilders' => [ + 'app\db\conditions\AllGreaterCondition' => 'app\db\conditions\AllGreaterConditionBuilder', + ], + ], +], +``` + +Now we can use our condition in `where()`: + +```php +$query->andWhere(new AllGreaterCondition(['posts', 'comments', 'reactions', 'subscriptions'], $minValue)); +``` + +If we want to make it possible to create our custom condition using operator format, we should declare it in +[[yii\db\QueryBuilder::conditionClasses|QueryBuilder::conditionClasses]]: + +```php +'db' => [ + 'class' => 'yii\db\mysql\Connection', + // ... + 'queryBuilder' => [ + 'expressionBuilders' => [ + 'app\db\conditions\AllGreaterCondition' => 'app\db\conditions\AllGreaterConditionBuilder', + ], + 'conditionClasses' => [ + 'ALL>' => 'app\db\conditions\AllGreaterCondition', + ], + ], +], +``` + +And create a real implementation of `AllGreaterCondition::fromArrayDefinition()` method +in `app\db\conditions\AllGreaterCondition`: + +```php +namespace app\db\conditions; + +class AllGreaterCondition implements \yii\db\conditions\ConditionInterface +{ + // ... see the implementation above + + public static function fromArrayDefinition($operator, $operands) + { + return new static($operands[0], $operands[1]); + } +} +``` + +After that, we can create our custom condition using shorter operator format: + +```php +$query->andWhere(['ALL>', ['posts', 'comments', 'reactions', 'subscriptions'], $minValue]); +``` + +You might notice, that there was two concepts used: Expressions and Conditions. There is a [[yii\db\ExpressionInterface]] +that should be used to mark objects, that require an Expression Builder class, that implements +[[yii\db\ExpressionBuilderInterface]] to be built. Also there is a [[yii\db\condition\ConditionInterface]], that extends +[[yii\db\ExpressionInterface|ExpressionInterface]] and should be used to objects, that can be created from array definition +as it was shown above, but require builder as well. + +To summarise: + +- Expression – is a Data Transfer Object (DTO) for a dataset, that can be somehow compiled to some SQL +statement (an operator, string, array, JSON, etc). +- Condition – is an Expression superset, that aggregates multiple Expressions (or scalar values) that can be compiled +to a single SQL condition. + +You can create your own classes that implement [[yii\db\ExpressionInterface|ExpressionInterface]] to hide the complexity +of transforming data to SQL statements. You will learn more about other examples of Expressions in the +[next article](db-active-record.md); diff --git a/docs/guide-ar/glossary.md b/docs/guide-ar/glossary.md new file mode 100644 index 0000000..43623e3 --- /dev/null +++ b/docs/guide-ar/glossary.md @@ -0,0 +1,67 @@ +# A + +## alias + +Alias is a string that's used by Yii to refer to the class or directory such as `@app/vendor`. + +## application + +The application is the central object during HTTP request. It contains a number of components and with these is getting info from request and dispatching it to an appropriate controller for further processing. + +The application object is instantiated as a singleton by the entry script. The application singleton can be accessed at any place via `\Yii::$app`. + +## assets + +Asset refers to a resource file. Typically it contains JavaScript or CSS code but can be anything else that is accessed via HTTP. + +## attribute + +An attribute is a model property (a class member variable or a magic property defined via `__get()`/`__set()`) that stores **business data**. + +# B + +## bundle + +Bundle, known as package in Yii 1.1, refers to a number of assets and a configuration file that describes dependencies and lists assets. + +# C + +## configuration + +Configuration may refer either to the process of setting properties of an object or to a configuration file that stores settings for an object or a class of objects. + +# E + +## extension + +Extension is a set of classes, asset bundles and configurations that adds more features to the application. + +# I + +## installation + +Installation is a process of preparing something to work either by following a readme file or by executing specially prepared script. In case of Yii it's setting permissions and fullfilling software requirements. + +# M + +## module + +Module is a sub-application which contains MVC elements by itself, such as models, views, controllers, etc. and can be used withing the main application. Typically by forwarding requests to the module instead of handling it via controllers. + +# N + +## namespace + +Namespace refers to a [PHP language feature](http://php.net/manual/en/language.namespaces.php) which is actively used in Yii 2. + +# P + +## package + +[See bundle](#bundle). + +# V + +## vendor + +Vendor is an organization or individual developer providing code in form of extensions, modules or libraries. \ No newline at end of file diff --git a/docs/guide-ar/helper-array.md b/docs/guide-ar/helper-array.md new file mode 100644 index 0000000..f317eab --- /dev/null +++ b/docs/guide-ar/helper-array.md @@ -0,0 +1,484 @@ +ArrayHelper +=========== + +Additionally to the [rich set of PHP array functions](http://php.net/manual/en/book.array.php), the Yii array helper provides +extra static methods allowing you to deal with arrays more efficiently. + + +## Getting Values + +Retrieving values from an array, an object or a complex structure consisting of both using standard PHP is quite +repetitive. You have to check if key exists with `isset` first, then if it does you're getting it, if not, +providing default value: + +```php +class User +{ + public $name = 'Alex'; +} + +$array = [ + 'foo' => [ + 'bar' => new User(), + ] +]; + +$value = isset($array['foo']['bar']->name) ? $array['foo']['bar']->name : null; +``` + +Yii provides a very convenient method to do it: + +```php +$value = ArrayHelper::getValue($array, 'foo.bar.name'); +``` + +First method argument is where we're getting value from. Second argument specifies how to get the data. It could be one +of the following: + +- Name of array key or object property to retrieve value from. +- Set of dot separated array keys or object property names. The one we've used in the example above. +- A callback returning a value. + +The callback should be the following: + +```php +$fullName = ArrayHelper::getValue($user, function ($user, $defaultValue) { + return $user->firstName . ' ' . $user->lastName; +}); +``` + +Third optional argument is default value which is `null` if not specified. Could be used as follows: + +```php +$username = ArrayHelper::getValue($comment, 'user.username', 'Unknown'); +``` + + +## Setting values + +```php +$array = [ + 'key' => [ + 'in' => ['k' => 'value'] + ] +]; + +ArrayHelper::setValue($array, 'key.in', ['arr' => 'val']); +// the path to write the value in `$array` can be specified as an array +ArrayHelper::setValue($array, ['key', 'in'], ['arr' => 'val']); +``` + +As a result, initial value of `$array['key']['in']` will be overwritten by new value + +```php +[ + 'key' => [ + 'in' => ['arr' => 'val'] + ] +] +``` + +If the path contains a nonexistent key, it will be created + +```php +// if `$array['key']['in']['arr0']` is not empty, the value will be added to the array +ArrayHelper::setValue($array, 'key.in.arr0.arr1', 'val'); + +// if you want to completely override the value `$array['key']['in']['arr0']` +ArrayHelper::setValue($array, 'key.in.arr0', ['arr1' => 'val']); +``` + +The result will be + +```php +[ + 'key' => [ + 'in' => [ + 'k' => 'value', + 'arr0' => ['arr1' => 'val'] + ] + ] +] +``` + + +## Take a value from an array + +In case you want to get a value and then immediately remove it from an array you can use `remove` method: + +```php +$array = ['type' => 'A', 'options' => [1, 2]]; +$type = ArrayHelper::remove($array, 'type'); +``` + +After executing the code `$array` will contain `['options' => [1, 2]]` and `$type` will be `A`. Note that unlike +`getValue` method, `remove` supports simple key names only. + + +## Checking Existence of Keys + +`ArrayHelper::keyExists` works the same way as [array_key_exists](http://php.net/manual/en/function.array-key-exists.php) +except that it also supports case-insensitive key comparison. For example, + +```php +$data1 = [ + 'userName' => 'Alex', +]; + +$data2 = [ + 'username' => 'Carsten', +]; + +if (!ArrayHelper::keyExists('username', $data1, false) || !ArrayHelper::keyExists('username', $data2, false)) { + echo "Please provide username."; +} +``` + +## Retrieving Columns + +Often you need to get a column of values from array of data rows or objects. Common example is getting a list of IDs. + +```php +$array = [ + ['id' => '123', 'data' => 'abc'], + ['id' => '345', 'data' => 'def'], +]; +$ids = ArrayHelper::getColumn($array, 'id'); +``` + +The result will be `['123', '345']`. + +If additional transformations are required or the way of getting value is complex, second argument could be specified +as an anonymous function: + +```php +$result = ArrayHelper::getColumn($array, function ($element) { + return $element['id']; +}); +``` + + +## Re-indexing Arrays + +In order to index an array according to a specified key, the `index` method can be used. The input should be either +multidimensional array or an array of objects. The `$key` can be either a key name of the sub-array, a property name of +object, or an anonymous function that must return the value that will be used as a key. + +The `$groups` attribute is an array of keys, that will be used to group the input array into one or more sub-arrays +based on keys specified. + +If the `$key` attribute or its value for the particular element is `null` and `$groups` is not defined, the array +element will be discarded. Otherwise, if `$groups` is specified, array element will be added to the result array +without any key. + +For example: + +```php +$array = [ + ['id' => '123', 'data' => 'abc', 'device' => 'laptop'], + ['id' => '345', 'data' => 'def', 'device' => 'tablet'], + ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'], +]; +$result = ArrayHelper::index($array, 'id'); +``` + +The result will be an associative array, where the key is the value of `id` attribute: + +```php +[ + '123' => ['id' => '123', 'data' => 'abc', 'device' => 'laptop'], + '345' => ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'] + // The second element of an original array is overwritten by the last element because of the same id +] +``` + +Anonymous function, passed as a `$key`, gives the same result: + +```php +$result = ArrayHelper::index($array, function ($element) { + return $element['id']; +}); +``` + +Passing `id` as a third argument will group `$array` by `id`: + +```php +$result = ArrayHelper::index($array, null, 'id'); +``` + +The result will be a multidimensional array grouped by `id` on the first level and not indexed on the second level: + +```php +[ + '123' => [ + ['id' => '123', 'data' => 'abc', 'device' => 'laptop'] + ], + '345' => [ // all elements with this index are present in the result array + ['id' => '345', 'data' => 'def', 'device' => 'tablet'], + ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'], + ] +] +``` + +An anonymous function can be used in the grouping array as well: + +```php +$result = ArrayHelper::index($array, 'data', [function ($element) { + return $element['id']; +}, 'device']); +``` + +The result will be a multidimensional array grouped by `id` on the first level, by `device` on the second level and +indexed by `data` on the third level: + +```php +[ + '123' => [ + 'laptop' => [ + 'abc' => ['id' => '123', 'data' => 'abc', 'device' => 'laptop'] + ] + ], + '345' => [ + 'tablet' => [ + 'def' => ['id' => '345', 'data' => 'def', 'device' => 'tablet'] + ], + 'smartphone' => [ + 'hgi' => ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'] + ] + ] +] +``` + +## Building Maps + +In order to build a map (key-value pairs) from a multidimensional array or an array of objects you can use `map` method. +The `$from` and `$to` parameters specify the key names or property names to set up the map. Optionally, one can further +group the map according to a grouping field `$group`. For example, + +```php +$array = [ + ['id' => '123', 'name' => 'aaa', 'class' => 'x'], + ['id' => '124', 'name' => 'bbb', 'class' => 'x'], + ['id' => '345', 'name' => 'ccc', 'class' => 'y'], +]; + +$result = ArrayHelper::map($array, 'id', 'name'); +// the result is: +// [ +// '123' => 'aaa', +// '124' => 'bbb', +// '345' => 'ccc', +// ] + +$result = ArrayHelper::map($array, 'id', 'name', 'class'); +// the result is: +// [ +// 'x' => [ +// '123' => 'aaa', +// '124' => 'bbb', +// ], +// 'y' => [ +// '345' => 'ccc', +// ], +// ] +``` + + +## Multidimensional Sorting + +`multisort` method helps to sort an array of objects or nested arrays by one or several keys. For example, + +```php +$data = [ + ['age' => 30, 'name' => 'Alexander'], + ['age' => 30, 'name' => 'Brian'], + ['age' => 19, 'name' => 'Barney'], +]; +ArrayHelper::multisort($data, ['age', 'name'], [SORT_ASC, SORT_DESC]); +``` + +After sorting we'll get the following in `$data`: + +```php +[ + ['age' => 19, 'name' => 'Barney'], + ['age' => 30, 'name' => 'Brian'], + ['age' => 30, 'name' => 'Alexander'], +]; +``` + +Second argument that specifies keys to sort by can be a string if it's a single key, an array in case of multiple keys +or an anonymous function like the following one: + +```php +ArrayHelper::multisort($data, function($item) { + return isset($item['age']) ? ['age', 'name'] : 'name'; +}); +``` + +Third argument is direction. In case of sorting by a single key it could be either `SORT_ASC` or +`SORT_DESC`. If sorting by multiple values you can sort each value differently by providing an array of +sort direction. + +Last argument is PHP sort flag that could take the same values as the ones passed to +PHP [sort()](http://php.net/manual/en/function.sort.php). + + +## Detecting Array Types + +It is handy to know whether an array is indexed or an associative. Here's an example: + +```php +// no keys specified +$indexed = ['Qiang', 'Paul']; +echo ArrayHelper::isIndexed($indexed); + +// all keys are strings +$associative = ['framework' => 'Yii', 'version' => '2.0']; +echo ArrayHelper::isAssociative($associative); +``` + + +## HTML Encoding and Decoding Values + +In order to encode or decode special characters in an array of strings into HTML entities you can use the following: + +```php +$encoded = ArrayHelper::htmlEncode($data); +$decoded = ArrayHelper::htmlDecode($data); +``` + +Only values will be encoded by default. By passing second argument as `false` you can encode array's keys as well. +Encoding will use application charset and could be changed via third argument. + + +## Merging Arrays + +You can use [[yii\helpers\ArrayHelper::merge()|ArrayHelper::merge()]] to merge two or more arrays into one recursively. +If each array has an element with the same string key value, the latter will overwrite the former +(different from [array_merge_recursive()](http://php.net/manual/en/function.array-merge-recursive.php)). +Recursive merging will be conducted if both arrays have an element of array type and are having the same key. +For integer-keyed elements, the elements from the latter array will be appended to the former array. +You can use [[yii\helpers\UnsetArrayValue]] object to unset value from previous array or +[[yii\helpers\ReplaceArrayValue]] to force replace former value instead of recursive merging. + +For example: + +```php +$array1 = [ + 'name' => 'Yii', + 'version' => '1.1', + 'ids' => [ + 1, + ], + 'validDomains' => [ + 'example.com', + 'www.example.com', + ], + 'emails' => [ + 'admin' => 'admin@example.com', + 'dev' => 'dev@example.com', + ], +]; + +$array2 = [ + 'version' => '2.0', + 'ids' => [ + 2, + ], + 'validDomains' => new \yii\helpers\ReplaceArrayValue([ + 'yiiframework.com', + 'www.yiiframework.com', + ]), + 'emails' => [ + 'dev' => new \yii\helpers\UnsetArrayValue(), + ], +]; + +$result = ArrayHelper::merge($array1, $array2); +``` + +The result will be: + +```php +[ + 'name' => 'Yii', + 'version' => '2.0', + 'ids' => [ + 1, + 2, + ], + 'validDomains' => [ + 'yiiframework.com', + 'www.yiiframework.com', + ], + 'emails' => [ + 'admin' => 'admin@example.com', + ], +] +``` + + +## Converting Objects to Arrays + +Often you need to convert an object or an array of objects into an array. The most common case is converting active record +models in order to serve data arrays via REST API or use it otherwise. The following code could be used to do it: + +```php +$posts = Post::find()->limit(10)->all(); +$data = ArrayHelper::toArray($posts, [ + 'app\models\Post' => [ + 'id', + 'title', + // the key name in array result => property name + 'createTime' => 'created_at', + // the key name in array result => anonymous function + 'length' => function ($post) { + return strlen($post->content); + }, + ], +]); +``` + +The first argument contains the data we want to convert. In our case we're converting a `Post` AR model. + +The second argument is conversion mapping per class. We're setting a mapping for `Post` model. +Each mapping array contains a set of mappings. Each mapping could be: + +- A field name to include as is. +- A key-value pair of desired array key name and model column name to take value from. +- A key-value pair of desired array key name and a callback which returns value. + +The result of conversion above for single model will be: + + +```php +[ + 'id' => 123, + 'title' => 'test', + 'createTime' => '2013-01-01 12:00AM', + 'length' => 301, +] +``` + +It is possible to provide default way of converting object to array for a specific class by implementing +[[yii\base\Arrayable|Arrayable]] interface in that class. + +## Testing against Arrays + +Often you need to check if an element is in an array or a set of elements is a subset of another. +While PHP offers `in_array()`, this does not support subsets or `\Traversable` objects. + +To aid these kinds of tests, [[yii\helpers\ArrayHelper]] provides [[yii\helpers\ArrayHelper::isIn()|isIn()]] +and [[yii\helpers\ArrayHelper::isSubset()|isSubset()]] with the same signature as +[in_array()](http://php.net/manual/en/function.in-array.php). + +```php +// true +ArrayHelper::isIn('a', ['a']); +// true +ArrayHelper::isIn('a', new ArrayObject(['a'])); + +// true +ArrayHelper::isSubset(new ArrayObject(['a', 'c']), new ArrayObject(['a', 'b', 'c'])); +``` diff --git a/docs/guide-ar/helper-html.md b/docs/guide-ar/helper-html.md new file mode 100644 index 0000000..9523041 --- /dev/null +++ b/docs/guide-ar/helper-html.md @@ -0,0 +1,422 @@ +Html helper +=========== + +Every web application generates lots of HTML markup. If the markup is static, it can be done efficiently by +[mixing PHP and HTML in a single file](http://php.net/manual/en/language.basic-syntax.phpmode.php), but when it is +generated dynamically it starts to get tricky to handle it without extra help. Yii provides such help in the form +of an Html helper, which provides a set of static methods for handling commonly used HTML tags, their options, and their content. + +> Note: If your markup is nearly static, it's better to use HTML directly. There's no need to wrap absolutely everything + in Html helper calls. + + +## Basics + +Since building dynamic HTML by string concatenation can get messy very fast, Yii provides a set of methods to +manipulate tag options and build tags based on these options. + + +### Generating Tags + +The code for generating a tag looks like the following: + +```php +name), ['class' => 'username']) ?> +``` + +The first argument is the tag name. The second one is the content to be enclosed between the start and end tags. +Note that we are using `Html::encode` — that's because the content isn't encoded automatically to allow using HTML when needed. +The third one is an array of HTML options, or in other words, tag attributes. +In this array the key is the name of the attribute (such as `class`, `href` or `target`), and the value is its value. + +The code above will generate the following HTML: + +```html +

samdark

+``` + +In case you need just an opening or closing tag, you can use the `Html::beginTag()` and `Html::endTag()` methods. + +Options are used in many methods of the Html helper and various widgets. In all these cases there is some extra handling to +know about: + +- If a value is `null`, the corresponding attribute will not be rendered. +- Attributes whose values are of boolean type will be treated as + [boolean attributes](http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes). +- The values of attributes will be HTML-encoded using [[yii\helpers\Html::encode()|Html::encode()]]. +- If the value of an attribute is an array, it will be handled as follows: + + * If the attribute is a data attribute as listed in [[yii\helpers\Html::$dataAttributes]], such as `data` or `ng`, + a list of attributes will be rendered, one for each element in the value array. For example, + `'data' => ['id' => 1, 'name' => 'yii']` generates `data-id="1" data-name="yii"`; and + `'data' => ['params' => ['id' => 1, 'name' => 'yii'], 'status' => 'ok']` generates + `data-params='{"id":1,"name":"yii"}' data-status="ok"`. Note that in the latter example JSON format is used + to render a sub-array. + * If the attribute is NOT a data attribute, the value will be JSON-encoded. For example, + `['params' => ['id' => 1, 'name' => 'yii']` generates `params='{"id":1,"name":"yii"}'`. + + +### Forming CSS Classes and Styles + +When building options for HTML tags we often start with defaults which we need to modify. In order to add or +remove a CSS class you can use the following: + +```php +$options = ['class' => 'btn btn-default']; + +if ($type === 'success') { + Html::removeCssClass($options, 'btn-default'); + Html::addCssClass($options, 'btn-success'); +} + +echo Html::tag('div', 'Pwede na', $options); + +// if the value of $type is 'success' it will render +//
Pwede na
+``` + +You may specify multiple CSS classes using the array style as well: + +```php +$options = ['class' => ['btn', 'btn-default']]; + +echo Html::tag('div', 'Save', $options); +// renders '
Save
' +``` + +You may also use the array style when adding or removing classes: + +```php +$options = ['class' => 'btn']; + +if ($type === 'success') { + Html::addCssClass($options, ['btn-success', 'btn-lg']); +} + +echo Html::tag('div', 'Save', $options); +// renders '
Save
' +``` + +`Html::addCssClass()` prevents duplication, so you don't need to worry about the same class appearing twice: + +```php +$options = ['class' => 'btn btn-default']; + +Html::addCssClass($options, 'btn-default'); // class 'btn-default' is already present + +echo Html::tag('div', 'Save', $options); +// renders '
Save
' +``` + +If the CSS class option is specified using the array style, you may use a named key to mark the logical purpose of the class. +In this case, a class with the same key in the array style will be ignored in `Html::addCssClass()`: + +```php +$options = [ + 'class' => [ + 'btn', + 'theme' => 'btn-default', + ] +]; + +Html::addCssClass($options, ['theme' => 'btn-success']); // 'theme' key is already taken + +echo Html::tag('div', 'Save', $options); +// renders '
Save
' +``` + +CSS styles can be set up in similar way using the `style` attribute: + +```php +$options = ['style' => ['width' => '100px', 'height' => '100px']]; + +// gives style="width: 100px; height: 200px; position: absolute;" +Html::addCssStyle($options, 'height: 200px; position: absolute;'); + +// gives style="position: absolute;" +Html::removeCssStyle($options, ['width', 'height']); +``` + +When using [[yii\helpers\Html::addCssStyle()|addCssStyle()]], you can specify either an array of key-value pairs, +corresponding to CSS property names and values, or a string such as `width: 100px; height: 200px;`. These formats +can be converted from one to the other using [[yii\helpers\Html::cssStyleFromArray()|cssStyleFromArray()]] and +[[yii\helpers\Html::cssStyleToArray()|cssStyleToArray()]]. The [[yii\helpers\Html::removeCssStyle()|removeCssStyle()]] +method accepts an array of properties to remove. If it's a single property, it can be specified as a string. + + +### Encoding and Decoding Content + +In order for content to be displayed properly and securely in HTML, special characters in the content should be encoded. +In PHP this is done with [htmlspecialchars](http://www.php.net/manual/en/function.htmlspecialchars.php) and +[htmlspecialchars_decode](http://www.php.net/manual/en/function.htmlspecialchars-decode.php). The issue with using +these methods directly is that you have to specify encoding and extra flags all the time. Since these flags are the same +all the time and the encoding should match the one of the application in order to prevent security issues, Yii provides two +compact and simple-to-use methods: + +```php +$userName = Html::encode($user->name); +echo $userName; + +$decodedUserName = Html::decode($userName); +``` + + +## Forms + +Dealing with form markup is quite repetitive and error prone. Because of that, there is a group of methods to help +dealing with them. + +> Note: consider using [[yii\widgets\ActiveForm|ActiveForm]] in case you're dealing with models and need validation. + + +### Creating Forms + +Forms can be opened with [[yii\helpers\Html::beginForm()|beginForm()]] method like the following: + +```php + $id], 'post', ['enctype' => 'multipart/form-data']) ?> +``` + +The first argument is the URL the form will be submitted to. It can be specified in the form of a Yii route and parameters accepted by [[yii\helpers\Url::to()|Url::to()]]. +The second one is the method to use. `post` is the default. The third one is an array of options +for the form tag. In this case we're changing the encoding of the form data in the POST request to `multipart/form-data`, +which is required in order to upload files. + +Closing the form tag is simple: + +```php + +``` + + +### Buttons + +In order to generate buttons, you can use the following code: + +```php + 'teaser']) ?> + 'submit']) ?> + 'reset']) ?> +``` + +The first argument for all three methods is the button title, and the second one is an array of options. +The title isn't encoded, so if you're displaying data from the end user, encode it with [[yii\helpers\Html::encode()|Html::encode()]]. + + +### Input Fields + +There are two groups of input methods. The ones starting with `active`, which are called active inputs, and the ones not starting with it. +Active inputs take data from the model and attribute specified, while in the case of a regular input, data is specified +directly. + +The most generic methods are: + +```php +type, input name, input value, options +name, ['class' => $username]) ?> + +type, model, model attribute name, options + $username]) ?> +``` + +If you know the input type in advance, it's more convenient to use the shortcut methods: + +- [[yii\helpers\Html::buttonInput()]] +- [[yii\helpers\Html::submitInput()]] +- [[yii\helpers\Html::resetInput()]] +- [[yii\helpers\Html::textInput()]], [[yii\helpers\Html::activeTextInput()]] +- [[yii\helpers\Html::hiddenInput()]], [[yii\helpers\Html::activeHiddenInput()]] +- [[yii\helpers\Html::passwordInput()]] / [[yii\helpers\Html::activePasswordInput()]] +- [[yii\helpers\Html::fileInput()]], [[yii\helpers\Html::activeFileInput()]] +- [[yii\helpers\Html::textarea()]], [[yii\helpers\Html::activeTextarea()]] + +Radios and checkboxes are a bit different in terms of method signature: + +```php + 'I agree']) ?> + 'agreement']) ?> + + 'I agree']) ?> + 'agreement']) ?> +``` + +Dropdown lists and list boxes can be rendered like the following: + +```php + + + + + +``` + +The first argument is the name of the input, the second one is the value that's currently selected, and the third one is an array of key-value pairs, where the array key is the list value and the array value is the list label. + +If you want multiple choices to be selectable, you can use a checkbox list: + +```php + + +``` + +If not, use radio list: + +```php + + +``` + + +### Labels and Errors + +Same as inputs, there are two methods for generating form labels. Active, which takes data from the model, and non-active, which accepts data directly: + +```php + 'label username']) ?> + 'label username']) ?> +``` + +In order to display form errors from a model or models as a summary, you could use: + +```php + 'errors']) ?> +``` + +To display an individual error: + +```php + 'error']) ?> +``` + + +### Input Names and Values + +There are methods to get names, ids and values for input fields based on the model. These are mainly used internally, +but could be handy sometimes: + +```php +// Post[title] +echo Html::getInputName($post, 'title'); + +// post-title +echo Html::getInputId($post, 'title'); + +// my first post +echo Html::getAttributeValue($post, 'title'); + +// $post->authors[0] +echo Html::getAttributeValue($post, '[0]authors[0]'); +``` + +In the above, the first argument is the model, while the second one is the attribute expression. In its simplest form the expression is just an attribute name, but it can be an attribute name prefixed and/or suffixed with array indexes, which is mainly used for tabular input: + +- `[0]content` is used in tabular data input to represent the `content` attribute for the first model in tabular input; +- `dates[0]` represents the first array element of the `dates` attribute; +- `[0]dates[0]` represents the first array element of the `dates` attribute for the first model in tabular input. + +In order to get the attribute name without suffixes or prefixes, one can use the following: + +```php +// dates +echo Html::getAttributeName('dates[0]'); +``` + + +## Styles and Scripts + +There are two methods to generate tags wrapping embedded styles and scripts: + +```php + + +Gives you + + + + + true]) ?> + +Gives you + + +``` + +If you want to use an external style in a CSS file: + +```php + 'IE 5']) ?> + +generates + + +``` + +The first argument is the URL. The second one is an array of options. In addition to the regular options, you can specify: + +- `condition` to wrap `` tag so it will be included only when there's + either no JavaScript support in the browser or it was disabled by the user. + +To link a JavaScript file: + +```php + +``` + +Same as with CSS, the first argument specifies the URL of the file to be included. Options can be passed as the second argument. +In the options you can specify `condition` in the same way as in the options for `cssFile`. + + +## Hyperlinks + +There's a method to generate hyperlinks conveniently: + +```php + $id], ['class' => 'profile-link']) ?> +``` + +The first argument is the title. It's not encoded, so if you're using data entered by the user, you need to encode it with +`Html::encode()`. The second argument is what will be in the `href` attribute of the ` +``` + + +## Images + +In order to generate an image tag, use the following: + +```php + 'My logo']) ?> + +generates + +My logo +``` + +Besides [aliases](concept-aliases.md), the first argument can accept routes, parameters and URLs, in the same way [Url::to()](helper-url.md) does. + + +## Lists + +Unordered list can be generated like the following: + +```php + function($item, $index) { + return Html::tag( + 'li', + $this->render('post', ['item' => $item]), + ['class' => 'post'] + ); +}]) ?> +``` + +In order to get ordered list, use `Html::ol()` instead. diff --git a/docs/guide-ar/helper-overview.md b/docs/guide-ar/helper-overview.md new file mode 100644 index 0000000..f6f85c3 --- /dev/null +++ b/docs/guide-ar/helper-overview.md @@ -0,0 +1,80 @@ +Helpers +======= + +> Note: This section is under development. + +Yii provides many classes that help simplify common coding tasks, such as string or array manipulations, +HTML code generation, and so on. These helper classes are organized under the `yii\helpers` namespace and +are all static classes (meaning they contain only static properties and methods and should not be instantiated). + +You use a helper class by directly calling one of its static methods, like the following: + +```php +use yii\helpers\Html; + +echo Html::encode('Test > test'); +``` + +> Note: To support [customizing helper classes](#customizing-helper-classes), Yii breaks each core helper class + into two classes: a base class (e.g. `BaseArrayHelper`) and a concrete class (e.g. `ArrayHelper`). + When you use a helper, you should only use the concrete version and never use the base class. + + +Core Helper Classes +------------------- + +The following core helper classes are provided in the Yii releases: + +- [ArrayHelper](helper-array.md) +- Console +- FileHelper +- FormatConverter +- [Html](helper-html.md) +- HtmlPurifier +- Imagine (provided by yii2-imagine extension) +- Inflector +- Json +- Markdown +- StringHelper +- [Url](helper-url.md) +- VarDumper + + +Customizing Helper Classes +-------------------------- + +To customize a core helper class (e.g. [[yii\helpers\ArrayHelper]]), you should create a new class extending +from the helpers corresponding base class (e.g. [[yii\helpers\BaseArrayHelper]]) and name your class the same +as the corresponding concrete class (e.g. [[yii\helpers\ArrayHelper]]), including its namespace. This class +will then be set up to replace the original implementation of the framework. + +The following example shows how to customize the [[yii\helpers\ArrayHelper::merge()|merge()]] method of the +[[yii\helpers\ArrayHelper]] class: + +```php +
+ +There are two methods you can use to get common URLs: home URL and base URL of the current request. In order to get +home URL, use the following: + +```php +$relativeHomeUrl = Url::home(); +$absoluteHomeUrl = Url::home(true); +$httpsAbsoluteHomeUrl = Url::home('https'); +``` + +If no parameter is passed, the generated URL is relative. You can either pass `true` to get an absolute URL for the current +schema or specify a schema explicitly (`https`, `http`). + +To get the base URL of the current request use the following: + +```php +$relativeBaseUrl = Url::base(); +$absoluteBaseUrl = Url::base(true); +$httpsAbsoluteBaseUrl = Url::base('https'); +``` + +The only parameter of the method works exactly the same as for `Url::home()`. + + +## Creating URLs + +In order to create a URL to a given route use the `Url::toRoute()` method. The method uses [[\yii\web\UrlManager]] to create +a URL: + +```php +$url = Url::toRoute(['product/view', 'id' => 42]); +``` + +You may specify the route as a string, e.g., `site/index`. You may also use an array if you want to specify additional +query parameters for the URL being created. The array format must be: + +```php +// generates: /index.php?r=site%2Findex¶m1=value1¶m2=value2 +['site/index', 'param1' => 'value1', 'param2' => 'value2'] +``` + +If you want to create a URL with an anchor, you can use the array format with a `#` parameter. For example, + +```php +// generates: /index.php?r=site%2Findex¶m1=value1#name +['site/index', 'param1' => 'value1', '#' => 'name'] +``` + +A route may be either absolute or relative. An absolute route has a leading slash (e.g. `/site/index`) while a relative +route has none (e.g. `site/index` or `index`). A relative route will be converted into an absolute one by the following rules: + +- If the route is an empty string, the current [[\yii\web\Controller::route|route]] will be used; +- If the route contains no slashes at all (e.g. `index`), it is considered to be an action ID of the current controller + and will be prepended with [[\yii\web\Controller::uniqueId]]; +- If the route has no leading slash (e.g. `site/index`), it is considered to be a route relative to the current module + and will be prepended with the module's [[\yii\base\Module::uniqueId|uniqueId]]. + +Starting from version 2.0.2, you may specify a route in terms of an [alias](concept-aliases.md). If this is the case, +the alias will first be converted into the actual route which will then be turned into an absolute route according +to the above rules. + +Below are some examples of using this method: + +```php +// /index.php?r=site%2Findex +echo Url::toRoute('site/index'); + +// /index.php?r=site%2Findex&src=ref1#name +echo Url::toRoute(['site/index', 'src' => 'ref1', '#' => 'name']); + +// /index.php?r=post%2Fedit&id=100 assume the alias "@postEdit" is defined as "post/edit" +echo Url::toRoute(['@postEdit', 'id' => 100]); + +// http://www.example.com/index.php?r=site%2Findex +echo Url::toRoute('site/index', true); + +// https://www.example.com/index.php?r=site%2Findex +echo Url::toRoute('site/index', 'https'); +``` + +There's another method `Url::to()` that is very similar to [[toRoute()]]. The only difference is that this method +requires a route to be specified as an array only. If a string is given, it will be treated as a URL. + +The first argument could be: + +- an array: [[toRoute()]] will be called to generate the URL. For example: + `['site/index']`, `['post/index', 'page' => 2]`. Please refer to [[toRoute()]] for more details + on how to specify a route. +- a string with a leading `@`: it is treated as an alias, and the corresponding aliased string + will be returned. +- an empty string: the currently requested URL will be returned; +- a normal string: it will be returned as is. + +When `$scheme` is specified (either a string or `true`), an absolute URL with host info (obtained from +[[\yii\web\UrlManager::hostInfo]]) will be returned. If `$url` is already an absolute URL, its scheme +will be replaced with the specified one. + +Below are some usage examples: + +```php +// /index.php?r=site%2Findex +echo Url::to(['site/index']); + +// /index.php?r=site%2Findex&src=ref1#name +echo Url::to(['site/index', 'src' => 'ref1', '#' => 'name']); + +// /index.php?r=post%2Fedit&id=100 assume the alias "@postEdit" is defined as "post/edit" +echo Url::to(['@postEdit', 'id' => 100]); + +// the currently requested URL +echo Url::to(); + +// /images/logo.gif +echo Url::to('@web/images/logo.gif'); + +// images/logo.gif +echo Url::to('images/logo.gif'); + +// http://www.example.com/images/logo.gif +echo Url::to('@web/images/logo.gif', true); + +// https://www.example.com/images/logo.gif +echo Url::to('@web/images/logo.gif', 'https'); +``` + +Starting from version 2.0.3, you may use [[yii\helpers\Url::current()]] to create a URL based on the currently +requested route and GET parameters. You may modify or remove some of the GET parameters or add new ones by +passing a `$params` parameter to the method. For example, + +```php +// assume $_GET = ['id' => 123, 'src' => 'google'], current route is "post/view" + +// /index.php?r=post%2Fview&id=123&src=google +echo Url::current(); + +// /index.php?r=post%2Fview&id=123 +echo Url::current(['src' => null]); +// /index.php?r=post%2Fview&id=100&src=google +echo Url::current(['id' => 100]); +``` + + +## Remember URLs + +There are cases when you need to remember URL and afterwards use it during processing of the one of sequential requests. +It can be achieved in the following way: + +```php +// Remember current URL +Url::remember(); + +// Remember URL specified. See Url::to() for argument format. +Url::remember(['product/view', 'id' => 42]); + +// Remember URL specified with a name given +Url::remember(['product/view', 'id' => 42], 'product'); +``` + +In the next request we can get URL remembered in the following way: + +```php +$url = Url::previous(); +$productUrl = Url::previous('product'); +``` + +## Checking Relative URLs + +To find out if URL is relative i.e. it doesn't have host info part, you can use the following code: + +```php +$isRelative = Url::isRelative('test/it'); +``` diff --git a/docs/guide-ar/images/application-lifecycle.graphml b/docs/guide-ar/images/application-lifecycle.graphml new file mode 100644 index 0000000..850863a --- /dev/null +++ b/docs/guide-ar/images/application-lifecycle.graphml @@ -0,0 +1,527 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Entry script (index.php or yii) + + + + + + + + + + Folder 4 + + + + + + + + + + + + + + + + Load application config + + + + + + + + + + + + + + + + + + + + + Create application instance + + + + + + + + + + Folder 5 + + + + + + + + + + + + + + + + preInit() + + + + + + + + + + + + + + + + + Register error handler + + + + + + + + + + + + + + + + + Configure application properties + + + + + + + + + + + + + + + + + init() + + + + + + + + + + + + + + + + + bootstrap() + + + + + + + + + + + + + + + + + + + + + + + Run application + + + + + + + + + + Folder 3 + + + + + + + + + + + + + + + + EVENT_BEFORE_REQUEST + + + + + + + + + + + + + + + + + + + + + Handle request + + + + + + + + + + Folder 4 + + + + + + + + + + + + + + + + Resolve request into route and parameters + + + + + + + + + + + + + + + + + Create module, controller and action + + + + + + + + + + + + + + + + + Run action + + + + + + + + + + + + + + + + + + + EVENT_AFTER_REQUEST + + + + + + + + + + + + + + + + + Send response to end user + + + + + + + + + + + + + + + + + + + Complete request processing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Configuration array + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Exit status + + + + + + + + + + + + + + + + diff --git a/docs/guide-ar/images/application-lifecycle.png b/docs/guide-ar/images/application-lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..6a505ccefb89072e4bee7691114dd6cbe2e34bc2 GIT binary patch literal 32044 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 M#?fO9(&T8+BG-Yon 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 literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/application-structure.graphml b/docs/guide-ar/images/application-structure.graphml new file mode 100644 index 0000000..f6fce48 --- /dev/null +++ b/docs/guide-ar/images/application-structure.graphml @@ -0,0 +1,430 @@ + + + + + + + + + + + + + + + + + + + + + + + application +component + + + + + + + + + + + + + + + + + entry script + + + + + + + + + + + + + + + + + application + + + + + + + + + + + + + + + + + controller + + + + + + + + + + + + + + + + + filter + + + + + + + + + + + + + + + + + module + + + + + + + + + + + + + + + + + view + + + + + + + + + + + + + + + + + model + + + + + + + + + + + + + + + + + widget + + + + + + + + + + + + + + + + + asset bundle + + + + + + + + + + + + + + + + + 1:1 + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 1..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + + + + 0..* + + + + + + + + + + + + + + + + diff --git a/docs/guide-ar/images/application-structure.png b/docs/guide-ar/images/application-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a55498889d296ca707527f5c9ab5fae217c1c5 GIT binary patch literal 24774 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

WTZ1E~fy3MKk*Z_$vB~k~vQcv2R?7fOep@ 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 z + + + + + + + + + + + + + + + + + + + + + + admin + + + + + + + + + + + + + + + + + author + + + + + + + + + + + + + + + + + John, ID=2 + + + + + + + + + + + + + + + + + + + + Jane, ID=1 + + + + + + + + + + + + + + + + + + + + updatePost + + + + + + + + + + + + + + + + + updateOwnPost + + + + + + + + + + + + + + + + + createPost + + + + + + + + + + + + + + + + + AuthorRule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="57px" height="65px" viewBox="0 0 57 65" enable-background="new 0 0 57 65" xml:space="preserve"> +<g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"> + <stop offset="0.2711" style="stop-color:#FFAB4F"/> + <stop offset="1" style="stop-color:#FFD28F"/> + </linearGradient> + <path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109 + V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77 + c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/> + <path id="body_18_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51 + c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146 + c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021 + C1.378,56.689,0.5,62.768,0.5,62.768z"/> + + <radialGradient id="SVGID_2_" cx="22.6621" cy="21.707" r="17.7954" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_2_)" stroke="#E55E03" d="M28.106,33.486c-8.112,0-12.688,4.313-12.688,10.438 + c0,7.422,12.688,10.438,12.688,10.438s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.486,28.106,33.486z M26.288,53.051 + c0,0-7.135-2.093-8.805-7.201c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387 + C40.445,49.917,26.288,53.051,26.288,53.051z"/> + + <radialGradient id="SVGID_3_" cx="15.2056" cy="831.1875" r="32.3071" gradientTransform="matrix(1 0 0 1 0.0801 -773.6914)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_3_)" stroke="#E55E03" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67 + c-2.854,5.51-14.021,7.807-14.021,7.807s-10.472-2.483-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25 + c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.946,0,3.521-1.558,3.521-3.492 + C56.055,62.768,54.211,55.906,49.529,51.225z"/> + + <radialGradient id="SVGID_4_" cx="17.0723" cy="18.4907" r="11.8931" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_4_)" stroke="#E55E03" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397 + c-0.514,1.027-1.669,4.084-1.669,5.148c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.334-2.359 + c-3.601-1.419-4.071-3.063-5.89-4.854C12.523,47.135,12.878,45,13.404,44.173z"/> + + <radialGradient id="SVGID_5_" cx="31.8184" cy="19.3525" r="14.63" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_5_)" stroke="#E55E03" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617 + c0.516,1.025,3.617,3.693,3.617,6.617c0,5.186-10.271,8.576-16.699,9.145c1.429,4.938,11.373,1.293,13.805-0.313 + c3.563-2.354,4.563-5.133,7.854-3.705C47.754,49.045,48.006,46.574,45.777,43.924z"/> + + <radialGradient id="SVGID_6_" cx="30.4893" cy="4.8721" r="5.2028" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_6_)" stroke="#E55E03" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813 + c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/> + + <radialGradient id="SVGID_7_" cx="23.2871" cy="5.3008" r="5.5143" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_7_)" stroke="#E55E03" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3 + c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/> + + <radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FFD28F"/> + <stop offset="1" style="stop-color:#FFAB4F"/> + </radialGradient> + <path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357 + c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012 + C36.627,4.945,43.59,13.158,43.676,23.357z"/> + + <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.501" y1="-12291.5195" x2="6492.1304" y2="-12384.9688" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3351.7349)"> + <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/> + <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/> + </linearGradient> + <path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386 + c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247 + c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/> + <path id="Hair_Young_Black_1_" fill="#5C5C5C" stroke="#353535" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25 + c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807 + s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678 + L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/> +</g> +</svg> + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="57px" height="67px" viewBox="0 0 57 67" enable-background="new 0 0 57 67" xml:space="preserve"> +<g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"> + <stop offset="0.2711" style="stop-color:#FFAB4F"/> + <stop offset="1" style="stop-color:#FFD28F"/> + </linearGradient> + <path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109 + V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77 + c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/> + + <radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FFD28F"/> + <stop offset="1" style="stop-color:#FFAB4F"/> + </radialGradient> + <path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357 + c0.086,10.199-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012 + C36.627,4.945,43.59,13.158,43.676,23.357z"/> + + <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.5" y1="-12286.8594" x2="6492.1294" y2="-12380.3086" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3350.4617)"> + <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/> + <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/> + </linearGradient> + <path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386 + c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247 + c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/> + <path id="Hair_Female_1_Red_1_" fill="#FAE1AA" stroke="#E2B354" stroke-linecap="round" stroke-linejoin="round" d="M28.372,0.5 + C17.537,0.5,8.269,7.748,9.153,26.125c0.563,6.563,5.862,12.042,9.366,13.531c-2.929-10.968-0.304-25.021-0.585-25.526 + c-0.281-0.505,3.536,6.728,3.536,6.728l3.183-8.312c5.541,4.28,0.393,11.309,1.049,11.058c4.26-1.631,5.34-9.228,5.34-9.228 + s2.729,3.657,2.701,5.504c-0.054,3.562,2.194-6.067,2.194-6.067l1.027,2.031c6.727,9.822,3.684,16.208,1.648,22.781 + c15.666-0.703,12.291-10.48,9.66-18.407C43.59,6.092,39.206,0.5,28.372,0.5z"/> + + <linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="95.9063" y1="-3134.2153" x2="31.5133" y2="-3134.2153" gradientTransform="matrix(0.9852 0 0 -0.9852 -34.4844 -3031.9851)"> + <stop offset="0" style="stop-color:#49AD33"/> + <stop offset="1" style="stop-color:#C2DA92"/> + </linearGradient> + <path id="body_8_" fill="url(#body_1_)" stroke="#008D33" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51 + c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-8.244-5.146-8.244-5.146 + c-1.444,6.983-8.555,8.786-13.007,8.786s-11.322-2.643-11.941-9.439c0,0-4.559,1.199-9.367,5.674 + C1.378,56.689,0.5,62.768,0.5,62.768z"/> +</g> +</svg> + + + + diff --git a/docs/guide-ar/images/rbac-access-check-1.png b/docs/guide-ar/images/rbac-access-check-1.png new file mode 100644 index 0000000000000000000000000000000000000000..77ad551c26d4f4b4a3cf4d9b7cfd5f4b7472ec82 GIT binary patch literal 19024 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 literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/rbac-access-check-2.graphml b/docs/guide-ar/images/rbac-access-check-2.graphml new file mode 100644 index 0000000..c521d42 --- /dev/null +++ b/docs/guide-ar/images/rbac-access-check-2.graphml @@ -0,0 +1,368 @@ + + + + + + + + + + + + + + + + + + + + + + + admin + + + + + + + + + + + + + + + + + author + + + + + + + + + + + + + + + + + John, ID=2 + + + + + + + + + + + + + + + + + + + + Jane, ID=1 + + + + + + + + + + + + + + + + + + + + updatePost + + + + + + + + + + + + + + + + + updateOwnPost + + + + + + + + + + + + + + + + + createPost + + + + + + + + + + + + + + + + + AuthorRule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="57px" height="65px" viewBox="0 0 57 65" enable-background="new 0 0 57 65" xml:space="preserve"> +<g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"> + <stop offset="0.2711" style="stop-color:#FFAB4F"/> + <stop offset="1" style="stop-color:#FFD28F"/> + </linearGradient> + <path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109 + V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77 + c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/> + <path id="body_18_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51 + c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146 + c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021 + C1.378,56.689,0.5,62.768,0.5,62.768z"/> + + <radialGradient id="SVGID_2_" cx="22.6621" cy="21.707" r="17.7954" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_2_)" stroke="#E55E03" d="M28.106,33.486c-8.112,0-12.688,4.313-12.688,10.438 + c0,7.422,12.688,10.438,12.688,10.438s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.486,28.106,33.486z M26.288,53.051 + c0,0-7.135-2.093-8.805-7.201c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387 + C40.445,49.917,26.288,53.051,26.288,53.051z"/> + + <radialGradient id="SVGID_3_" cx="15.2056" cy="831.1875" r="32.3071" gradientTransform="matrix(1 0 0 1 0.0801 -773.6914)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_3_)" stroke="#E55E03" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67 + c-2.854,5.51-14.021,7.807-14.021,7.807s-10.472-2.483-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25 + c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.946,0,3.521-1.558,3.521-3.492 + C56.055,62.768,54.211,55.906,49.529,51.225z"/> + + <radialGradient id="SVGID_4_" cx="17.0723" cy="18.4907" r="11.8931" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_4_)" stroke="#E55E03" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397 + c-0.514,1.027-1.669,4.084-1.669,5.148c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.334-2.359 + c-3.601-1.419-4.071-3.063-5.89-4.854C12.523,47.135,12.878,45,13.404,44.173z"/> + + <radialGradient id="SVGID_5_" cx="31.8184" cy="19.3525" r="14.63" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_5_)" stroke="#E55E03" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617 + c0.516,1.025,3.617,3.693,3.617,6.617c0,5.186-10.271,8.576-16.699,9.145c1.429,4.938,11.373,1.293,13.805-0.313 + c3.563-2.354,4.563-5.133,7.854-3.705C47.754,49.045,48.006,46.574,45.777,43.924z"/> + + <radialGradient id="SVGID_6_" cx="30.4893" cy="4.8721" r="5.2028" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_6_)" stroke="#E55E03" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813 + c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/> + + <radialGradient id="SVGID_7_" cx="23.2871" cy="5.3008" r="5.5143" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_7_)" stroke="#E55E03" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3 + c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/> + + <radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FFD28F"/> + <stop offset="1" style="stop-color:#FFAB4F"/> + </radialGradient> + <path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357 + c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012 + C36.627,4.945,43.59,13.158,43.676,23.357z"/> + + <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.501" y1="-12291.5195" x2="6492.1304" y2="-12384.9688" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3351.7349)"> + <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/> + <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/> + </linearGradient> + <path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386 + c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247 + c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/> + <path id="Hair_Young_Black_1_" fill="#5C5C5C" stroke="#353535" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25 + c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807 + s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678 + L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/> +</g> +</svg> + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="57px" height="67px" viewBox="0 0 57 67" enable-background="new 0 0 57 67" xml:space="preserve"> +<g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"> + <stop offset="0.2711" style="stop-color:#FFAB4F"/> + <stop offset="1" style="stop-color:#FFD28F"/> + </linearGradient> + <path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109 + V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77 + c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/> + + <radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FFD28F"/> + <stop offset="1" style="stop-color:#FFAB4F"/> + </radialGradient> + <path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357 + c0.086,10.199-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012 + C36.627,4.945,43.59,13.158,43.676,23.357z"/> + + <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.5" y1="-12286.8594" x2="6492.1294" y2="-12380.3086" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3350.4617)"> + <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/> + <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/> + </linearGradient> + <path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386 + c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247 + c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/> + <path id="Hair_Female_1_Red_1_" fill="#FAE1AA" stroke="#E2B354" stroke-linecap="round" stroke-linejoin="round" d="M28.372,0.5 + C17.537,0.5,8.269,7.748,9.153,26.125c0.563,6.563,5.862,12.042,9.366,13.531c-2.929-10.968-0.304-25.021-0.585-25.526 + c-0.281-0.505,3.536,6.728,3.536,6.728l3.183-8.312c5.541,4.28,0.393,11.309,1.049,11.058c4.26-1.631,5.34-9.228,5.34-9.228 + s2.729,3.657,2.701,5.504c-0.054,3.562,2.194-6.067,2.194-6.067l1.027,2.031c6.727,9.822,3.684,16.208,1.648,22.781 + c15.666-0.703,12.291-10.48,9.66-18.407C43.59,6.092,39.206,0.5,28.372,0.5z"/> + + <linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="95.9063" y1="-3134.2153" x2="31.5133" y2="-3134.2153" gradientTransform="matrix(0.9852 0 0 -0.9852 -34.4844 -3031.9851)"> + <stop offset="0" style="stop-color:#49AD33"/> + <stop offset="1" style="stop-color:#C2DA92"/> + </linearGradient> + <path id="body_8_" fill="url(#body_1_)" stroke="#008D33" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51 + c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-8.244-5.146-8.244-5.146 + c-1.444,6.983-8.555,8.786-13.007,8.786s-11.322-2.643-11.941-9.439c0,0-4.559,1.199-9.367,5.674 + C1.378,56.689,0.5,62.768,0.5,62.768z"/> +</g> +</svg> + + + + diff --git a/docs/guide-ar/images/rbac-access-check-2.png b/docs/guide-ar/images/rbac-access-check-2.png new file mode 100644 index 0000000000000000000000000000000000000000..254f307a89e5e59fceda04f27667982b60c3fcab GIT binary patch literal 19364 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 + + + + + + + + + + + + + + + + + + + + + + admin + + + + + + + + + + + + + + + + + author + + + + + + + + + + + + + + + + + John, ID=2 + + + + + + + + + + + + + + + + + + + + Jane, ID=1 + + + + + + + + + + + + + + + + + + + + updatePost + + + + + + + + + + + + + + + + + updateOwnPost + + + + + + + + + + + + + + + + + createPost + + + + + + + + + + + + + + + + + AuthorRule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="57px" height="65px" viewBox="0 0 57 65" enable-background="new 0 0 57 65" xml:space="preserve"> +<g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"> + <stop offset="0.2711" style="stop-color:#FFAB4F"/> + <stop offset="1" style="stop-color:#FFD28F"/> + </linearGradient> + <path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109 + V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77 + c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/> + <path id="body_18_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51 + c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146 + c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021 + C1.378,56.689,0.5,62.768,0.5,62.768z"/> + + <radialGradient id="SVGID_2_" cx="22.6621" cy="21.707" r="17.7954" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_2_)" stroke="#E55E03" d="M28.106,33.486c-8.112,0-12.688,4.313-12.688,10.438 + c0,7.422,12.688,10.438,12.688,10.438s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.486,28.106,33.486z M26.288,53.051 + c0,0-7.135-2.093-8.805-7.201c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387 + C40.445,49.917,26.288,53.051,26.288,53.051z"/> + + <radialGradient id="SVGID_3_" cx="15.2056" cy="831.1875" r="32.3071" gradientTransform="matrix(1 0 0 1 0.0801 -773.6914)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_3_)" stroke="#E55E03" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67 + c-2.854,5.51-14.021,7.807-14.021,7.807s-10.472-2.483-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25 + c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.946,0,3.521-1.558,3.521-3.492 + C56.055,62.768,54.211,55.906,49.529,51.225z"/> + + <radialGradient id="SVGID_4_" cx="17.0723" cy="18.4907" r="11.8931" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_4_)" stroke="#E55E03" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397 + c-0.514,1.027-1.669,4.084-1.669,5.148c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.334-2.359 + c-3.601-1.419-4.071-3.063-5.89-4.854C12.523,47.135,12.878,45,13.404,44.173z"/> + + <radialGradient id="SVGID_5_" cx="31.8184" cy="19.3525" r="14.63" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_5_)" stroke="#E55E03" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617 + c0.516,1.025,3.617,3.693,3.617,6.617c0,5.186-10.271,8.576-16.699,9.145c1.429,4.938,11.373,1.293,13.805-0.313 + c3.563-2.354,4.563-5.133,7.854-3.705C47.754,49.045,48.006,46.574,45.777,43.924z"/> + + <radialGradient id="SVGID_6_" cx="30.4893" cy="4.8721" r="5.2028" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_6_)" stroke="#E55E03" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813 + c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/> + + <radialGradient id="SVGID_7_" cx="23.2871" cy="5.3008" r="5.5143" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_7_)" stroke="#E55E03" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3 + c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/> + + <radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FFD28F"/> + <stop offset="1" style="stop-color:#FFAB4F"/> + </radialGradient> + <path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357 + c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012 + C36.627,4.945,43.59,13.158,43.676,23.357z"/> + + <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.501" y1="-12291.5195" x2="6492.1304" y2="-12384.9688" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3351.7349)"> + <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/> + <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/> + </linearGradient> + <path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386 + c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247 + c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/> + <path id="Hair_Young_Black_1_" fill="#5C5C5C" stroke="#353535" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25 + c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807 + s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678 + L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/> +</g> +</svg> + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="57px" height="67px" viewBox="0 0 57 67" enable-background="new 0 0 57 67" xml:space="preserve"> +<g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"> + <stop offset="0.2711" style="stop-color:#FFAB4F"/> + <stop offset="1" style="stop-color:#FFD28F"/> + </linearGradient> + <path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109 + V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77 + c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/> + + <radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FFD28F"/> + <stop offset="1" style="stop-color:#FFAB4F"/> + </radialGradient> + <path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357 + c0.086,10.199-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012 + C36.627,4.945,43.59,13.158,43.676,23.357z"/> + + <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.5" y1="-12286.8594" x2="6492.1294" y2="-12380.3086" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3350.4617)"> + <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/> + <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/> + </linearGradient> + <path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386 + c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247 + c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/> + <path id="Hair_Female_1_Red_1_" fill="#FAE1AA" stroke="#E2B354" stroke-linecap="round" stroke-linejoin="round" d="M28.372,0.5 + C17.537,0.5,8.269,7.748,9.153,26.125c0.563,6.563,5.862,12.042,9.366,13.531c-2.929-10.968-0.304-25.021-0.585-25.526 + c-0.281-0.505,3.536,6.728,3.536,6.728l3.183-8.312c5.541,4.28,0.393,11.309,1.049,11.058c4.26-1.631,5.34-9.228,5.34-9.228 + s2.729,3.657,2.701,5.504c-0.054,3.562,2.194-6.067,2.194-6.067l1.027,2.031c6.727,9.822,3.684,16.208,1.648,22.781 + c15.666-0.703,12.291-10.48,9.66-18.407C43.59,6.092,39.206,0.5,28.372,0.5z"/> + + <linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="95.9063" y1="-3134.2153" x2="31.5133" y2="-3134.2153" gradientTransform="matrix(0.9852 0 0 -0.9852 -34.4844 -3031.9851)"> + <stop offset="0" style="stop-color:#49AD33"/> + <stop offset="1" style="stop-color:#C2DA92"/> + </linearGradient> + <path id="body_8_" fill="url(#body_1_)" stroke="#008D33" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51 + c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-8.244-5.146-8.244-5.146 + c-1.444,6.983-8.555,8.786-13.007,8.786s-11.322-2.643-11.941-9.439c0,0-4.559,1.199-9.367,5.674 + C1.378,56.689,0.5,62.768,0.5,62.768z"/> +</g> +</svg> + + + + diff --git a/docs/guide-ar/images/rbac-access-check-3.png b/docs/guide-ar/images/rbac-access-check-3.png new file mode 100644 index 0000000000000000000000000000000000000000..1fdc0d935a370f3165c9d96ad335dad6e3e1b364 GIT binary patch literal 19336 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 + + + + + + + + + + + + + + + + + + + + + + admin + + + + + + + + + + + + + + + + + author + + + + + + + + + + + + + + + + + John, ID=2 + + + + + + + + + + + + + + + + + + + + Jane, ID=1 + + + + + + + + + + + + + + + + + + + + updatePost + + + + + + + + + + + + + + + + + createPost + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="57px" height="65px" viewBox="0 0 57 65" enable-background="new 0 0 57 65" xml:space="preserve"> +<g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"> + <stop offset="0.2711" style="stop-color:#FFAB4F"/> + <stop offset="1" style="stop-color:#FFD28F"/> + </linearGradient> + <path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109 + V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77 + c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/> + <path id="body_18_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51 + c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146 + c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021 + C1.378,56.689,0.5,62.768,0.5,62.768z"/> + + <radialGradient id="SVGID_2_" cx="22.6621" cy="21.707" r="17.7954" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_2_)" stroke="#E55E03" d="M28.106,33.486c-8.112,0-12.688,4.313-12.688,10.438 + c0,7.422,12.688,10.438,12.688,10.438s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.486,28.106,33.486z M26.288,53.051 + c0,0-7.135-2.093-8.805-7.201c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387 + C40.445,49.917,26.288,53.051,26.288,53.051z"/> + + <radialGradient id="SVGID_3_" cx="15.2056" cy="831.1875" r="32.3071" gradientTransform="matrix(1 0 0 1 0.0801 -773.6914)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_3_)" stroke="#E55E03" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67 + c-2.854,5.51-14.021,7.807-14.021,7.807s-10.472-2.483-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25 + c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.946,0,3.521-1.558,3.521-3.492 + C56.055,62.768,54.211,55.906,49.529,51.225z"/> + + <radialGradient id="SVGID_4_" cx="17.0723" cy="18.4907" r="11.8931" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_4_)" stroke="#E55E03" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397 + c-0.514,1.027-1.669,4.084-1.669,5.148c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.334-2.359 + c-3.601-1.419-4.071-3.063-5.89-4.854C12.523,47.135,12.878,45,13.404,44.173z"/> + + <radialGradient id="SVGID_5_" cx="31.8184" cy="19.3525" r="14.63" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_5_)" stroke="#E55E03" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617 + c0.516,1.025,3.617,3.693,3.617,6.617c0,5.186-10.271,8.576-16.699,9.145c1.429,4.938,11.373,1.293,13.805-0.313 + c3.563-2.354,4.563-5.133,7.854-3.705C47.754,49.045,48.006,46.574,45.777,43.924z"/> + + <radialGradient id="SVGID_6_" cx="30.4893" cy="4.8721" r="5.2028" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_6_)" stroke="#E55E03" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813 + c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/> + + <radialGradient id="SVGID_7_" cx="23.2871" cy="5.3008" r="5.5143" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_7_)" stroke="#E55E03" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3 + c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/> + + <radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FFD28F"/> + <stop offset="1" style="stop-color:#FFAB4F"/> + </radialGradient> + <path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357 + c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012 + C36.627,4.945,43.59,13.158,43.676,23.357z"/> + + <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.501" y1="-12291.5195" x2="6492.1304" y2="-12384.9688" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3351.7349)"> + <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/> + <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/> + </linearGradient> + <path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386 + c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247 + c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/> + <path id="Hair_Young_Black_1_" fill="#5C5C5C" stroke="#353535" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25 + c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807 + s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678 + L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/> +</g> +</svg> + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="57px" height="67px" viewBox="0 0 57 67" enable-background="new 0 0 57 67" xml:space="preserve"> +<g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"> + <stop offset="0.2711" style="stop-color:#FFAB4F"/> + <stop offset="1" style="stop-color:#FFD28F"/> + </linearGradient> + <path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109 + V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77 + c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/> + + <radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FFD28F"/> + <stop offset="1" style="stop-color:#FFAB4F"/> + </radialGradient> + <path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357 + c0.086,10.199-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012 + C36.627,4.945,43.59,13.158,43.676,23.357z"/> + + <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.5" y1="-12286.8594" x2="6492.1294" y2="-12380.3086" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3350.4617)"> + <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/> + <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/> + </linearGradient> + <path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386 + c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247 + c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/> + <path id="Hair_Female_1_Red_1_" fill="#FAE1AA" stroke="#E2B354" stroke-linecap="round" stroke-linejoin="round" d="M28.372,0.5 + C17.537,0.5,8.269,7.748,9.153,26.125c0.563,6.563,5.862,12.042,9.366,13.531c-2.929-10.968-0.304-25.021-0.585-25.526 + c-0.281-0.505,3.536,6.728,3.536,6.728l3.183-8.312c5.541,4.28,0.393,11.309,1.049,11.058c4.26-1.631,5.34-9.228,5.34-9.228 + s2.729,3.657,2.701,5.504c-0.054,3.562,2.194-6.067,2.194-6.067l1.027,2.031c6.727,9.822,3.684,16.208,1.648,22.781 + c15.666-0.703,12.291-10.48,9.66-18.407C43.59,6.092,39.206,0.5,28.372,0.5z"/> + + <linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="95.9063" y1="-3134.2153" x2="31.5133" y2="-3134.2153" gradientTransform="matrix(0.9852 0 0 -0.9852 -34.4844 -3031.9851)"> + <stop offset="0" style="stop-color:#49AD33"/> + <stop offset="1" style="stop-color:#C2DA92"/> + </linearGradient> + <path id="body_8_" fill="url(#body_1_)" stroke="#008D33" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51 + c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-8.244-5.146-8.244-5.146 + c-1.444,6.983-8.555,8.786-13.007,8.786s-11.322-2.643-11.941-9.439c0,0-4.559,1.199-9.367,5.674 + C1.378,56.689,0.5,62.768,0.5,62.768z"/> +</g> +</svg> + + + + diff --git a/docs/guide-ar/images/rbac-hierarchy-1.png b/docs/guide-ar/images/rbac-hierarchy-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7443fc7e71f555901f7f2d77aa7c27924c2be2e1 GIT binary patch literal 16085 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 + + + + + + + + + + + + + + + + + + + + + + admin + + + + + + + + + + + + + + + + + author + + + + + + + + + + + + + + + + + John, ID=2 + + + + + + + + + + + + + + + + + + + + Jane, ID=1 + + + + + + + + + + + + + + + + + + + + updatePost + + + + + + + + + + + + + + + + + updateOwnPost + + + + + + + + + + + + + + + + + createPost + + + + + + + + + + + + + + + + + AuthorRule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="57px" height="65px" viewBox="0 0 57 65" enable-background="new 0 0 57 65" xml:space="preserve"> +<g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"> + <stop offset="0.2711" style="stop-color:#FFAB4F"/> + <stop offset="1" style="stop-color:#FFD28F"/> + </linearGradient> + <path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109 + V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77 + c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/> + <path id="body_18_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51 + c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146 + c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021 + C1.378,56.689,0.5,62.768,0.5,62.768z"/> + + <radialGradient id="SVGID_2_" cx="22.6621" cy="21.707" r="17.7954" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_2_)" stroke="#E55E03" d="M28.106,33.486c-8.112,0-12.688,4.313-12.688,10.438 + c0,7.422,12.688,10.438,12.688,10.438s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.486,28.106,33.486z M26.288,53.051 + c0,0-7.135-2.093-8.805-7.201c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387 + C40.445,49.917,26.288,53.051,26.288,53.051z"/> + + <radialGradient id="SVGID_3_" cx="15.2056" cy="831.1875" r="32.3071" gradientTransform="matrix(1 0 0 1 0.0801 -773.6914)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_3_)" stroke="#E55E03" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67 + c-2.854,5.51-14.021,7.807-14.021,7.807s-10.472-2.483-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25 + c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.946,0,3.521-1.558,3.521-3.492 + C56.055,62.768,54.211,55.906,49.529,51.225z"/> + + <radialGradient id="SVGID_4_" cx="17.0723" cy="18.4907" r="11.8931" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_4_)" stroke="#E55E03" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397 + c-0.514,1.027-1.669,4.084-1.669,5.148c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.334-2.359 + c-3.601-1.419-4.071-3.063-5.89-4.854C12.523,47.135,12.878,45,13.404,44.173z"/> + + <radialGradient id="SVGID_5_" cx="31.8184" cy="19.3525" r="14.63" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_5_)" stroke="#E55E03" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617 + c0.516,1.025,3.617,3.693,3.617,6.617c0,5.186-10.271,8.576-16.699,9.145c1.429,4.938,11.373,1.293,13.805-0.313 + c3.563-2.354,4.563-5.133,7.854-3.705C47.754,49.045,48.006,46.574,45.777,43.924z"/> + + <radialGradient id="SVGID_6_" cx="30.4893" cy="4.8721" r="5.2028" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_6_)" stroke="#E55E03" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813 + c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/> + + <radialGradient id="SVGID_7_" cx="23.2871" cy="5.3008" r="5.5143" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FCB57A"/> + <stop offset="1" style="stop-color:#FF8C36"/> + </radialGradient> + <path fill="url(#SVGID_7_)" stroke="#E55E03" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3 + c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/> + + <radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FFD28F"/> + <stop offset="1" style="stop-color:#FFAB4F"/> + </radialGradient> + <path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357 + c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012 + C36.627,4.945,43.59,13.158,43.676,23.357z"/> + + <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.501" y1="-12291.5195" x2="6492.1304" y2="-12384.9688" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3351.7349)"> + <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/> + <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/> + </linearGradient> + <path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386 + c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247 + c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/> + <path id="Hair_Young_Black_1_" fill="#5C5C5C" stroke="#353535" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25 + c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807 + s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678 + L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/> +</g> +</svg> + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="57px" height="67px" viewBox="0 0 57 67" enable-background="new 0 0 57 67" xml:space="preserve"> +<g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"> + <stop offset="0.2711" style="stop-color:#FFAB4F"/> + <stop offset="1" style="stop-color:#FFD28F"/> + </linearGradient> + <path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109 + V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77 + c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/> + + <radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FFD28F"/> + <stop offset="1" style="stop-color:#FFAB4F"/> + </radialGradient> + <path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357 + c0.086,10.199-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012 + C36.627,4.945,43.59,13.158,43.676,23.357z"/> + + <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.5" y1="-12286.8594" x2="6492.1294" y2="-12380.3086" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3350.4617)"> + <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/> + <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/> + </linearGradient> + <path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386 + c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247 + c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/> + <path id="Hair_Female_1_Red_1_" fill="#FAE1AA" stroke="#E2B354" stroke-linecap="round" stroke-linejoin="round" d="M28.372,0.5 + C17.537,0.5,8.269,7.748,9.153,26.125c0.563,6.563,5.862,12.042,9.366,13.531c-2.929-10.968-0.304-25.021-0.585-25.526 + c-0.281-0.505,3.536,6.728,3.536,6.728l3.183-8.312c5.541,4.28,0.393,11.309,1.049,11.058c4.26-1.631,5.34-9.228,5.34-9.228 + s2.729,3.657,2.701,5.504c-0.054,3.562,2.194-6.067,2.194-6.067l1.027,2.031c6.727,9.822,3.684,16.208,1.648,22.781 + c15.666-0.703,12.291-10.48,9.66-18.407C43.59,6.092,39.206,0.5,28.372,0.5z"/> + + <linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="95.9063" y1="-3134.2153" x2="31.5133" y2="-3134.2153" gradientTransform="matrix(0.9852 0 0 -0.9852 -34.4844 -3031.9851)"> + <stop offset="0" style="stop-color:#49AD33"/> + <stop offset="1" style="stop-color:#C2DA92"/> + </linearGradient> + <path id="body_8_" fill="url(#body_1_)" stroke="#008D33" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51 + c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-8.244-5.146-8.244-5.146 + c-1.444,6.983-8.555,8.786-13.007,8.786s-11.322-2.643-11.941-9.439c0,0-4.559,1.199-9.367,5.674 + C1.378,56.689,0.5,62.768,0.5,62.768z"/> +</g> +</svg> + + + + diff --git a/docs/guide-ar/images/rbac-hierarchy-2.png b/docs/guide-ar/images/rbac-hierarchy-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e77c5647c1d40c4e739962cd81a7b1f78a89a484 GIT binary patch literal 18786 zcmeFZ1yI{f_$Ll+p;)2CrAUiAMGG`gptu!xXlQXQ4k^+WDaGBPNT7Ie3sPK)dvFaN zAduj>^nHK7yP2E2nVY}N+{|5OlKJjt_t|GZkL+hRI|+ZQq4yfh38*MBs z>@LiE5Dynq6By1!iG`)isr*Jp*9Ur-_0U6Ck19m52O06bH8;<)=ia@~Sf8A^~HGi)ubf{-#?lFI}Rng`hi54Wp|Qy7`m}BxZdMlpis3TP?g7`lUob&t*W}EMbXLS(V_$ENOXVMCJD> z`$0P8Dw0o09B@w~LjH$|O!K?MdEa)3&`Yz0L$3wRq9~1pidSYH;4f#Xh!cm;0uVrJ zk-3pW?ehE+$?d1$CW!Y)IWsaWL$h*9xrK)Qg*U{dgM$*wSq5%eq#*5v^g_E*au|%` zE9W*iyGP@qy`qWDCYDbS=xU}dcS`yUMBN_v2MoWd#92%(~-JE#>;s}YJ z+mf&oYhgwvBG77&{_6QU;QPePkrt%CXx5-o38LZVY+CM6B_3YPvv&pC`}*>R^+tRjI0 zH5VN6O9VrgDM9erHXgN?ro!Wuc?=_>8ms| z@7&p;yR4dU-%#M#BfKt$-EWsKS884j6S{(OVP_s6BeTiGVNda!{TgU3SLU8Z0I$Sz z+7VpeHN0VMD}Lmmwl?EU>0dVEH9)(%vkzxaT$qVmMxzb2ir9r(mPnL)Kn8T7V)@L- zJa-e9zq8*8tWTtB`cQASQm5@LVKJFy?aYiFG$mm$}&!cyHUU>)6_(TLE+c zC&lVu1>(8Z(N`r(=%RZ;9^F`2LDAIztFf~9@{ObS4WxGc>+hi(iwlrZxon^Qv;!5S zaC|+sE-EIqJ??iY9UE??9Y^wvs03AYg|cBkv@lF=M%dVg=a=(!yZ%gnpko@^y}J6a z)v{*k_Y)kfpoQ-%`ZK;ebLr4ZTqEqc696?a>dZ7tSX7$PLRmxsqsAg87lR6%RS>bLEP0Y7Bwv~d?_O(=JI_`%xvU$vSwL+aBW>R{VNzpC3@yf^M2yfh`>~)q0${o z>F#`LXG`H*PXtxWITD%esPN55d=D$O+fs;&&{(fwe?YxFCg<8S^tSLpu1;0^aC}0> zLeGOr;-6)+&n9STymf6Ag1@RH^UxUQD@4(e2J`LiQ*mm)p_)k?%?3zj-^Y5$u0IRf zy(ocRdjN+5tL)Dt3RMr;Me7a8Aoa@`exIdz<4?x4(#JK-MEsZw6#;r}pDy1pGUg1k zJziPexgR9|_FWcsu8Bl&@14Yc;lteh_=toIC<_Bgnc2z%#Qj>O-mYNnSyEP&2P->T zx!0cIA%s*?Insf51S1ZQv6-03>dVK!_8CmiGx*yU&`|I-UhNLAz`nhY8-}6hEz>c< zC>mB)hM>&vBI=`OBf8IRQ1KKl&NW4Nphs&iX6w<||G-i-9gFEJ8ANpTD;b^1trsth zVB_vWSEI~@uLyM}lKT=>a!;!Z;RY;S(RR0#D-90RpDFtdrlcX{=dVm5pyX+sU0IPH z2b9_CS8`2rB`1=~`xj{Ud_T3|FZq})`Kmm{c<$o#VNj&{*j`Xt5eg|yhU$apQa1i+ zW9iN#iAo-ea@yR47LwKl{`4^q1>&sa=pfNpxahxsmtH%+P=dJHLe-+ZCO<>>e z|9Oy+etm?=1TGSY+thA^BEQ*7_q(0vWR}CMdt-g^wZ9bj!{(ON^SsZJ8<*r*Kgl_W zUvIGNe{^6Z`|@l*UAcQ1d#35N|G^^vqz8fSAH1o>>}-4LY?0BdxiP`*i<0ynu~VyM z8eAc+OkIqHIZ(xKZ)Z|Z!4X4om3|TaX!dGLw}-{%#lgBI9=mv2Mf#QA;6tep zf+&H{7v#Lyu`=S#klqX#hkL~7zf?Yc*H!!^ktb=V@ENmOtx=!fO6bUn)x{w|q2E7= z$vkiH@QNfxyG9bfk5&`-J*)fW{(Y7!$w%X(EYL_i5n;J|bg2uBW?mlD^{uMwCmli0 z{`zS=ePF)piAt6qDlN4(U$>b!7h$A3V~*2uP1j$#&{364vw%br5y>T zP&%8742m!JtY~Pzv5VEm&zart32-fYNyCz#e3ttVy(hJ**l(@kz9)8tIanHkslDN4sZmiOz-BVypL1wKt)bBF%Q2eXw z_mgzoHIF!Eq0Dr?13FacZ{E^(nHYY#hq?scBD;{;$`TV;2% zR&>EP)>G7QIb_2({t=J~(bL|CQzrCeO50Bz40X z>_c)7E|s2(dNv;H9RDHN@TeNDlyTUHS(XSd#SjrvaqAzzCcr9lAW=?ky`f8$^Fb@C zcYRP&NI>xWH#-EfL+&+i0^9}{r9iInpCn4kb$N8u0xo)=WUrY>Cy%$%roQ8~53wjF z?XlXOn>pP`0Tg^37SvvTP4odE|1tQ^=#4 zruJ^RjVLzdxzHKX7Bq7e`sE~-f|pL_S=G<`T`ZqK1`fu;Yb{mL_q=TLC_={<{FE{^ zGLD4u<&*Hc8tHFY9N#bK8YE|<-9Kl}O|hLAzB4OSnH0w?9Ti#-pOf~%M2_^A?SUe8 zIz@1$Ukvh6_WD3KzaL$!68LZKT^;%Zq698&m>4A%jP-&sgxrXU#Xr7!3lsd4O8y zOq~F8M^(J>YM>$2{2~X-7QJ~LMgR9KEKt*)fQ!~YqBwn6t%JbMa zS!QEF?!KD-sG(Oy+Y(16%-w0xPVo@2@uqv8i}G-B8`ck_uJb~bHB-gf6V1+AR11k5 z+uS&W+vp&H2mL`i@Q3LFiyx6i1I6asKW1@yk7(9+vK*?$I}wP*f-fF}!B)q6p=^&$ zQlD(}SvHI?OAyB6{-mt=y21BIPA3-QONsqMYDs(IJ!BciX!@sf$Nt9L{$aV5m2fSK zoO^CQ&dgPG7MVtqTBP;A|5jg8re&;8k*lXN3fqzgrE~SU+yhP`25pRVA zU$xg|aB?uyhbU0-Hx`!EQs1ugC`p?YGc|P{zmIE;{zBeRmlEvMcq2BE37uZRnEi5$ ztklF6J3yi*lHe8sfdm{*{P-X{W-xp>(CKR9vXPeCtC{c$0uxu?n|UI6Kugmcveu?G z0I>;Ki)kvp*iOo2rs{y0T%A={YRUMa-Mo|&pXO<-|pg`A4aTCq^v zZ(YJ{i%VgEAb#O_C^vb*#o=vPQsE5FMR722DmU(GQp4nn!NcPW_uWJYadf1unS{hA zyP=B+;9OVmT39dlt(xNCgE8{17GWSsCGQ_kpu<=|@ z*>s#k*j{DLLbh*nSlI#V!<2xj`TGd`F7o#8>T+D1MBe8jAs>El3cP}u3U87rlWD=)ZB zdIz_o*$SFpcDnY3X}}-3;^v*qXbSP4FU8rV_-XpXqyUx63xG}u3yv0C$xc@tv8H3s zENNzTDq|`sDKUD!ph%UmlIGI9b~K9=m?BFV__Osa%l~P<+@tQVg+Fgrjm`ElvsJj1 zbmA+wTMC%WOgmhGAQvG)$4~PDQ>r`~&W@hXY^~0}-1GvkdKS3h$uQW zC<3BW4ObI%Hcn4)NU&%`iDpGp$*Wx6CGO9%Y7@!vs#P#FQ+zA@b}*SIJo6+#u~35l zd-nRvh7B&Iilk2u6(kAb`-G=2%K@y8W@)jXRDSJ)*SM@co=b!5Vhw0s6|0MB+@*(he)5vUdt_X z{q9Nh+gGoCKl!5nINFQN%BgmW=)nDE@P67U1YVYz*T=3a4qVqZeXiG3z z&k+53Dz9Ktzv8X#;e@L&j&%;_%d0G~pHu2IGvi^sZSOR<*ut)NqVpl^cqyG~H_{oi z(a#);Arfn-$r!!(EFh>h8ypz#jcgh%J!+_QqG!(dv-4IGC?OAL_*Oxj*5ZZqe2{;o z3GjaRr{@WYJX67kLxHT1?2m@ z>3#{n$|dtp^Tg`kxjFY7cKrR>Q?&1swCKDn?X5W5zC>4)Qx?oMQ+}Xkm1V#v(u3}i zX4dw^^8$JG(ff9vO%=DPo%H^vNZ>pN!4b-0=P*nxH%mf{@T)3a++{@TQFz_X&ddA0Kga9_@hhx%A3s?gN&y#|Ltl>22V|c;5?~jtO>8_b=c8oh6;uu>zV3Pc zVd>~dD^i=Fb4Gvk#_^pTzQw}S)ye8m6oDpu*GamnYFZ3k=F%&yA4*NXeMBza)IZp* zr~cf^-$a@6TQaKIEEDXSa_(aghVoeWAmdX-woOX`9sYUz=MQPo^In(>-3vAw%IH^E zFBQX*YMz>yBO<=}e;sKKH28Vv1w1g;dFAnaKq6*x;DyRmXF-UK!)$~+hY_A1Wq!S~ z%ufJfl6y~ObHp6ks2iYb_*LL)%vQXrVm|!Gw5RH^rz6eR$u4*4PxhwE9gUUtH_n~= znId@$JKL?p&dcto%pvcJ$5V$1IKcgg$$V>F>V}K2HChP-P9%&8X!U3bEEeVuV6;h} z{?y!KPgkGJ4ef|gR!0YR@s`50xw;>=KxHm9dVb0x7Ed?A-&5bU2$h9fPsb=k4qr$| z)_}}cexlA>^NC~X!^)ie1Z~Z_yaHXEF7e6}J}ZQ6AZET%=eRg^R^!I?ig|HA=7oE@ z;+nA+p%!a7LmsQ8)3)va9(4x0>?=>zK7SIofzSnrLazg&Ut*bdN)O#~Gg#<>6gNNT zer*1+JvEYz{MpePj&H0~_SzBjg1mfvbE=ov8GA>RR!tPJ#i0Px7x@)dUKY4^5Tm0; z%_p4SFHrPW~R?`gGIqvtkf{=X7mb_e-Jv;pK@fmXdF9V~N-NM(Lj8tGX6= zlTOQZ{{Y4LNVWw-?7LZk$@S`G^0Y_JJ)CKoAsoeu*$`^hbW8HPD0Il!Iq#@^pqSvZ zt7CS2TF9Ct=ndu!@@({^oK};8i%q@!*ZBadWNRnkVUG)eH_4rtxRm`e=@>TG#jeJ^XQF zk|FYFkK|24pG5C3ZgIUC8UNu<16n`Db+h(T z#=ojwKM73MyFR}dgoedbI{y;#amug6oLU^=<|&Bxiw9PoI?9Innu@`sqQ@fPdzbOSqNA2EN4KHD zb^UHqKi8HX$(hVI*51R?W^=U5e;8B#a|xZZb$8uaNdAgSyhm}J(x67cTR*PqyN)VJ zT_bf+1;gc_0x4SEDg1?ukKd<&@TV!Wnt_I?%tYBciCZUE-iJgbfhliDM!4A*q&R_H zZc0;A&)t6SMT&g9us@`Lz=&jwrVZCqreZO>>Y`p>Wu>98&6`*hOCfBCbQy^c`hZGN z7m)gN@S#f$hw>WnNEpi%M@{35%==4QG(-KlX$QVd5z_AS+5W|oDe{;QBAsAj)=JR|) zr8i+kta(F(ZY5npFb&awcN$6^{`0ojSdEs{d%8&)3BA0?l%2EyHfq&=aWW5Bdzo|8 z4QX4s1A!hrS)z#A$>nRy?WDM$yYgFQ_`id#tc9Bj!Jat+!Bcny{ZlKE1YMmHR!In< z(hPx5y##XS=IetBZbvoWNkzcl-i#g#Wt9!OtvMVfPB&OH9uy+LQjynrCEb5`on(Lg zs`Fp}-aFI(!roX*k(yWp__8pFg?N+|$Xhe_{%R}s*Gx<{zMYTv*SCR%s@SV4zze6Z z1@1y#I;MO)<@_*8{THpsi5cNUH*a>D^PDTB7z|@uaJtF=$ZT-!7nR( zd!JF{YLHsE)>k*x8%Q%%*VrUzWh#z(a^QQqmg#dg%Gk*bgm~d<6uOp-vPg)k)P&`7 zWDS54;NcJy%z5JtdiJ6kfk39Vxnz?#+#PHFK0g{^zIEbRycZO428UGB8f$$Uu6u*79NuINFp*NgKB?>Ch8B}TJxLOangeJ_cR7i?c9V3d0t^j{z zY2V7yLbLIlKcSP|$p%@1>-|;M*^(37H&hqoi~)SPUCVJ76zbY1%hMnMx6qsibpg70 zpf;XxMqeW!2XiY+S&tm4*rF<_f}g5ksp9&V{gtIRmC^-zSb`kGh1+clfz>E?c+7c; zwukI*CnKo=I@B;x`_CFx`y5r%*%`i!bMDG!)0?Z(4|{&T;_W)8e;{s9xtQoo^G|`@ zwa@(}qlQw@P59=Otx|2PHS>K|F!ppoj=udR3fJcA(sqkf9rhPx2tqe&!vK7{9K9JL zC!U8=@D%Erii|n4yB1QY=}~8vp|r|@a0-E zq|Pzd)Cu50zN*M7abq!~vH;|HPyo*r9C&iI;;^5h({}z!E@|>#rZU`T9>{7|% zxcd=@kqwo%NepY!5_B20CQiF5mCs8og<`d~cJ7+sc1}*jK&jEF_%~&&YH{1P4bIKWC3V zi091^8%W6sWCJBfC;e2vWdSaP#oK<+{2hio+-^E-WeqTKxpW^^tp0SOW>kOXaCtau z!FsT%EZ*u6o_T;QG`Hbk&yeP+l0&GhUs$pcMHrTqEAdmJlhW_|3Ssi_55CjE^?Y0+#$ukTzywc-LJBepWF3mMY zEa+E~(yv%KM;uoIfFhhVKNE$G^kj_7E0{c!QJtP>joL%<~RA8EQs0ay4uc~<>f5FZ@I9x z1hQw(NCO1lXdD`Gzt}) zD_>gcWhTOxtkp6Kxsf76{;0Ts9^;!Ow*8Z1hRT6Un!9-0d&dWj+N3jU;^Jbtk<5>W zH*ybi;#S#6ly<(KkOmx(;FAz0JSKAtBVkNF-=7_dXI1@h2k{kjnBhqSfa-aSYv1aZ z89rNRa7mFy-{{B=D~%ESUTIG_HsbxW4{(XX?OFh^eq<(8S>F`2%rTU;^lRtK9cD-z zqa+!?e#R|g>6wAVt=jC9M^P8ok8ud4du z{S8am2Eq+VCaru?+h&?-Ca2*E>LKWk9oJ(y=rhxAwBra33oGLBKib5{mwv(m3=>nG ztL=5GUP6#U_g>&T-KM@F@i8D}OM9HDFGI?noY;TFp9ZT|ItXg$mf~vfPHU%4mG<`c zzKy$+a(VI%Yd2PT$U%C-3OH>iUPuvR|EsL+4|G(HsrX@bgr5t4{7xBq&JFzDhp?2JLP=02QN z-dWUe%NufVtKMRE>x{hUl$2tB(RHfaIYnTZW7P8iD6gEUYy7;$DnZ97Czh~l+1nKK z5^C~6SE@u%@gHBxJZgauLW1UJM` zMx3>lU2R^xhvD^atFB*bgYnu&s(p#Yqlxz>_tg1sNL$Yqgz?l{ZUqZ;6E@1TUwT>l zU^g&9sK10;)FpMZ9`f|?J3fz-I~`CKN|&78k`JfTnIfpJ={hycZ&~d{C&bExY;Epw zy1DJc+$;mA@OLu|WYcY4e6~}FQ@>*e9%jey$iRm}2CN^vY-ygext9Fm>L(x0Xkn`1 z?KiSx6wbKDDp>!kpFN}u&O;$2F||*!feYbe|8tF=)XzEF=u{_5p+y>+fl5kMQvOS*`Se5 z5%4f4d8f@~AmoJ=FvNa?~mYdKXB8^dIXA^trK=Wi?ezqRR?6Kr3_%z<0Q9d~^PX4}ZI^OqI(N_;TBly2SFjjZ5Y*J0V9BqUZEJaOK)o zIcOm>XdYbCDz*fF-BEod=pD#tbb8z2K-?AHvM`itRu2AMZG1X%KpH>v6S;0LXl>9~ud^+l;l9Onkm!A(u z3K7@9wiSb7fFCjnWaN2Bek^E50|GsVtC-6Sh?@jj3h_I)on_{F31qo1+IDTH2Gr^4 z1xM}P?VauJn!BW~g8B*C@q|hyhnUY&*!d!Pt=0XZHoEbt&ziPwUP>!xnh*3pSWP@7 zz5XZ@zIR>{T<_NnHRrF^%zV3OEbrGOpeye=%oXSbVn@QVeF+4GuwCgUoveEva{u9} zt2oHxI?+L%CAzdRep&*)4DdFgX()|~gpM0SD=XM3+Dmwvwv%IFMU=_xY!r!o?3A&v zLh|?q8!ECK9B{#vSW>}8Gwp=?d*0ou+(M59SAU?PjggkGe{utPW-7YjbOX|Qg*aqt zz=3K=KRPveJarP{ewCmW9+Cc1A;d3QfD>;)Qr4vyzXNQ>vSw0rhMX9gahI@HGo8?1 zx1LU%T(XEu9hcww<4We*x)T4ZUQ^{KeqX;czp6)$*wzO`7)u_kl+@0nc@n|)vL-cd z_5HTEP{~sh-Gcf5mmHbJ=7u5;@p>sTwA8gFbk#+up!xZ7UU?W7|0zNm?GaG392NqrFW4+{rp? z1@rZsgXF$IUop2g3>q6ZA~E;C@=u81itcJ$ke18p(CXt=tV?9rvj!*X8RKp4OKEN< zady8RpO|5jOv2Mi(TLky_*H8k$fQ&1Q(pj3|Ixm2=cZ196Fm&STnlJp^VlmTm;yjQ zv7pZ+p%|tLHMtJ|G0h&JMeU-%to6fX9I(Nk`YO=G zuv&eHJw$3iD1ZAWWOTCAF6GugLigp&!P?4bH1FC|3cujB_x8$TAhh-cpOgC+r5PVl7IW8DMckTI=dTP9wfR$;-i&b@pCVX! zPGED10HilAm#Z2iDkSm8_e`nsp17S=&_eLu`%{fkk@7iwdWwoyg0Gf>fzx2A(+ORE zPC-7np|N;WG{Hm4;akmwFp?a4oy9A*H1e)737Z{;(28-OcUT!B)a)sYEDJ{DIj(L$ zSrESMUuHLP0%m z7u_JWUejT6s@6}Zz+I%?wy(9?@$omK0KETv$yZU-=I=k}g$+u%pj&15bjIC43(MO&k~% zsr9`wznT`n2+qRO>8RIh_YsB{7jA4irxJ!Qu667 zqKcBRom1l0-sJRC4$-mksDv?hJ&%BFMJb!ZY`1C$PH<8EMz?IKzIF66;Lls>T$hn}W3sebJLs&yLr)e$^ z!0aF)y(ERpQuUeO9pL35eocu9bN!|c_y|Uv^?3)`S}-F^v;X|sE9F7%k$ZEWgPWJ5 zvhqb4u$ptC`_hwjJlMtX+J@yQ!E#`fN~6-YbF9usfxnr57q9CCqtw+P&?n$6F~0qE zSr!KSC=NjDMJ7Z@C0N9SAy&X1WRM1FDN=(jbv-cgrfDzDh+LYN?>*Sz$@lh%*IJMq z>|0nE`sQ@_;i6tt(8Ixj22z(q1f9^vb#&&t6%|Qn%SczriBjL}ii!fmLPObB?-eXu z;ZAt^`|m<3Dm;u$`hrcJ>>3J_Yt78$j4Lbnc<_TyMQN* zf7wM`A?pgEIidv|>$cza-%AxJV=ap=%GMpP&RhuBX52b{%g( zNXJiTE?ZM(EoucjoD?$BdO};JtKQAs&)KY6dBN2%=bVTOgM6%X@__9uo_4eQk`Af! z{c1ni>}bDp26(SAEm3U3-3R+A0aoKQxf^AH{ZoQQoGgL! zWes8+tVMfD3Bn0uVw}Y{)pR|Qtwn=f&#;3`LhcBB%1mVZGUV=wg~u#?DoP*zTP^Pr z^F=rtQ-^IPK(@99I83x!8^h`tR-pRx6v3fn{6o;)b`_Uwbxks*+0_C058 z+1RV`rcdJ!vFWPFLXhCv6lnMH|hE) z{t>>zPg0U$1X#|(&GDL4BRiHMYMkT+lnT!jjKp=18S|N6kK!0-w?B^y7kChqA%i6U zGE&0?aNbClYZO0DP{DdFa}Uz@3=4~ZbQSP_+^15_hk%nqn9Zw;xvw%K=&2pb-DUI= zXz_-=(CG{6@$&sf<;}CyI|!% zB#$5)Z~gdHd`RHf1vHRSAEyb+H!?~lgW0eoi_BIJNZ2t$N7QzjL3Z@Cxwt%&)40-%{aV$bWU2MOy0W5A!a7XfgrQ%S+};@Jgukmxslia;VEw zp8-T``w<^wz%;KB^$0-9OaV^ICxp&)JS@sBirIe;kb?8L-=!tjF0G3AC)CgOonPke zKP))^lGyVzYFyJu)sAv*a;1jqR4b-RG3Gh!r)^?6<6+hd*vN&b9 zfB)LBQhKZJr3lVynWAOjOmpBx=hOQ5S!FAp-M4Z!0AEh=(oU8k}?>j;z-IY zqLs~eu#LZG?|M*&ACN{KYWyZUP^fhC*muZ}&pr8J!JB-`_)1H2RpSEFo}=781~urN zI()W=|Hsc)m+NHOEiUJ^w4n)6o!T64`1E=~Vk6$!LXVG7bpEC*_V>@<=D7Iv15hgo zo1EuGLppnaC0N#T@v_;#gC<4r`R2BACCV}yR*niRU8S3;_aR~W8kUQ!U6NB)3=+Rx zu5eDZQj_OytIGq_w-Ua+6D(_8`&Ej7R|bIiY_b-8y?_hy6{+w6j}wH&m;)3H__l+hc}i4NTHy zo95&)`}X!{x_9+>PW0L0C~9{q9z<>J%cVNu-kfz^-<;*V!4P`1P&ADIII{&po8GNe z>K2v=Vyv>!;(#ybt-0#~@f+SUn^l@*&1xO9)0ySLS^gS`K!1~q9U+L%CYgF`FI`jT zX|4d;sTluJac??r9qQG+Ei*un3`#Xqr*3u$qzld^G#fM@wk=oGvcw*KbeiQrJLx}_ zYE0b>>IV=F)p7X`aBW`;t=P2Ap7T8D0==d#L@Vb>ln)S}Gw%H{DZz zM4U?Bz67I={~wDxjQm&dKY8yT!9XR+jeiCIlN|ri^KUZztK5@Nyni+Nn->3V{p~-- z{+~2i-n-w#@re(IDQY*OUvoo9mU{i~M1kq6f3x+i?a;gLuW2V!0nB&*nXmD>GJ?D* zD%E`lH}micURaGH2KftpL)QSo7)>Ggf0vA{v;)nYiM)c=Gt4T%iPxaychHB)eBz&$ z37R*eB?Cl<6KLSiFvF}3GrQM&R}T-~*lv@J+>daMI|8jP|Bw_~66d;4!Tb-Z!RS~u z1yIz{##<~5?vDkzwz3NGR{yh5nprqEkc;(q`X4Zirl}%IduuKB-72T!^FZ7mO4 zORIeMU5%XOZ~0y!RtG2ug{6bF3cx&YVjVMJ9>}qLNRAoa5nv|aLn45K(H-(I^&Uop z<@;*bnAULY|J&{VLh}E+mvpqV)My3f!?O;CK(XJLM68_61P2JFO{TC~oBRL1*3@}HO}ShcRD(#f}TA5286PGQ2qm24s6 zSUF=IP3nmWhsUA8&(JA<+XV@*5M8#vS;9m`@H1dPnspBoG)zSJatF%)QHS?W_v^5= z4ocCqNi-CRPwa7XyQ`YvQI5_rEo4&XVmH{|6Ezau9=zVOp`MNtc<@(7=dpyRN1FQb zrvWxiY3qb;fI<7peU#)~Mb?J|o16<&&c=;~;;&B<{cI7T62et28+CnNO*d^j%C(qhge9{mpj0UGxdPdQTD07Oy;Q6|e00T+~Pc%C=x_ ze#MYcIKR0c7rp8k*eXZpbb1Smp8Xh-d*``gpjbvhU~wk|CJ((5e}(zMZWH|^3`+n9 zn3`wq1AXF*z=akZUl+&JFT(eg)TI+NtZ<_n25wQ%g0~udw<$R_1FQPchaLsR*W^PE z3CYur@#o4JfA&Bp=gR}m38s~j%VJ)jLEz8pX@2j^(alSrq&(4+VW))XI;Yb;!e}iv zAYLs61`~nlUHL~Wv*Ile(Xf|jFR*||NYMUCi_koaea%K&_Qqt;_d>h5`+A(BD{BXsNz4|=1%OI_4MxL3 z;QD>Gml-9VSuR*P0V8iHXLx%rqYN%(R<|DQ&(dk<^$fsTLu17jg zM`Lz3eeQB73>eCrr7LnQ6k8-DJa#K26WWRYitQi|22Nax(t~$>WoN%oJo*tPB>82) ze`<&JBbYMuh|qSi>z99d#M)kbw3Lp-Xv&1R+#~I*Z4ZBCU;CVa+d4lHH?`6|aW!vW zjds$|DFBw547D-r)?+*pwjn{AG2U18OWq)|`HK?OyiaJZL$gqwz?9bVK0kExPjUpx ztW>{}jmT5dY_|lv2&Hqac2o(5S2D{z0<~8DE`=B8B>gvYs=-^g4TU!@8_g?W60mK! zO@iYnlm(R`y1T;T>$CfX#_VN2p(W<_`RtBH&aD4=o!1`~-$9|e>4KK+mxbaYco^~7 zl_HRGW-L#Nk~Y+|X{i$R-ynRAOVs7ibjM%E*;`8Qw2KEnsLw#8IZuK9&ZmPs_H)d~%0YL#`l)iMV;u zk6oq=B63U9Y3l;!^KG3?#^}B0{^0~++9<*2X*F%gqsTu-3?yz0h8__fqyA{gqk|-y zM9Z@&lS-Srt?@9pTEVSL`JML)J-+u6aG~5uc1ez=;>c=fH)AU;#XY!fU&q{Uc!8VD zt9x+D|BLfyHh6SOKu#ckC5+GB59ZCF0{{FCL&}!r?0P})>q{4HxiJnq)p<7`@HIjd z!|K)miPjL*6k%nr{phz)C6m3D9oJ@y@vwjU41m<06v(JU>2sb`od0Er@Lb^y0PV9V zE@pBTD9zvA`VhtY?+E_xd!G~8VX1w_Y^UXdpFIlVJZ9(weG@3a7Qp$t_r>rvomC8R zdJO#b|8)h1JN+xQ3!~t_At~8}wjE}j1sa{Fu`}Dxn?-FXp z+%A5XX4CbkWpoEcLs}yO;u%YKmc{z$;YiJ)*yq6a)oAgc; zET}J+RN%L>=Gt|14Jv{*zKdJ}PJI=zg>qB_?(-{gH(Pt?{m~3chzfO~8Fm9a0P?dQ@tmj3*9 znD?>SL?4ves)-T~-Uf4D?kM;vgO*4D$lCL(Be*#Ks?~(uU?@w@j?JN< zzv_gSaU?F^Wse_Zv{O#d&%bf2{HVsOfTof(6m8B2k2LgsHSiF+d@F@swtqN!xVZ3w zd8WmKCN#UJ@3w6@;55WwE6JNsX=_GqtC-3nMFPNXf}_9)YH-EjG^~nyb+?AZS4V+ND$C(T@(PSPj7z>Svt*mIfaQ3Ra!$Qlu~*k_!~@wi zvFF(_fQ(^UyF#45v(|u{2?VE)Xb*Z5i z9nM3|S~sunP(Ores>kf9XQf11qBNn3AQod5(^0z@gKK77^S|8z*}P!}6B|(G>lL{e z!$)wzFj0sG)z34Lsh{t~6ph%l^Ba-$)n_F8?)Lc(nkworKaGe?hoc*XyP{^bAB!Us z#gic;#gl;)p`4dW3&snl7^_BvQ??{ZxgpZ>!A6}eFUMBd~+h4~dKus2o-59QqCvR!0m#z8*&RzxP%kwnk zv`@dQ=<|^H?Jt?d#bMN5s%N+ex;lEaxffz5*IWQ_<4xpqw}lt#qr&y8COR?KY^4~5 zRrmax3VJ8(f@5YgV{Od+CM6ULT15`GeA~oeL<#B%cZsri4DNg-zE{Q&?LzNOGyjfagW$HlI(n%G5u_^tj%Bi&CJ1fYDq(?r8d3T2)}$Y1##0Rm^+ zbJghT0| ziZI%d=r5dLwEU_88s{u81GT(PD==@3K0Sj(c%6AL-g+ngTrk>0rN!~wXcKms?EZ^# zrA~OowM5U)!?pR(s>AOks{de=H4DwnW}4Aclt7iER7G~Od5AnqI_kO&=!`*Q%^j~{ zy=DL^C)-&msO?edS#96ua{f%JVxG$c34kPQHU8 z0#1e(m0^PCh+<){~i3=q3We#on0#$+?Ff+m45$Fd5=4AfWxOzQ^SJ;SWoY1*EC>de2P!ljMFg#{W|Rwy~s2j?0$+$(f~IT%`vZBm*{xuI-ur^XK*Ab5#!>9{00& zo_$gG(%$d(0wvGq&U9P)JqaAx&XPB(i9KTlS>1op|Lm$d6$(C6^hH79p00i_>zopr E0KMRz#Q*>R literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/request-lifecycle.graphml b/docs/guide-ar/images/request-lifecycle.graphml new file mode 100644 index 0000000..aed5293 --- /dev/null +++ b/docs/guide-ar/images/request-lifecycle.graphml @@ -0,0 +1,834 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + user + + + + + + + + + + + + + + + + + + + + model + + + + + + + + + + + + + + + + + database + + + + + + + + + + + + + + + + + + + + + + + + + + + + view + + + + + + + + + + + + + + + + + + + + controller + + + + + + + + + + Folder 1 + + + + + + + + + + + + + + + + create action + + + + + + + + + + + + + + + + + perform filters + + + + + + + + + + + + + + + + + + + + action + + + + + + + + + + Folder 3 + + + + + + + + + + + + + + + + load model + + + + + + + + + + + + + + + + + render view + + + + + + + + + + + + + + + + + + + + + response component + + + + + + + + + + + + + + + + + request component + + + + + + + + + + + + + + + + + + + + application + + + + + + + + + + Folder 2 + + + + + + + + + + + + + + + + resolve route + + + + + + + + + + + + + + + + + create controller + + + + + + + + + + + + + + + + + + + + + + entry script + + + + + + + + + + Folder 4 + + + + + + + + + + + + + + + + load app config + + + + + + + + + + + + + + + + + run application + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + 6 + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="57px" height="66px" viewBox="0 0 57 66" enable-background="new 0 0 57 66" xml:space="preserve"> +<g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3799" y1="-2276.8809" x2="27.6209" y2="-2306.6792" gradientTransform="matrix(1 0 0 -1 0.2803 -2252.9199)"> + <stop offset="0.2711" style="stop-color:#FFAB4F"/> + <stop offset="1" style="stop-color:#FFD28F"/> + </linearGradient> + <path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109 + V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77 + c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/> + <path id="body_13_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51 + c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146 + c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021 + C1.378,56.689,0.5,62.768,0.5,62.768z"/> + <path fill="#2068A3" stroke="#2068A3" d="M28.106,33.487c-8.112,0-12.688,4.312-12.688,10.437c0,7.422,12.688,10.438,12.688,10.438 + s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.487,28.106,33.487z M26.288,53.051c0,0-7.135-2.093-8.805-7.201 + c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387 + C40.445,49.917,26.288,53.051,26.288,53.051z"/> + + <radialGradient id="SVGID_2_" cx="14.2417" cy="9.1006" r="53.247" gradientTransform="matrix(1 0 0 -1 0.04 65.1543)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#74AEEE"/> + <stop offset="1" style="stop-color:#2068A3"/> + </radialGradient> + <path fill="url(#SVGID_2_)" stroke="#2068A3" stroke-miterlimit="10" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67 + c-2.854,5.51-14.022,7.807-14.022,7.807s-10.472-2.484-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25 + c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492 + C56.055,62.768,54.211,55.906,49.529,51.225z"/> + <path fill="#5491CF" stroke="#2068A3" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397c-0.514,1.027-1.669,4.084-1.669,5.148 + c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.335-2.36c-3.601-1.419-4.071-3.063-5.89-4.854 + C12.523,47.135,12.878,45,13.404,44.173z"/> + <path fill="#5491CF" stroke="#2068A3" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617c0.516,1.025,3.617,3.693,3.617,6.617 + c0,5.186-10.27,8.576-16.698,9.145c1.429,4.938,11.372,1.293,13.804-0.313c3.563-2.354,4.563-5.133,7.854-3.705 + C47.754,49.045,48.006,46.574,45.777,43.924z"/> + <path fill="none" stroke="#2068A3" stroke-linecap="round" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813 + c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/> + <path fill="none" stroke="#2068A3" stroke-linecap="round" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3 + c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/> + + <radialGradient id="face_x5F_white_1_" cx="27.623" cy="-2278.646" r="23.425" fx="23.0534" fy="-2281.1357" gradientTransform="matrix(1 0 0 -1 0.2803 -2252.9199)" gradientUnits="userSpaceOnUse"> + <stop offset="0" style="stop-color:#FFD28F"/> + <stop offset="1" style="stop-color:#FFAB4F"/> + </radialGradient> + <path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357 + c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012 + C36.627,4.945,43.59,13.158,43.676,23.357z"/> + + <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="5761.7578" y1="11330.6484" x2="5785.3872" y2="11424.0977" gradientTransform="matrix(0.275 0 0 0.2733 -1558.9874 -3088.4209)"> + <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/> + <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/> + </linearGradient> + <path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M27.958,6.333c-6.035,0.047-10.747,4.493-12.787,10.386 + c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247 + c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.083,13.952,36.271,6.268,27.958,6.333z"/> + <path id="Hair_Young_Brown_1_" fill="#CC9869" stroke="#99724F" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25 + c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807 + s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678 + L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/> + <path fill="#4B4B4B" stroke="#4B4B4B" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M28.105,2 + C22.464,2,20.2,4.246,18.13,5.533C29.753,2.865,41.152,10.375,44.46,20.5C44.459,16.875,44.459,2,28.105,2z"/> + <path fill="#9B9B9B" stroke="#4B4B4B" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M11.151,17.751 + C12.878,8.25,18.686,6.309,25.273,7.127C31.295,7.875,36.93,10.491,44.459,20.5C37.777,7.125,20.278-3.375,9.903,3.921 + C5.569,6.97,4.903,13.375,11.151,17.751z"/> +</g> +</svg> + + <?xml version="1.0" encoding="utf-8"?> +<svg version="1.1" + xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" + x="0px" y="0px" width="41px" height="48px" viewBox="-0.875 -0.887 41 48" enable-background="new -0.875 -0.887 41 48" + xml:space="preserve"> +<defs> +</defs> +<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-979.1445" x2="682.0508" y2="-979.1445" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#3C89C9"/> + <stop offset="0.1482" style="stop-color:#60A6DD"/> + <stop offset="0.3113" style="stop-color:#81C1F0"/> + <stop offset="0.4476" style="stop-color:#95D1FB"/> + <stop offset="0.5394" style="stop-color:#9CD7FF"/> + <stop offset="0.636" style="stop-color:#98D4FD"/> + <stop offset="0.7293" style="stop-color:#8DCAF6"/> + <stop offset="0.8214" style="stop-color:#79BBEB"/> + <stop offset="0.912" style="stop-color:#5EA5DC"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<path fill="url(#SVGID_1_)" d="M19.625,36.763C8.787,36.763,0,34.888,0,32.575v10c0,2.313,8.787,4.188,19.625,4.188 + c10.839,0,19.625-1.875,19.625-4.188v-10C39.25,34.888,30.464,36.763,19.625,36.763z"/> +<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-973.1445" x2="682.0508" y2="-973.1445" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#9CD7FF"/> + <stop offset="0.0039" style="stop-color:#9DD7FF"/> + <stop offset="0.2273" style="stop-color:#BDE5FF"/> + <stop offset="0.4138" style="stop-color:#D1EEFF"/> + <stop offset="0.5394" style="stop-color:#D9F1FF"/> + <stop offset="0.6155" style="stop-color:#D5EFFE"/> + <stop offset="0.6891" style="stop-color:#C9E7FA"/> + <stop offset="0.7617" style="stop-color:#B6DAF3"/> + <stop offset="0.8337" style="stop-color:#9AC8EA"/> + <stop offset="0.9052" style="stop-color:#77B0DD"/> + <stop offset="0.9754" style="stop-color:#4D94CF"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<path fill="url(#SVGID_2_)" d="M19.625,36.763c10.839,0,19.625-1.875,19.625-4.188l-1.229-2c0,2.168-8.235,3.927-18.396,3.927 + c-9.481,0-17.396-1.959-18.396-3.927l-1.229,2C0,34.888,8.787,36.763,19.625,36.763z"/> +<path fill="#3C89C9" d="M19.625,26.468c10.16,0,19.625,2.775,19.625,2.775c-0.375,2.721-5.367,5.438-19.554,5.438 + c-12.125,0-18.467-2.484-19.541-4.918C-0.127,29.125,9.465,26.468,19.625,26.468z"/> +<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-965.6948" x2="682.0508" y2="-965.6948" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#3C89C9"/> + <stop offset="0.1482" style="stop-color:#60A6DD"/> + <stop offset="0.3113" style="stop-color:#81C1F0"/> + <stop offset="0.4476" style="stop-color:#95D1FB"/> + <stop offset="0.5394" style="stop-color:#9CD7FF"/> + <stop offset="0.636" style="stop-color:#98D4FD"/> + <stop offset="0.7293" style="stop-color:#8DCAF6"/> + <stop offset="0.8214" style="stop-color:#79BBEB"/> + <stop offset="0.912" style="stop-color:#5EA5DC"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<path fill="url(#SVGID_3_)" d="M19.625,23.313C8.787,23.313,0,21.438,0,19.125v10c0,2.313,8.787,4.188,19.625,4.188 + c10.839,0,19.625-1.875,19.625-4.188v-10C39.25,21.438,30.464,23.313,19.625,23.313z"/> +<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-959.6948" x2="682.0508" y2="-959.6948" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#9CD7FF"/> + <stop offset="0.0039" style="stop-color:#9DD7FF"/> + <stop offset="0.2273" style="stop-color:#BDE5FF"/> + <stop offset="0.4138" style="stop-color:#D1EEFF"/> + <stop offset="0.5394" style="stop-color:#D9F1FF"/> + <stop offset="0.6155" style="stop-color:#D5EFFE"/> + <stop offset="0.6891" style="stop-color:#C9E7FA"/> + <stop offset="0.7617" style="stop-color:#B6DAF3"/> + <stop offset="0.8337" style="stop-color:#9AC8EA"/> + <stop offset="0.9052" style="stop-color:#77B0DD"/> + <stop offset="0.9754" style="stop-color:#4D94CF"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<path fill="url(#SVGID_4_)" d="M19.625,23.313c10.839,0,19.625-1.875,19.625-4.188l-1.229-2c0,2.168-8.235,3.926-18.396,3.926 + c-9.481,0-17.396-1.959-18.396-3.926l-1.229,2C0,21.438,8.787,23.313,19.625,23.313z"/> +<path fill="#3C89C9" d="M19.476,13.019c10.161,0,19.625,2.775,19.625,2.775c-0.375,2.721-5.367,5.438-19.555,5.438 + c-12.125,0-18.467-2.485-19.541-4.918C-0.277,15.674,9.316,13.019,19.476,13.019z"/> +<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-952.4946" x2="682.0508" y2="-952.4946" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#3C89C9"/> + <stop offset="0.1482" style="stop-color:#60A6DD"/> + <stop offset="0.3113" style="stop-color:#81C1F0"/> + <stop offset="0.4476" style="stop-color:#95D1FB"/> + <stop offset="0.5394" style="stop-color:#9CD7FF"/> + <stop offset="0.636" style="stop-color:#98D4FD"/> + <stop offset="0.7293" style="stop-color:#8DCAF6"/> + <stop offset="0.8214" style="stop-color:#79BBEB"/> + <stop offset="0.912" style="stop-color:#5EA5DC"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<path fill="url(#SVGID_5_)" d="M19.625,10.113C8.787,10.113,0,8.238,0,5.925v10c0,2.313,8.787,4.188,19.625,4.188 + c10.839,0,19.625-1.875,19.625-4.188v-10C39.25,8.238,30.464,10.113,19.625,10.113z"/> +<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-946.4946" x2="682.0508" y2="-946.4946" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#9CD7FF"/> + <stop offset="0.0039" style="stop-color:#9DD7FF"/> + <stop offset="0.2273" style="stop-color:#BDE5FF"/> + <stop offset="0.4138" style="stop-color:#D1EEFF"/> + <stop offset="0.5394" style="stop-color:#D9F1FF"/> + <stop offset="0.6155" style="stop-color:#D5EFFE"/> + <stop offset="0.6891" style="stop-color:#C9E7FA"/> + <stop offset="0.7617" style="stop-color:#B6DAF3"/> + <stop offset="0.8337" style="stop-color:#9AC8EA"/> + <stop offset="0.9052" style="stop-color:#77B0DD"/> + <stop offset="0.9754" style="stop-color:#4D94CF"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<path fill="url(#SVGID_6_)" d="M19.625,10.113c10.839,0,19.625-1.875,19.625-4.188l-1.229-2c0,2.168-8.235,3.926-18.396,3.926 + c-9.481,0-17.396-1.959-18.396-3.926L0,5.925C0,8.238,8.787,10.113,19.625,10.113z"/> +<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="644.0293" y1="-943.4014" x2="680.8223" y2="-943.4014" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"> + <stop offset="0" style="stop-color:#9CD7FF"/> + <stop offset="1" style="stop-color:#3C89C9"/> +</linearGradient> +<ellipse fill="url(#SVGID_7_)" cx="19.625" cy="3.926" rx="18.396" ry="3.926"/> +<path opacity="0.24" fill="#FFFFFF" enable-background="new " d="M31.04,45.982c0,0-4.354,0.664-7.29,0.781 + c-3.125,0.125-8.952,0-8.952,0l-2.384-10.292l0.044-2.108l-1.251-1.154L9.789,23.024l-0.082-0.119L9.5,20.529l-1.65-1.254 + L5.329,8.793c0,0,4.213,0.903,7.234,1.07s8.375,0.25,8.375,0.25l3,9.875l-0.25,1.313l1.063,2.168l2.312,9.645l-0.521,1.416 + l1.46,1.834L31.04,45.982z"/> +</svg> + + + + diff --git a/docs/guide-ar/images/request-lifecycle.png b/docs/guide-ar/images/request-lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ed032cec2432925eea80ece48ad35194c3074e GIT binary patch literal 38617 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�?E9#H1_bo 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 X?E)*)L#|uB2U+3i>gTe~DWM4fWOCxu literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/start-app-installed.png b/docs/guide-ar/images/start-app-installed.png new file mode 100644 index 0000000000000000000000000000000000000000..a70f3e687dbc20f2e8bae02c78acfc98d309ef3f GIT binary patch literal 79105 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

MYH1e;@cc;%i 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 literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/start-country-list.png b/docs/guide-ar/images/start-country-list.png new file mode 100644 index 0000000000000000000000000000000000000000..375419414de2fe299ea24eb94ef39eed8faddeeb GIT binary patch literal 50310 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 z�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 literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/start-form-validation.png b/docs/guide-ar/images/start-form-validation.png new file mode 100644 index 0000000000000000000000000000000000000000..f38652871ddc5a0bdef948f4db0f5bcbf7456de7 GIT binary patch literal 40121 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 literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/start-gii-country-grid.png b/docs/guide-ar/images/start-gii-country-grid.png new file mode 100644 index 0000000000000000000000000000000000000000..746663c8f9bb9544fbcfe0ce27965a3d41c4722a GIT binary patch literal 85543 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 E0OM0aZU6uP literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/start-gii-country-update.png b/docs/guide-ar/images/start-gii-country-update.png new file mode 100644 index 0000000000000000000000000000000000000000..51f2d38a320ccd1e6b98fefcda51f4d2e2c2d18f GIT binary patch literal 54509 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 K?^oZm5C0$D&(72U literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/start-gii-crud-preview.png b/docs/guide-ar/images/start-gii-crud-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..a8912e28293c086546ae730d210a46273e00ad6e GIT binary patch literal 60647 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

  • q2{ySK}V3YHmqu_sHE{?J#;#z(7nz?J& zR=vQ5w5J+bdks}BouY~Cjd20l(dMn1oSdFGl!w@vcJGJTn@md`T%LgdtIF!?^BOd> zJcL`q>TR)YqunNJ!+reSSwF^7PE2>vfvsD{VHfM2r3mzut*>J2(i@%$5#v@$x!X;G zq zr$`!pvq@8|-iJM%_MYbY@Uf&RoXpfrysuMck0u2dXPTAPTq zE1&O8JyI@1UWhDM@UqQzgWwW3f38aInVnQ1ZiJ&NjBsFX?q!a_Rnhm^Jg{-j7#HF zU{^#-IZHq(?r=Ki@FxSFn`5cS$d?5PQ(bdrx`6mE3)WRe+Pf#aWSuB7)TlU<4 zIoC`3x3%=8iYHZKQ?63Ki)fhpsGX`J6xF50-*^03Yjiks^yc&P0zPo*sm#qJJ8C9| z@W{Ph(kQ>@@-Ci}(o+M^7Q0qB%|sqbUXti&et5e(BS*A9k03mm)Ha;}$-hKAotJom zx;sm0wtUJ{h2P=xPqn88Ju&=EiKH$c29Hsnb5tIy)`e4TND^m;uFG8UEy|HU-2B30 zK{3Hc$(G-Ht?ohd_0I0{(DqaAx+LZO;$J4@an&Mg+>Q_;%Pm(1x0~Cd+mMw;^S7Ot z$zS5J-qipbna10ATGM55gK2dGS41HC8T!~ecfOmV?c)~j)JjiEN{X*!ueR63&aXb0 z&9s-fOw{NsDQAQobv~Kz@cPAie;9ab6l=lLo=nwBYz@tiw`Z+*z_a8sp*`^qY0b0M ziV_o*>Ls}d%HtN`(7#$u04b<`{hv@3JZaaiHH4((K& zsjP~LoqOp|yKz(SN&CBQys){&z@To$(dcVDe&3-d3utI^4zZFos=Qz1%ZVOQHOVBo z$0>&2;%_QT#@hdoBXCRmWNaxbEj>Qm+KhFzeRJK6(RMO+*t&IzgFmN?;mxN9!AV8x zBq=)ZsH;bwE{KB)=_EXB-+BV>zrXRWK;pd_e(4!8Ups@U%~ABz#|O^2=R2;=MB2^Z z(-H5o?X@SZDek%2Idy>`+rx`1tm``*a|ltHy*DX0Lr7S=RECZi(t!Bv1k$N8>5YNl z&zE^&wCJhidrZ+SIDIkpMqL{Bmqmh;Zj-Dv$j;iQD9nzCqnTpcO+SaFzh!s}vqu=x zmZ)F?etcvP*Xii{_wUDtY=0jYI-w;&J(Q-H1T*;&QItm^YUm1&V7O+%iR@!z^~Wuv zm+bL9k~bbNT_3d9kuDMBe+_O|qL+GWi`^qGV1_fCyLNvB_9N?s$JVjni#%fhTf6$t zz)uu1f0aZJ4y~;hmbrp*77BT6f;9X7@@>d!H#rBI+hy?BCI7X2(4kr>=NWvbmRGq+ z7|ELM6l-}x;p8ol8nwdQ;SJRBQk0;eprRmdiv`SXJjdEm1ogB0r4vhy!3Vku!i%EP zH1*3{!$b3rjS0vZKCZF#&L(G)*9XZ&qgpSIT*mD|t!{#3o+5P*PQPWS6NWVAi3(@p zN>`SP$q9_zG)g`>b>{F$s!UpWORj%@iK|9?md*)O2Xs<6_wY!xWP1WF^IS*TB+m|+ zu0o|px@J49Ig=uL z(4eFYX`kDL@|Yc7%a0()*a4@CvknyVv)}Dt`*v-}+LYN(N^kxOSK3O!7byD`f|K!O)T*z_^6W`UTSbEWX6m#^Ze->6 zqmP(|7h7(9equn$xF~6&z*3RCC}MKD3(4Q}gnsIF#0$)@9E;|WP{Z_Hzmwn@5YZ^> z2hZiZR}_&WQKcPy-k^S68Oc}RY6`jG5ws_7EQ7!{jBQ3zAuXT7%`QdaPQ_ut`zVfHzhSV}Hw>1r+>sl> z)8pf2B}JgjC@N^SBS+ktpEwn0_}6<;2qOC4?I-$%bQUEgnk(Uw;wta_3>o=htzyt- zhnA6D!Zii}Po@_N>sJcNlX|-Pm8OD1<}?=OTD4SZIYDnVs~m$?0%C7mW2hbcK$oGC z_q6*+3hf<0xUMynOZ3bMJae6?o2sllGoV^kXGU91VU|2UkMv|#L-?RMu`0QB*$cpx z`!S8_5Xjj6-C5~qfaX;&olx3FS4`G&7j9{3%w(IB;_)igEbi%mb)!uy~sNI;rV$D#`Ci|bBo?JC6*yo7wZk@^n>QYf)qrv5 zCi^k~K}Xi5|1lsUOS>_a9D1sKir!H3ObSpJimbl`gg>xS@`6GDz$h7{WL2HF-0+Zc zAbS^MURL}=-c|l%-o3HSyB*-4TjwT|Hg+}14(DXWEk8$$m^$C?9dfDGp@VU|`MUak z)donke+`AsO4chIkg=Jhp(uycOi9<5YnfGolW;zhcW;b>Z2xl#0NgU>P^ntAlLy=+wOY(a_pt&AFDDK_%^zDDbC0Y%Iby7Ni9Lb5c;xN&9LOZh`Ym< znx$;oZ9V7Akw0O*PNtAA6J1U>#hl%MlRKO8-{!(cT~+X2@wSZUg1GCs({(M2xTFA3 zo`U$jp^+UhOA#{+To0o4*zecm%w7dRj&4I%&*)SYRUUeB`X;DyK>_V!XEU&F0R(2j zJkUa94u0>s=hmsrLA$ZI=w<=frmr=la6}*{_Tha+lqn5D*XF-K>X@5F>74qS>{-3E z^Ub@Mi6RR@UH)FE`wY@9?waFXv%?Pr3O3K@Aj0smn8!;hq}V#}1A#Seu+j^tV?o`3 zdNek@H7!a=*R0|F`!scwV0*}6q5Ml*%BSj2DxOoCrCkC_)1oK?hh^*0*Wo+wJLhKe zTz15OP$ZDFDpX8Yf3vGqSiyC9WLs|*0`%spgiF-j0fHLq;h@7*A4fSt{MpXSsJF|a zNm6%K>6&)5x%_5X)$;G8apt)7%(VkS2QXbaJljnCB{A^XVKp0~e={g*MtE)X(J#|e zvoTmF;{{$3{S*6=ut(rDae-#2zTo>xk1@yHxKAHn-Ya?b>;@RS1?_70Pr$k)X5=by z2AZ!E?48@ZoH@?FPInWA@1TB4IG*+hS2r!?vHJ&H(%b6R97va)oiC(nEUBw7$Nsi4 zE3&4P+{>X@Z{f#QoZ$=xl8j8~07unKlp!6SpAOHnKF1iGq(9l;ZDM4PkK#t647eWUeHGz~$)FWu+u?e~FcZAHjO~_G{=$G%m5;8AXf0ir-OYOAA!e^qZW^MqOdBHzN#G&$VPcF^YvCDxDr z*5i8Zn5i!vyShVeqHaQ&MH{wWqjWju^T5|qcjFfoOwrw?`Q(?& zqAAyxG;h%e_C#U{MFY&dWv92mHD{jnLfSdrsyZ2VlLlE1mq~Ht4e48>&a=93io`-g zMAI^N*;frd@WeIS@tGPxhAv#}&ajKS90b8Nbr~v=iq&yQ@unpaA++ibG>kAa+An=_ za?N;QA0Fhe)SNC8+^mvV(sDqz>;`QXNWHcW&oxg^=NGvRLq;kI)kEeFwqmMMAlgGE^7p-uC$y{}>#=1U4qGt&^T1v}oc%t4j|%ihVbF}=n-ur+x>iM|-{9uh zy^nk^2&w4|bVu1>zp1LFxxe@B;;mKIP@P^ilt7Zr_# z7I4QcV;$4rpIx-2()@aCt-uTqT(fA?WQ0b5U=Nl@j`%s>SiLF#^>JaC8m1!bK?+lU zb)z!ceX(8o>EshEntM!uxYplBB!bY!r?bMEx^mOiE$B6s=j??Fij`(B@uj6D5RMKl z>_}A4pftbjznh*=ZejKKl|l@HaB(vJTueafBEgwFK%B*|7J@e0S}!dnPClqf&l?>p zPs%8s6{x2Dh1r)`wRVLeJ_`CNqng=XwDEq~@BM~>1z_92Q~?y-G|4A~hWNXPL+Ov} zFa?|2Qu2?OYvJhy!Z7-}(aQ1Q;~}*;hKqiqw}I5HgqT*{to+h?l@f2K3d_f>ekQD6 z^Yg1F^IRUuyhKVp`z+=Fg zSCUW_=AwCFs^7!19Z_p}IFfv6%LF2N)IRu$LoT|B&%}$j-?_p;2G=TMWgh*iD-+Ht zHmY;slx`a@UgWz$2lrW`k>#Y~xpEEn(NC$TU-bDMORnN)Fn{A|al@*Cpdm9o6>D22 z|0L>_OO&MHV~6F!gmr0;i@BTI_Kf=En?tEz?HR@7KeuNTw|}u`6c2p0XE=?2v1fQM z|LgXQ)dz))`zk^v&HgIMlc}D|l%{lPgEuleM8P&gb#lkWHJU7q$yF01A$ZvYZ8Y_y zo7Pd3jLy~F>STY}>6$X7dtE=+aFSa}rTF^294_pmPl9iCDlzxrT;Ce#f~VXl*?ND9 z(!rB7bN^$csx(F)+VXHOt9**s*Ga#@6Uyi{)~n)W%0Bycab6tv-@u)OChUJW=kM*@_B+nb&cEWGyhs{p0AngI26}-3JKywW*NL{>mb0Yw#^p6ke?C3B6 z@@RON~py z=HL*+9yESTK#2}D_OaOA+_DE(Wn9WCNez2aCHdz=J{(�~ZEND@N&8f+qOpG-+iuAnKu#pI0gjllS;o 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 literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/start-gii-crud.png b/docs/guide-ar/images/start-gii-crud.png new file mode 100644 index 0000000000000000000000000000000000000000..948e6cd131d1e4bc048db5014bcf139cdfa34fc3 GIT binary patch literal 56045 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 literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/start-gii-model-preview.png b/docs/guide-ar/images/start-gii-model-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6eb9f488b9954d2392c17bcc01efb4c1426d23 GIT binary patch literal 65510 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 R`u(|2o$&m<{#a=Ge*wTXaY6t9 literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/start-gii-model.png b/docs/guide-ar/images/start-gii-model.png new file mode 100644 index 0000000000000000000000000000000000000000..9c506dee00ffd810fea8a8ac7cb2fd6374713121 GIT binary patch literal 51340 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

    !cSFfqK)*8Voq4_Ac32l+5z?eVQ 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 literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/start-gii.png b/docs/guide-ar/images/start-gii.png new file mode 100644 index 0000000000000000000000000000000000000000..28c75b6b79e913cc4cac90064b2b36d5f068a214 GIT binary patch literal 91274 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 F{{a08kx~Ev literal 0 HcmV?d00001 diff --git a/docs/guide-ar/images/start-hello-world.png b/docs/guide-ar/images/start-hello-world.png new file mode 100644 index 0000000000000000000000000000000000000000..30d1acad389e1aebc46dc912d725d822b2f60cb1 GIT binary patch literal 32874 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

    + +``` + +### Wrapping with `begin()` and `end()` +In the above code, [[yii\widgets\ActiveForm::begin()|ActiveForm::begin()]] not only creates a form instance, but also marks the beginning of the form. +All of the content placed between [[yii\widgets\ActiveForm::begin()|ActiveForm::begin()]] and +[[yii\widgets\ActiveForm::end()|ActiveForm::end()]] will be wrapped within the HTML `
    ` tag. +As with any widget, you can specify some options as to how the widget should be configured by passing an array to +the `begin` method. In this case, an extra CSS class and identifying ID are passed to be used in the opening `` tag. +For all available options, please refer to the API documentation of [[yii\widgets\ActiveForm]]. + +### ActiveField +In order to create a form element in the form, along with the element's label, and any applicable JavaScript validation, +the [[yii\widgets\ActiveForm::field()|ActiveForm::field()]] method is called, which returns an instance of [[yii\widgets\ActiveField]]. +When the result of this method is echoed directly, the result is a regular (text) input. +To customize the output, you can chain additional methods of [[yii\widgets\ActiveField|ActiveField]] to this call: + +```php +// a password input +field($model, 'password')->passwordInput() ?> +// adding a hint and a customized label +field($model, 'username')->textInput()->hint('Please enter your name')->label('Name') ?> +// creating a HTML5 email input element +field($model, 'email')->input('email') ?> +``` + +This will create all the `

    X}ax;YWtniFf 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 literal 0 HcmV?d00001 diff --git a/docs/guide-ar/input-file-upload.md b/docs/guide-ar/input-file-upload.md new file mode 100644 index 0000000..e25f4ce --- /dev/null +++ b/docs/guide-ar/input-file-upload.md @@ -0,0 +1,208 @@ +Uploading Files +=============== + +Uploading files in Yii is usually done with the help of [[yii\web\UploadedFile]] which encapsulates each uploaded +file as an `UploadedFile` object. Combined with [[yii\widgets\ActiveForm]] and [models](structure-models.md), +you can easily implement a secure file uploading mechanism. + + +## Creating Models + +Like working with plain text inputs, to upload a single file you would create a model class and use an attribute +of the model to keep the uploaded file instance. You should also declare a validation rule to validate the file upload. +For example, + +```php +namespace app\models; + +use yii\base\Model; +use yii\web\UploadedFile; + +class UploadForm extends Model +{ + /** + * @var UploadedFile + */ + public $imageFile; + + public function rules() + { + return [ + [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'], + ]; + } + + public function upload() + { + if ($this->validate()) { + $this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension); + return true; + } else { + return false; + } + } +} +``` + +In the code above, the `imageFile` attribute is used to keep the uploaded file instance. It is associated with +a `file` validation rule which uses [[yii\validators\FileValidator]] to ensure a file with extension name `png` or `jpg` +is uploaded. The `upload()` method will perform the validation and save the uploaded file on the server. + +The `file` validator allows you to check file extensions, size, MIME type, etc. Please refer to +the [Core Validators](tutorial-core-validators.md#file) section for more details. + +> Tip: If you are uploading an image, you may consider using the `image` validator instead. The `image` validator is + implemented via [[yii\validators\ImageValidator]] which verifies if an attribute has received a valid image + that can be then either saved or processed using the [Imagine Extension](https://github.com/yiisoft/yii2-imagine). + + +## Rendering File Input + +Next, create a file input in a view: + +```php + + + ['enctype' => 'multipart/form-data']]) ?> + + field($model, 'imageFile')->fileInput() ?> + + + + +``` + +It is important to remember that you add the `enctype` option to the form so that the file can be properly uploaded. +The `fileInput()` call will render a `` tag which will allow users to select a file to upload. + +> Tip: since version 2.0.8, [[yii\widgets\ActiveField::fileInput|fileInput]] adds `enctype` option to the form + automatically when file input field is used. + +## Wiring Up + +Now in a controller action, write the code to wire up the model and the view to implement file uploading: + +```php +namespace app\controllers; + +use Yii; +use yii\web\Controller; +use app\models\UploadForm; +use yii\web\UploadedFile; + +class SiteController extends Controller +{ + public function actionUpload() + { + $model = new UploadForm(); + + if (Yii::$app->request->isPost) { + $model->imageFile = UploadedFile::getInstance($model, 'imageFile'); + if ($model->upload()) { + // file is uploaded successfully + return; + } + } + + return $this->render('upload', ['model' => $model]); + } +} +``` + +In the above code, when the form is submitted, the [[yii\web\UploadedFile::getInstance()]] method is called +to represent the uploaded file as an `UploadedFile` instance. We then rely on the model validation to make sure +the uploaded file is valid and save the file on the server. + + +## Uploading Multiple Files + +You can also upload multiple files at once, with some adjustments to the code listed in the previous subsections. + +First you should adjust the model class by adding the `maxFiles` option in the `file` validation rule to limit +the maximum number of files allowed to upload. Setting `maxFiles` to `0` means there is no limit on the number of files +that can be uploaded simultaneously. The maximum number of files allowed to be uploaded simultaneously is also limited +with PHP directive [`max_file_uploads`](http://php.net/manual/en/ini.core.php#ini.max-file-uploads), +which defaults to 20. The `upload()` method should also be updated to save the uploaded files one by one. + +```php +namespace app\models; + +use yii\base\Model; +use yii\web\UploadedFile; + +class UploadForm extends Model +{ + /** + * @var UploadedFile[] + */ + public $imageFiles; + + public function rules() + { + return [ + [['imageFiles'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg', 'maxFiles' => 4], + ]; + } + + public function upload() + { + if ($this->validate()) { + foreach ($this->imageFiles as $file) { + $file->saveAs('uploads/' . $file->baseName . '.' . $file->extension); + } + return true; + } else { + return false; + } + } +} +``` + +In the view file, you should add the `multiple` option to the `fileInput()` call so that the file upload field +can receive multiple files: + +```php + + + ['enctype' => 'multipart/form-data']]) ?> + + field($model, 'imageFiles[]')->fileInput(['multiple' => true, 'accept' => 'image/*']) ?> + + + + +``` + +And finally in the controller action, you should call `UploadedFile::getInstances()` instead of +`UploadedFile::getInstance()` to assign an array of `UploadedFile` instances to `UploadForm::imageFiles`. + +```php +namespace app\controllers; + +use Yii; +use yii\web\Controller; +use app\models\UploadForm; +use yii\web\UploadedFile; + +class SiteController extends Controller +{ + public function actionUpload() + { + $model = new UploadForm(); + + if (Yii::$app->request->isPost) { + $model->imageFiles = UploadedFile::getInstances($model, 'imageFiles'); + if ($model->upload()) { + // file is uploaded successfully + return; + } + } + + return $this->render('upload', ['model' => $model]); + } +} +``` diff --git a/docs/guide-ar/input-form-javascript.md b/docs/guide-ar/input-form-javascript.md new file mode 100644 index 0000000..35676ec --- /dev/null +++ b/docs/guide-ar/input-form-javascript.md @@ -0,0 +1,202 @@ +Extending ActiveForm on the Client Side +======================================= + +The [[yii\widgets\ActiveForm]] widget comes with a set of JavaScript methods that are used for client validation. +Its implementation is very flexible and allows you to extend it in different ways. +In the following these are described. + +## ActiveForm events + +ActiveForm triggers a series of dedicated events. Using the code like the following you can subscribe to these +events and handle them: + +```javascript +$('#contact-form').on('beforeSubmit', function (e) { + if (!confirm("Everything is correct. Submit?")) { + return false; + } + return true; +}); +``` + +In the following we'll review events available. + +### `beforeValidate` + +`beforeValidate` is triggered before validating the whole form. + +The signature of the event handler should be: + +```javascript +function (event, messages, deferreds) +``` + +where + +- `event`: an Event object. +- `messages`: an associative array with keys being attribute IDs and values being error message arrays + for the corresponding attributes. +- `deferreds`: an array of Deferred objects. You can use `deferreds.add(callback)` to add a new + deferred validation. + +If the handler returns a boolean `false`, it will stop further form validation after this event. And as +a result, `afterValidate` event will not be triggered. + +### `afterValidate` + +`afterValidate` event is triggered after validating the whole form. + +The signature of the event handler should be: + +```javascript +function (event, messages, errorAttributes) +``` + +where + +- `event`: an Event object. +- `messages`: an associative array with keys being attribute IDs and values being error message arrays + for the corresponding attributes. +- `errorAttributes`: an array of attributes that have validation errors. Please refer to + `attributeDefaults` for the structure of this parameter. + +### `beforeValidateAttribute` + +`beforeValidateAttribute` event is triggered before validating an attribute. +The signature of the event handler should be: + +```javascript +function (event, attribute, messages, deferreds) +``` + +where + +- `event`: an Event object. +- `attribute`: the attribute to be validated. Please refer to `attributeDefaults` for the structure + of this parameter. +- `messages`: an array to which you can add validation error messages for the specified attribute. +- `deferreds`: an array of Deferred objects. You can use `deferreds.add(callback)` to add + a new deferred validation. + +If the handler returns a boolean `false`, it will stop further validation of the specified attribute. +And as a result, `afterValidateAttribute` event will not be triggered. + +### `afterValidateAttribute` + +`afterValidateAttribute` event is triggered after validating the whole form and each attribute. + +The signature of the event handler should be: + +```javascript +function (event, attribute, messages) +``` + +where + +- `event`: an Event object. +- `attribute`: the attribute being validated. Please refer to `attributeDefaults` for the structure + of this parameter. +- `messages`: an array to which you can add additional validation error messages for the specified + attribute. + +### `beforeSubmit` + +`beforeSubmit` event is triggered before submitting the form after all validations have passed. + +The signature of the event handler should be: + +```javascript +function (event) +``` + +where event is an Event object. + +If the handler returns a boolean `false`, it will stop form submission. + +### `ajaxBeforeSend` + +`ajaxBeforeSend` event is triggered before sending an AJAX request for AJAX-based validation. + +The signature of the event handler should be: + +```javascript +function (event, jqXHR, settings) +``` + +where + +- `event`: an Event object. +- `jqXHR`: a jqXHR object +- `settings`: the settings for the AJAX request + +### `ajaxComplete` + +`ajaxComplete` event is triggered after completing an AJAX request for AJAX-based validation. + +The signature of the event handler should be: + +```javascript +function (event, jqXHR, textStatus) +``` + +where + +- `event`: an Event object. +- `jqXHR`: a jqXHR object +- `textStatus`: the status of the request ("success", "notmodified", "error", "timeout", +"abort", or "parsererror"). + +## Submitting the form via AJAX + +While validation can be made on client side or via AJAX request, the form submission itself is done +as a normal request by default. If you want the form to be submitted via AJAX, you can achieve this +by handling the `beforeSubmit` event of the form in the following way: + +```javascript +var $form = $('#formId'); +$form.on('beforeSubmit', function() { + var data = $form.serialize(); + $.ajax({ + url: $form.attr('action'), + type: 'POST', + data: data, + success: function (data) { + // Implement successful + }, + error: function(jqXHR, errMsg) { + alert(errMsg); + } + }); + return false; // prevent default submit +}); +``` + +To learn more about the jQuery `ajax()` function, please refer to the [jQuery documentation](https://api.jquery.com/jQuery.ajax/). + + +## Adding fields dynamically + +In modern web applications you often have the need of changing a form after it has been displayed to the user. +This can for example be the addition of new fields after click on a "plus"-icon. +To enable client validation for these fields, they have to be registered with the ActiveForm JavaScript plugin. + +You have to add a field itself and then add it to validation list: + +```javascript +$('#contact-form').yiiActiveForm('add', { + id: 'address', + name: 'address', + container: '.field-address', + input: '#address', + error: '.help-block', + validate: function (attribute, value, messages, deferred, $form) { + yii.validation.required(value, messages, {message: "Validation Message Here"}); + } +}); +``` + +To remove a field from validation list so it's not validated you can do the following: + +```javascript +$('#contact-form').yiiActiveForm('remove', 'address'); +``` diff --git a/docs/guide-ar/input-forms.md b/docs/guide-ar/input-forms.md new file mode 100644 index 0000000..2160aed --- /dev/null +++ b/docs/guide-ar/input-forms.md @@ -0,0 +1,256 @@ +Creating Forms +============== + +ActiveRecord based forms: ActiveForm +----------------------- +The primary way of using forms in Yii is through [[yii\widgets\ActiveForm]]. This approach should be preferred when +the form is based upon a model. Additionally, there are some useful methods in [[yii\helpers\Html]] that are typically +used for adding buttons and help text to any form. + +A form, that is displayed on the client-side, will in most cases have a corresponding [model](structure-models.md) which is used +to validate its input on the server-side (Check the [Validating Input](input-validation.md) section for more details on validation). +When creating model-based forms, the first step is to define the model itself. The model can be either based upon +an [Active Record](db-active-record.md) class, representing some data from the database, or a generic Model class +(extending from [[yii\base\Model]]) to capture arbitrary input, for example a login form. + +> Tip: If the form fields are different from database columns or there are formatting and logic that is specific to that +> form only, prefer creating a separate model extended from [[yii\base\Model]]. + +In the following example, we show how a generic model can be used for a login form: + +```php + 'login-form', + 'options' => ['class' => 'form-horizontal'], +]) ?> + field($model, 'username') ?> + field($model, 'password')->passwordInput() ?> + +