0. Guide

1. Introduction

1. About Yii

0. What is Yii
1. What is Yii
2. What is Yii Best for?
3. How does Yii Compare with Other Frameworks?
4. Yii Versions
5. Requirements and Prerequisites

2. Upgrading from Version 1.1

0. Upgrading from Version 1.1
1. Upgrading from Version 1.1
2. Installation
3. PHP Requirements
4. Namespace
5. Component and Object
6. Object Configuration
7. Events
8. Path Aliases
9. Views
10. Models
11. Controllers
12. Widgets
13. Themes
14. Console Applications
15. I18N
16. Action Filters
17. Assets
18. Helpers
19. Forms
20. Query Builder
21. Active Record
22. Active Record Behaviors
23. User and IdentityInterface
24. URL Management
25. Using Yii 1.1 and 2.x together

2. Getting Started

1. What do you need to know

0. What do you need to know
1. What do you need to know
2. PHP
3. Object oriented programming
4. Command line and composer

2. Installing Yii

0. Installing Yii
1. Installing Yii
2. Installing via Composer
2.1. Installing Composer
2.2. Installing Yii
3. Installing from an Archive File
4. Other Installation Options
5. Installing Assets
6. Verifying the Installation
7. Configuring Web Servers
7.1. Recommended Apache Configuration
7.2. Recommended Nginx Configuration
7.3. Recommended NGINX Unit Configuration
7.4. IIS Configuration

3. Running Applications

0. Running Applications
1. Running Applications
2. Functionality
3. Application Structure
4. Request Lifecycle

4. Saying Hello

0. Saying Hello
1. Saying Hello
2. Creating an Action
3. Creating a View
4. Trying it Out
5. Summary

5. Working with Forms

0. Working with Forms
1. Working with Forms
2. Creating a Model
3. Creating an Action
4. Creating Views
5. Trying it Out
5.1. Magic Explained
6. Summary

6. Working with Databases

0. Working with Databases
1. Working with Databases
2. Preparing the Database
3. Configuring a DB Connection
4. Creating an Active Record
5. Creating an Action
6. Creating a View
7. Trying it Out
8. Summary

7. Generating Code with Gii

0. Generating Code with Gii
1. Generating Code with Gii
2. Starting Gii
3. Generating an Active Record Class
4. Generating CRUD Code
5. Trying it Out
6. Summary

8. Looking Ahead

0. Looking Ahead
1. Looking Ahead

3. Application Structure

1. Application Structure Overview

0. Overview
1. Overview

2. Entry Scripts

0. Entry Scripts
1. Entry Scripts
2. Web Applications
3. Console Applications
4. Defining Constants

3. Applications

0. Applications
1. Applications
2. Application Configurations
3. Application Properties
3.1. Required Properties
3.1.1. id
3.1.2. basePath
3.2. Important Properties
3.2.1. aliases
3.2.2. bootstrap
3.2.3. catchAll
3.2.4. components
3.2.5. controllerMap
3.2.6. controllerNamespace
3.2.7. language
3.2.8. modules
3.2.9. name
3.2.10. params
3.2.11. sourceLanguage
3.2.12. timeZone
3.2.13. version
3.3. Useful Properties
3.3.1. charset
3.3.2. defaultRoute
3.3.3. extensions
3.3.4. layout
3.3.5. layoutPath
3.3.6. runtimePath
3.3.7. viewPath
3.3.8. vendorPath
3.3.9. enableCoreCommands
4. Application Events
4.4. EVENT_BEFORE_REQUEST
4.5. EVENT_AFTER_REQUEST
4.6. EVENT_BEFORE_ACTION
4.7. EVENT_AFTER_ACTION
5. Application Lifecycle

4. Application Components

0. Application Components
1. Application Components
2. Bootstrapping Components
3. Core Application Components

5. Controllers

0. Controllers
1. Controllers
2. Actions
3. Routes
4. Creating Controllers
4.1. Controller IDs
4.2. Controller Class Naming
4.3. Controller Map
4.4. Default Controller
5. Creating Actions
5.1. Action IDs
5.2. Inline Actions
5.3. Standalone Actions
5.4. Action Results
5.5. Action Parameters
5.6. Default Action
6. Controller Lifecycle
7. Best Practices

