Contents at a Glance
- How to Use Assetic for Asset Management – 7
- Combining, Compiling and Minimizing Web Assets with PHP Libraries – 14
- How to Minify CSS/JS Files (Using UglifyJS and UglifyCSS) – 17
- How to Minify JavaScripts and Stylesheets with YUI Compressor – 21
- How to Use Assetic for Image Optimization with Twig Functions – 23
- How to Apply an Ascetic Filter to a specific File Extension – 26
- How to Install 3rd Party Bundles – 28
- Best Practices for Reusable Bundles – 31
- How to Use Bundle Inheritance to Override Parts of a Bundle – 37
- How to Override any Part of a Bundle – 39
- How to Remove the AcmeDemoBundle – 42
- How to Load Service Configuration inside a Bundle – 45
- How to Create Friendly Configuration for a Bundle – 48
- How to Simplify Configuration of multiple Bundles – 54
- How to Use Varnish to Speed up my Website – 56
- Caching Pages that Contain CSRF Protected Forms – 60
- Installing Composer – 61
- How to Master and Create new Environments – 62
- Building your own Framework with the MicroKernelTrait – 67
- How to Override Symfony’s default Directory Structure – 72
- Using Parameters within a Dependency Injection Class – 75
- Understanding how the Front Controller, Kernel, and Environments Work together – 77
- How to Set external Parameters in the Service Container – 80
- How to Use the Apache Router – 82
- Configuring a Web Server – 83
- How to Organize Configuration Files – 89
- How to Create a Console Command – 93
- How to Use the Console – 97
- How to Style a Console Command – 98
- How to Call a Command from a Controller – 105
- How to Generate URLs from the Console – 107
- How to Enable Logging in Console Commands – 109
- How to Define Commands as Services – 113
- How to Customize Error Pages – 115
- How to Define Controllers as Services – 120
- How to Upload Files – 125
- How to Optimize your Development Environment for Debugging – 131
- How to Deploy a Symfony Application – 133
- Deploying to Microsoft Azure Website Cloud – 137
- Deploying to Heroku Cloud – 150
- Deploying to Platform.sh -155
- Deploying to fortrabbit – 159
- How to use Doctrine Extensions: Timestampable, Sluggable, Translatable, etc. – 163
- How to Register Event Listeners and Subscribers – 164
- How to Use Doctrine DBAL – 167
- How to Generate Entities from an Existing Database – 169
- How to Work with multiple Entity Managers and Connections – 172
- How to Register custom DQL Functions – 175
- How to Define Relationships with Abstract Classes and Interfaces – 176
- How to Provide Model Classes for several Doctrine Implementations – 179
- How to Implement a Simple Registration Form – 182
- How to Use PdoSessionHandler to Store Sessions in the Database – 188
- How to Use MongoDbSessionHandler to Store Sessions in a MongoDB Database – 191
- Console Commands – 193
- How to Send an Email – 194
- How to Use Gmail to Send Emails – 197
- How to Use the Cloud to Send Emails – 199
- How to Work with Emails during Development – 201
- How to Spool Emails – 204
- How to Test that an Email is Sent in a Functional Test – 206
- How to Create Event Listeners and Subscribers – 208
- How to Set Up Before and After Filters – 212
- How to Extend a Class without Using Inheritance – 216
- How to Customize a Method Behavior without Using Inheritance – 219
- How to use Expressions in Security, Routing, Services, and Validation – 221
- How to Customize Form Rendering – 224
- How to Use Data Transformers – 237
- How to Dynamically Modify Forms Using Form Events – 245
- How to Embed a Collection of Forms – 255
- How to Create a Custom Form Field Type – 267
- How to Create a Form Type Extension – 272
- How to Reduce Code Duplication with “inherit_data” – 277
- How to Unit Test your Forms – 280
- How to Configure empty Data for a Form Class – 285
- How to Use the submit() Function to Handle Form Submissions – 287
- How to Use the virtual Form Field Option – 289
- Using Bower with Symfony – 290
- How to Install or Upgrade to the Latest, Unreleased Symfony Version – 293
- How to Use Monolog to Write Logs – 295
- How to Configure Monolog to Email Errors – 300
- How to Configure Monolog to Display Console Messages – 302
- How to Configure Monolog to Exclude 404 Errors from the Log – 304
- How to Log Messages to different Files – 305
- How to Create a custom Data Collector – 307
- How to Use Matchers to Enable the Profiler Conditionally – 311
- Switching the Profiler Storage – 313
- How to Access Profiling Data Programmatically – 314
- The PSR-7 Bridge – 316
- How to Configure Symfony to Work behind a Load Balancer or a Reverse Proxy – 318
- How to Register a new Request Format and Mime Type – 320
- How to Force Routes to always Use HTTPS or HTTP – 321
- How to Allow a “/” Character in a Route Parameter – 322
- How to Configure a Redirect without a custom Controller – 323
- How to Use HTTP Methods beyond GET and POST in Routes – 325
- How to Use Service Container Parameters in your Routes – 327
- How to Create a custom Route Loader – 329
- Redirect URLs with a Trailing Slash – 333
- How to Pass Extra Information from a Route to a Controller – 335
- Looking up Routes from a Database: Symfony CMF DynamicRouter – 336
- How to Build a Traditional Login Form – 337
- Authenticating against an LDAP server – 342
- How to Load Security Users from the Database (the Entity Provider) – 346
- How to Create a Custom Authentication System with Guard – 353
- How to Add “Remember Me” Login Functionality – 360
- How to Impersonate a User – 364
- How to Customize your Form Login – 367
- How to Create a custom User Provider – 370
- How to Create a Custom Form Password Authenticator – 375
- How to Authenticate Users with API Keys – 379
- How to Create a custom Authentication Provider – 388
- Using pre-Authenticated Security Firewalls – 397
- How to Change the default Target Path Behavior – 399
- Using CSRF Protection in the Login Form – 401
- How to Choose the Password Encoder Algorithm Dynamically – 403
- How to Use multiple User Providers – 405
- How to Use Multiple Guard Authenticators – 407
- How to Restrict Firewalls to a Specific Request – 409
- How to Restrict Firewalls to a Specific Host – 411
- How to Create and Enable Custom User Checkers – 412
- How to Use Voters to Check User Permissions – 414
- How to Use Access Control Lists (ACLs) – 419
- How to Use advanced ACL Concepts – 423
- How to Force HTTPS or HTTP for different URLs – 427
- How to Secure any Service or Method in your Application – 428
- How Does the Security access_control Work? – 431
- How to Use the Serializer – 435
- How to Define Non-Shared Services – 438
- How to Work with Compiler Passes in Bundles – 439
- Session Proxy Examples – 440
- Making the Locale “Sticky” during a User’s Session – 442
- Configuring the Directory where Session Files are Saved – 445
- Bridge a legacy Application with Symfony Sessions – 447
- Limit Session Metadata Writes – 448
- Avoid Starting Sessions for Anonymous Users – 449
- How to Inject Variables into all Templates (i.e. global Variables) – 450
- How to Use and Register Namespaced Twig Paths – 452
- How to Use PHP instead of Twig for Templates – 454
- How to Write a custom Twig Extension – 459
- How to Render a Template without a custom Controller – 461
- How to Simulate HTTP Authentication in a Functional Test – 463
- How to Simulate Authentication with a Token in a Functional Test – 464
- How to Test the Interaction of several Clients – 466
- How to Use the Profiler in a Functional Test – 467
- How to Test Code that Interacts with the Database – 469
- How to Test Doctrine Repositories – 472
- How to Customize the Bootstrap Process before Running Tests – 474
- Upgrading a Patch Version (e.g. 2.6.0 to 2.6.1) – 475
- Upgrading a Minor Version (e.g. 2.5.3 to 2.6.1) – 476
- Upgrading a Major Version (e.g. 2.7.0 to 3.0.0) – 478
- Upgrading a Third-Party Bundle for a Major Symfony Version – 482
- How to Create a custom Validation Constraint – 486
- How to Handle Different Error Levels – 490
- How to Dynamically Configure Validation Groups – 492
- How to Use PHP’s built-in Web Server – 494
- How to Create a SOAP Web Service in a Symfony Controller – 497
- How to Create and Store a Symfony Project in Git – 500
- How to Create and Store a Symfony Project in Subversion – 503
- Using Symfony with Homestead/Vagrant – 507