Table of Contents
Unnoticed basics
- How component works
- Events
- What to choose? Object or Component?
- Configuring components globally
Logging and error handling
- Logging: problems and solutions
- Customizing 404 page
- Handling errors and exceptions
- Understanding error stack trace
Web essentials
- URLs with variable number of parameters
- Outputting JSON and XML
- Using Google fonts as assets
- Managing cookies
- Using WYSIWYG
- AJAX???
- Handling incoming third party POST requests
SEO essentials
- Enable pretty URLs
- Pagination with pretty URLs
- Adding SEO tags
- Canonical URLs
- Using redirects
- Using slugs
- Handling trailing slash in URLs
Forms
- Using and customizing captcha
- Working with ActiveForm via JavaScript
- Uploading files
- Custom validator for multiple attributes
Security
- A safe approach to passwords explained
- SQL injection
- XSS
- RBAC
- CSRF
Structuring and organizing code
- Backend and frontend via modules
- Asset processing with Grunt
- Asset processing with Gulp
- Using global functions
- Processing text
- Implementing typed collections
- MVC
- SOLID
- Dependencies
View
- Reusing views via partials
- Using blocks
- Using decorators
- When to use Widgets and when not to
- Switching themes dynamically
- Post-processing response
Models
Active Record
- Has and belongs to many
- Using SQL and noSQL at the same time
- Saving related models
- Single table inheritance
i18n
- General best practices
- Selecting application language
- Using IDs as translation source
Performance
- Necessary production setup
- Speeding up sessions
- Implementing backgroud tasks (cronjobs)
- Running Yii on HHVM
- Caching
- Configuring a Yii2 Application for an Autoscaling Stack
External code
- Using Yii in third party apps
- Using third party code with Yii
Tools
- Making your life easier (XDebug, debug toolbar, gii)
- IDE autocompletion for custom components
- Using custom migration template