6. Models

0. Models
1. Models
2. Attributes
2.1. Defining Attributes
2.2. Attribute Labels
3. Scenarios
4. Validation Rules
5. Massive Assignment
5.1. Safe Attributes
5.2. Unsafe Attributes
6. Data Exporting
6.1. Fields
7. Best Practices

7. Views

0. Views
1. Views
2. Creating Views
2.1. Security
2.2. Organizing Views
3. Rendering Views
3.1. Rendering in Controllers
3.2. Rendering in Widgets
3.3. Rendering in Views
3.4. Rendering in Other Places
3.5. Named Views
3.6. Accessing Data in Views
3.7. Sharing Data among Views
4. Layouts
4.1. Creating Layouts
4.2. Accessing Data in Layouts
4.3. Using Layouts
4.4. Nested Layouts
4.5. Using Blocks
5. Using View Components
5.1. Setting Page Titles
5.2. Registering Meta Tags
5.3. Registering Link Tags
6. View Events
7. Rendering Static Pages
8. Best Practices

8. Modules

0. Modules
1. Modules
2. Creating Modules
2.1. Module Classes
2.2. Controllers in Modules
2.3. Views in Modules
2.4. Console commands in Modules
3. Using Modules
3.1. Routes
3.2. Accessing Modules
3.3. Bootstrapping Modules
4. Nested Modules
5. Accessing components from within modules
6. Best Practices

9. Filters

0. Filters
1. Filters
2. Using Filters
3. Creating Filters
4. Core Filters
4.1. AccessControl
4.2. Authentication Method Filters
4.3. ContentNegotiator
4.4. HttpCache
4.5. PageCache
4.6. RateLimiter
4.7. VerbFilter
4.8. Cors

10. Widgets

0. Widgets
1. Widgets
2. Using Widgets
2.1. Configuring global defaults
3. Creating Widgets
3.1. 1: Utilizing `widget()` method
3.2. 2: Utilizing `begin()` and `end()` methods
4. Best Practices

11. Assets

0. Assets
1. Assets
2. Asset Bundles
3. Defining Asset Bundles
3.1. Asset Locations
3.2. Asset Dependencies
3.3. Asset Options
3.4. Bower and NPM Assets installation
3.4.1. Using asset-packagist repository
3.4.2. Using fxp/composer-asset-plugin
4. Using Asset Bundles
4.5. Dynamic Asset Bundles
4.6. Customizing Asset Bundles
4.7. Asset Mapping
4.8. Asset Publishing
4.9. Cache Busting
5. Commonly Used Asset Bundles
6. Asset Conversion
7. Combining and Compressing Assets
7.1. An Example
7.2. Using the `asset` Command
7.3. Grouping Asset Bundles

12. Extensions

0. Extensions
1. Extensions
2. Using Extensions
2.1. Installing Extensions Manually
3. Creating Extensions
3.1. `composer.json`
3.1.1. Package Name
3.1.2. Package Type
3.1.3. Dependencies
3.1.4. Class Autoloading
3.2. Recommended Practices
3.2.1. Namespaces
3.2.2. Bootstrapping Classes
3.2.3. Working with Databases
3.2.4. Using Assets
3.2.5. Internationalization and Localization
3.2.6. Testing
3.2.7. Versioning
3.2.8. Releasing
4. Core Extensions

4. Handling Requests

1. Request Handling Overview

0. Overview
1. Overview

2. Bootstrapping

0. Bootstrapping
1. Bootstrapping

3. Routing and URL Creation

0. Routing and URL Creation
1. Routing and URL Creation
2. URL Formats
3. Routing
3.1. Default Route
3.2. `catchAll` Route
4. Creating URLs
5. Using Pretty URLs
5.1. URL Rules
5.2. Named Parameters
5.3. Parameterizing Routes
5.4. Default Parameter Values
5.5. Rules with Server Names
5.6. URL Suffixes
5.7. HTTP Methods
5.8. Adding Rules Dynamically
5.9. Creating Rule Classes
6. URL normalization
7. Performance Considerations

4. Requests

0. Requests
1. Requests
2. Request Parameters
3. Request Methods
4. Request URLs
5. HTTP Headers
6. Client Information
7. Trusted proxies and headers
7.1. Already resolved user IP

5. Responses

0. Responses
1. Responses
2. Status Code
3. HTTP Headers
4. Response Body
5. Browser Redirection
6. Sending Files
7. Sending Response

6. Sessions and Cookies

0. Sessions and Cookies
1. Sessions and Cookies
2. Sessions
2.1. Opening and Closing Sessions
2.2. Accessing Session Data
2.3. Custom Session Storage
2.4. Flash Data
3. Cookies
3.1. Reading Cookies
3.2. Sending Cookies
3.3. Cookie Validation
4. Security settings
4.1. httpOnly
4.2. secure
4.3. sameSite
5. Session php.ini settings

7. Handling Errors

0. Handling Errors
1. Handling Errors
2. Using Error Handler
3. Customizing Error Display
3.1. Using Error Actions
3.2. Customizing Error Response Format

8. Logging

0. Logging
1. Logging
2. Log Messages
3. Log Targets
3.1. Message Filtering
3.2. Message Formatting
3.3. Message Trace Level
3.4. Message Flushing and Exporting
3.5. Toggling Log Targets
3.6. Creating New Targets
4. Performance Profiling

5. Key Concepts

1. Components

0. Components
1. Components

2. Properties

0. Properties
1. Properties

3. Events

0. Events
1. Events
2. Event Handlers
3. Attaching Event Handlers
4. Event Handler Order
5. Triggering Events
6. Detaching Event Handlers
7. Class-Level Event Handlers
8. Events using interfaces
9. Global Events
10. Wildcard Events

4. Behaviors

0. Behaviors
1. Behaviors
2. Defining Behaviors
3. Handling Component Events
4. Attaching Behaviors
5. Using Behaviors
6. Detaching Behaviors
7. Using `TimestampBehavior`
8. Other behaviors
9. Comparing Behaviors with Traits
9.1. Reasons to Use Behaviors
9.2. Reasons to Use Traits

5. Configurations

0. Configurations
1. Configurations
2. Configuration Format
3. Using Configurations
3.1. Application Configurations
3.2. Widget Configurations
4. Configuration Files
5. Default Configurations
6. Environment Constants

6. Aliases

0. Aliases
1. Aliases
2. Defining Aliases
3. Resolving Aliases
4. Using Aliases
5. Predefined Aliases
6. Extension Aliases

7. Class Autoloading

0. Class Autoloading
1. Class Autoloading
2. Using the Yii Autoloader
3. Class Map
4. Using Other Autoloaders
5. Autoloading Extension Classes

8. Service Locator

0. Service Locator
1. Service Locator
2. Tree traversal

9. Dependency Injection Container

0. Dependency Injection Container
1. Dependency Injection Container
2. Dependency Injection
2.1. Constructor Injection
2.2. Method Injection
2.3. Setter and Property Injection
2.4. PHP Callable Injection
3. Registering Dependencies
4. Resolving Dependencies
5. Practical Usage
6. Advanced Practical Usage
7. When to Register Dependencies
8. Summary

6. Working with Databases

1. Database Access Objects

0. Database Access Objects
1. Database Access Objects
2. Creating DB Connections
3. Executing SQL Queries
3.1. Binding Parameters
3.2. Executing Non-SELECT Queries
4. Quoting Table and Column Names
4.1. Using Table Prefix
5. Performing Transactions
5.1. Specifying Isolation Levels
5.2. Nesting Transactions
6. Replication and Read-Write Splitting
7. Working with Database Schema

2. Query Builder

0. Query Builder
1. Query Builder
2. Building Queries
2.1. select()
2.2. from()
2.2.1. Prefixes
2.3. where()
2.3.1. String Format
2.3.2. Hash Format
2.3.3. Operator Format
2.3.4. Object Format
2.3.5. Appending Conditions
2.3.6. Filter Conditions
2.4. orderBy()
2.5. groupBy()
2.6. having()
2.7. limit() and offset()
2.8. join()
2.9. union()
2.10. withQuery()
3. Query Methods
3.1. Indexing Query Results
3.2. Batch Query
3.2.1. Limitations of batch query in MySQL
3.3. Adding custom Conditions and Expressions

3. Active Record

0. Active Record
1. Active Record
2. Declaring Active Record Classes
2.1. Setting a table name
2.2. Active records are called "models"
3. Connecting to Databases
4. Querying Data
5. Accessing Data
5.1. Data Transformation
5.2. Retrieving Data in Arrays
5.3. Retrieving Data in Batches
6. Saving Data
6.1. Data Validation
6.2. Massive Assignment
6.3. Updating Counters
6.4. Dirty Attributes
6.5. Default Attribute Values
6.6. Attributes Typecasting
6.6.1. JSON in MySQL and PostgreSQL
6.6.2. Arrays in PostgreSQL
6.7. Updating Multiple Rows
7. Deleting Data
8. Active Record Life Cycles
8.1. New Instance Life Cycle
8.2. Querying Data Life Cycle
8.3. Saving Data Life Cycle
8.4. Deleting Data Life Cycle
8.5. Refreshing Data Life Cycle
9. Working with Transactions
10. Optimistic Locks
11. Working with Relational Data
11.1. Declaring Relations
11.2. Accessing Relational Data
11.3. Dynamic Relational Query
11.4. Relations via a Junction Table
11.5. Chaining relation definitions via multiple tables
11.6. Lazy Loading and Eager Loading
11.7. Joining with Relations
11.7.1. Relation table aliases
11.8. Inverse Relations
12. Saving Relations
13. Cross-Database Relations
14. Customizing Query Classes
15. Selecting extra fields

4. Migrations

0. Database Migration
1. Database Migration
2. Creating Migrations
3. Generating Migrations
3.1. Create Table
3.1.1. Foreign keys
3.2. Drop Table
3.3. Add Column
3.4. Drop Column
3.5. Add Junction Table
3.6. Transactional Migrations
3.7. Database Accessing Methods
4. Applying Migrations
5. Reverting Migrations
6. Redoing Migrations
7. Refreshing Migrations
8. Listing Migrations
9. Modifying Migration History
10. Customizing Migrations
10.1. Using Command Line Options
10.2. Configuring Command Globally
10.3. Namespaced Migrations
10.3.1. Generating namespaced migrations
10.4. Separated Migrations
11. Migrating Multiple Databases

5. Sphinx
6. Redis
7. MongoDB
8. ElasticSearch

7. Getting Data from Users

1. Creating Forms

0. Creating Forms
1. Creating Forms
2. ActiveRecord based forms: ActiveForm
2.1. Wrapping with `begin()` and `end()`
2.2. ActiveField
3. Creating Lists
3.0.1. Creating a drop-down list
3.0.2. Creating a radio list
3.0.3. Creating a checkbox List
4. Working with Pjax
4.0.1. Values in Submit Buttons and File Upload
5. Further Reading

2. Validating Input

0. Validating Input
1. Validating Input
2. Declaring Rules
2.1. Customizing Error Messages
2.2. Validation Events
2.3. Conditional Validation
2.4. Data Filtering
2.5. Handling Empty Inputs
3. Ad Hoc Validation
4. Creating Validators
4.1. Inline Validators
4.2. Standalone Validators
5. Multiple Attributes Validation
5.1. Creating validator
5.2. Adding errors
6. Client-Side Validation
6.1. Using Client-Side Validation
6.2. Implementing Client-Side Validation
6.3. Deferred Validation
7. AJAX Validation

3. Uploading Files

0. Uploading Files
1. Uploading Files
2. Creating Models
3. Rendering File Input
4. Wiring Up
5. Uploading Multiple Files

4. Collecting Tabular Input

0. Collecting tabular input
1. Collecting tabular input
1.1. Updating a fixed set of records
1.2. Creating a dynamic set of new records
1.3. Combining Update, Create and Delete on one page

5. Getting Data for Multiple Models

0. Getting Data for Multiple Models
1. Getting Data for Multiple Models

6. Extending ActiveForm on the Client Side

0. Extending ActiveForm on the Client Side
1. Extending ActiveForm on the Client Side
2. ActiveForm events
2.1. `beforeValidate`
2.2. `afterValidate`
2.3. `beforeValidateAttribute`
2.4. `afterValidateAttribute`
2.5. `beforeSubmit`
2.6. `ajaxBeforeSend`
2.7. `ajaxComplete`
3. Submitting the form via AJAX
4. Adding fields dynamically

8. Displaying Data

1. Data Formatting

0. Data Formatting
1. Data Formatting
2. Configuring Formatter
3. Formatting Date and Time Values
3.1. Time Zones
4. Formatting Numbers
5. Other Formats
6. Null Values
7. Localizing Data Format

2. Pagination

0. Pagination
1. Pagination

3. Sorting

0. Sorting
1. Sorting

4. Data Providers

0. Data Providers
1. Data Providers
2. Active Data Provider
3. SQL Data Provider
4. Array Data Provider
5. Working with Data Keys
6. Creating Custom Data Provider
7. Filtering Data Providers using Data Filters

5. Data Widgets

0. Data widgets
1. Data widgets
2. DetailView
3. ListView
4. GridView
4.1. Grid columns
4.2. Column classes
4.2.1. Data column
4.2.2. Action column
4.2.3. Checkbox column
4.2.4. Serial column
4.3. Sorting data
4.4. Filtering data
4.5. Separate filter form
4.6. Working with model relations
4.6.1. Using SQL views for filtering, sorting and displaying data
4.7. Multiple GridViews on one page
4.8. Using GridView with Pjax
4.8.1. GridView/ListView with Pjax in Gii
5. Further reading

6. Working with Client Scripts

0. Working with Client Scripts
1. Working with Client Scripts
2. Registering scripts
2.1. Registering inline scripts
2.2. Registering script files
3. Registering CSS
3.1. Registering inline CSS
3.2. Registering CSS files
4. Registering asset bundles
5. Generating Dynamic Javascript
5.1. Registering a global JavaScript configuration
5.2. Passing translated messages
6. The `yii.js` script

7. Theming

0. Theming
1. Theming
2. Theming Modules
3. Theming Widgets
4. Theme Inheritance

9. Security

1. Security Overview

0. Security
1. Security

2. Authentication

0. Authentication
1. Authentication
2. Configuring [[yii\web\User]]
3. Implementing [[yii\web\IdentityInterface]]
4. Using [[yii\web\User]]
5. Authentication Events

3. Authorization

0. Authorization
1. Authorization
2. Access Control Filter
3. Role Based Access Control (RBAC)
3.1. Basic Concepts
3.2. Configuring RBAC
3.2.1. Using `PhpManager`
3.2.2. Using `DbManager`
3.3. Building Authorization Data
3.3.1. Using migrations
3.4. Using console command
4. Assigning roles to users
4.1. Using Rules
4.2. Access Check
4.3. Using Default Roles

4. Working with Passwords

0. Working with Passwords
1. Working with Passwords

5. Cryptography

0. Cryptography
1. Cryptography
2. Generating Pseudorandom Data
3. Encryption and Decryption
4. Confirming Data Integrity

6. Auth Clients

7. Best Practices

0. Security best practices
1. Security best practices
2. Basic principles
2.1. Filter input
2.2. Escape output
3. Avoiding SQL injections
4. Avoiding XSS
5. Avoiding CSRF
6. Avoiding file exposure
7. Avoiding debug info and tools in production
8. Using secure connection over TLS
9. Secure Server configuration
9.1. Avoiding `Host`-header attacks
9.2. Configuring SSL peer validation

10. Caching

1. Caching Overview

0. Caching
1. Caching

2. Data Caching

0. Data Caching
1. Data Caching
2. Cache Components
2.1. Supported Cache Storage
3. Cache APIs
3.1. Cache Keys
3.2. Cache Expiration
3.3. Cache Dependencies
4. Query Caching
4.1. Configurations
4.2. Usages
4.3. Limitations
5. Cache Flushing

3. Fragment Caching

0. Fragment Caching
1. Fragment Caching
2. Caching Options
2.1. Duration
2.2. Dependencies
2.3. Variations
2.4. Toggling Caching
3. Nested Caching
4. Dynamic Content

4. Page Caching

0. Page Caching
1. Page Caching

5. HTTP Caching

0. HTTP Caching
1. HTTP Caching
2. `Last-Modified` Header
3. `ETag` Header
4. `Cache-Control` Header
5. Session Cache Limiter
6. SEO Implications

11. RESTful Web Services

1. Quick Start

0. Quick Start
1. Quick Start
2. Creating a Controller
3. Configuring URL Rules
4. Enabling JSON Input
5. Trying it Out
6. Customizing Pagination and Sorting in the list
7. Summary

2. Resources

0. Resources
1. Resources
2. Fields
2.1. Overriding `fields()`
2.2. Overriding `extraFields()`
3. Links
4. Collections

3. Controllers

0. Controllers
1. Controllers
2. Creating Controller Classes
3. Filters
3.1. CORS
4. Extending `ActiveController`
4.1. Customizing Actions
4.2. Performing Access Check

4. Filtering Collections

0. Filtering Collections
1. Filtering Collections
2. Configuring Data Provider For Filtering
3. Filtering Request
4. Filter Control Keywords
5. Handling The Null Values
6. Aliasing Attributes
7. Configuring Filters For `ActiveController`

5. Routing

0. Routing
1. Routing
2. Extra configuration for contained rules

6. Response Formatting

0. Response Formatting
1. Response Formatting
2. Content Negotiation
3. Data Serializing
3.1. Controlling JSON output

7. Authentication

0. Authentication
1. Authentication
2. Authorization

8. Rate Limiting

0. Rate Limiting
1. Rate Limiting

9. Versioning

0. Versioning
1. Versioning

10. Error Handling

0. Error Handling
1. Error Handling
2. Customizing Error Response

12. Development Tools

1. Debug Toolbar and Debugger
2. Generating Code using Gii
3. Generating API Documentation

13. Testing

1. Testing Overview

0. Testing
1. Testing
2. Developing with tests
3. When and how to test
4. Further reading

2. Testing environment setup

0. Testing environment setup
1. Testing environment setup

3. Unit Tests

0. Unit Tests
1. Unit Tests
2. Running basic and advanced template tests
3. Framework unit tests

4. Functional Tests

0. Functional Tests
1. Functional Tests
2. Running basic and advanced template tests

5. Acceptance Tests

0. Acceptance Tests
1. Acceptance Tests
2. Running basic and advanced template tests

6. Fixtures

0. Fixtures
1. Fixtures
2. Defining a Fixture
3. Using Fixtures
4. Organizing Fixture Classes and Data Files
5. Managing fixtures with `yii fixture`
5.1. Fixtures data format
5.2. Loading fixtures
5.3. Unloading fixtures
5.4. Configure Command Globally
5.5. Auto-generating fixtures
6. Summary

14. Special Topics

1. Advanced Project Template

2. Building Application from Scratch

0. Creating your own Application structure
1. Creating your own Application structure
2. Clone the Basic Template
3. Modify the Files
4. Make a Package
5. Use the Template

3. Console Commands

0. Console applications
1. Console applications
2. Usage
3. The entry script
4. Configuration
5. Console command completion
5.1. Bash completion
5.2. ZSH completion
6. Creating your own console commands
6.1. Console Controller and Action
6.2. Options
6.3. Options Aliases
6.4. Arguments
6.5. Exit Code
6.6. Formatting and colors
6.7. Tables

4. Core Validators

0. Core Validators
1. Core Validators
2. boolean
3. captcha
4. compare
4.1. Comparing date values
5. date
6. default
7. double
8. each
9. email
10. exist
11. file
12. filter
13. image
14. ip
15. in
16. integer
17. match
18. number
19. required
20. safe
21. string
22. trim
23. unique
24. url

5. Docker

0. Yii and Docker
1. Yii and Docker
2. Requirements
3. Installation
4. Resources
5. Usage
6. Advanced topics
6.1. Yii framework tests
6.2. Database administration tools

6. Internationalization

0. Internationalization
1. Internationalization
2. Locale and Language
2.1. Locale
2.2. Language
2.3. Configuration
3. Message Translation
3.1. From source language to target language
3.2. How to implement
3.2.1. 1. Wrap a text message
3.2.2. 2. Configure one or multiple message sources
3.2.2.1. Category wildcards with `*` symbol
3.2.3. 3. Let the translators translate messages and store them in the message source(s)
3.2.3.1. File mapping
3.2.3.2. Other storage types
4. Message Formatting
4.3. Message Parameters
4.4. Parameter Formatting
4.4.4. Number
4.4.5. Date
4.4.6. Time
4.4.7. Spellout
4.4.8. Ordinal
4.4.9. Duration
4.4.10. Plural
4.4.11. Ordinal selection
4.4.12. Selection
4.5. Specifying default message source
4.6. Translating module messages
4.7. Translating widgets messages
4.8. Translating framework messages
4.9. Handling missing translations
4.10. Using the `message` command
5. View Translation
6. Formatting Date and Number Values
7. Setting Up PHP Environment

7. Mailing

0. Mailing
1. Mailing
2. Configuration
3. Basic usage
4. Composing mail content
5. File attachment
6. Embedding images
7. Testing and debugging
8. Creating your own mail solution

8. Performance Tuning

0. Performance Tuning
1. Performance Tuning
2. Optimizing your PHP Environment
3. Disabling Debug Mode
4. Using Caching Techniques
5. Enabling Schema Caching
6. Combining and Minimizing Assets
7. Optimizing Session Storage
8. Optimizing Databases
9. Using Plain Arrays
10. Optimizing Composer Autoloader
11. Processing Data Offline
12. Performance Profiling
13. Prepare application for scaling

9. Shared Hosting Environment

0. Shared Hosting Environment
1. Shared Hosting Environment
2. Deploying a basic project template
2.1. Renaming webroot
2.2. FTP root directory is writeable
2.3. Add extras for webserver
2.4. Check requirements
3. Deploying an advanced project template

10. Template Engines

0. Using template engines
1. Using template engines

11. Working with Third-Party Code

0. Working with Third-Party Code
1. Working with Third-Party Code
2. Using Third-Party Libraries in Yii
2.1. Using Composer Packages
2.2. Using Downloaded Libraries
3. Using Yii in Third-Party Systems
4. Using Yii 2 with Yii 1

12. Using Yii as a micro framework

0. Using Yii as a Micro-framework
1. Using Yii as a Micro-framework
2. Installing Yii
3. Creating the Project Structure
4. Creating the first Controller
5. Creating a REST API

15. Widgets

1. GridView
2. ListView
3. DetailView
4. ActiveForm
5. Pjax
6. Menu
7. LinkPager
8. LinkSorter
9. Bootstrap Widgets
10. jQuery UI Widgets

16. Helpers

1. Helpers Overview

0. Helpers
1. Helpers
2. Core Helper Classes
3. Customizing Helper Classes

2. ArrayHelper

0. ArrayHelper
1. ArrayHelper
2. Getting Values
3. Setting values
4. Take a value from an array
5. Checking Existence of Keys
6. Retrieving Columns
7. Re-indexing Arrays
8. Building Maps
9. Multidimensional Sorting
10. Detecting Array Types
11. HTML Encoding and Decoding Values
12. Merging Arrays
13. Converting Objects to Arrays
14. Testing against Arrays

3. Html

0. Html helper
1. Html helper
2. Basics
2.1. Generating Tags
2.2. Forming CSS Classes and Styles
2.3. Encoding and Decoding Content
3. Forms
3.1. Creating Forms
3.2. Buttons
3.3. Input Fields
3.4. Labels and Errors
3.5. Input Names and Values
4. Styles and Scripts
5. Hyperlinks
6. Images
7. Lists

4. Json

0. Json Helper
1. Json Helper
2. Pretty Print

5. Url

0. Url Helper
1. Url Helper
2. Getting Common URLs
3. Creating URLs
4. Remember URLs
5. Checking Relative URLs