235 videos, 12h 27m

Adding a hook_page_alter() and hook_form_alter() to our module

Show videos in one column
Show videos in split view
Mark multiple complete (member-only)
Add multiple to a playlist (member-only)
Change speed.5x1x1.5x2x3x


  1. 15:04Welcome to Drupal 8 Developer Prep
    1. 3:31Why you should be excited about Drupal 8
    2. 1:43How we're dealing with the fact that there's no official Drupal 8 release yet
    3. 5:15Who the "Drupal 8 Developer Prep" series for and what we will be covering
    4. 4:35How to install our Drupal 8 snapshot with Dev Desktop
  2. 27:39Building a Simple Drupal 8 Module
    1. 2:42How to set up basic module scaffolding in Drupal 8
    2. 3:21How a .info.yml file works, the purpose of using YAML and what the 'type' attribute is for
    3. 5:27Adding a hook_page_alter() and hook_form_alter() to our module
    4. 6:16How to add a page programmatically with a module
    5. 1:02A brief comparison to adding a page programmatically in Drupal 7
    6. 2:05Reviewing the code in our Controller class file
    7. 2:51Reviewing the code in our routing.yml file
    8. 1:27Reviewing our hook_menu() code
    9. 2:28Overview of what we're about to cover (OOP, autoloading, namespaces and Symfony)
  3. 91:04Object Oriented Programming Basics
    1. 4:26The difference between procedural and object-oriented programming
    2. 3:21Setting up an examples folder and demoing our contact form script
    3. 3:26Walkthrough of our procedural code example, part 1 (outline of the code)
    4. 6:08Walkthrough of our procedural code example, part 2 (building the form)
    5. 4:46Walkthrough of our procedural code example, part 3 (processing the form)
    6. 1:45How to derive objects from procedural code
    7. 4:45How classes are structured, what methods and properties are, and how a constructor works
    8. 1:14How to name classes and methods according to both Drupal and general standards
    9. 2:31How a class structure makes the relationship between methods explicit
    10. 5:04What instantiation means, the difference between class and object, and the advantage of properties
    11. 2:53Reviewing the rest of our code after moving functions into class methods
    12. 3:02Review of the advantages of object-oriented programming that we've covered so far
    13. 2:16How the Agile phiolosophy will help you stay sane when figuring out how to structure a project
    14. 2:07How to decide when to re-factor your code, or split classes into smaller classes
    15. 1:43A summary of staying sane with OOP, and our use case for re-factoring
    16. 5:21How and why to use static methods in classes
    17. 5:09Refactoring to add a new "Builder" class, and how to decide when to use a static method
    18. 3:41What a "controller" is, and how to implement one in our code
    19. 3:51How to inherit methods and properties from another class
    20. 2:18How inheritance allows for abstraction of concepts, and how that can make code difficult to understand
    21. 4:36How to use an "interface" for defining inherited class structure
    22. 3:20How and why to use an abstract class
    23. 3:28What a public interface or API really is and how OOP helps make an API more explicit
    24. 4:07The difference between the "public", "private" and "protected" visibility settings
    25. 4:43How to split a single large file into individual class files
    26. 1:03How to name class files
  4. 43:45Namespacing and Autoloading in PHP
    1. 3:03How using third-party libraries or working on a team can create naming conflicts
    2. 7:11How to use namespaces in PHP
    3. 2:34How to use namespaces to avoid naming conflicts
    4. 1:14How to use namespace aliases with the "as" keyword
    5. 1:32How to use a Fully Qualified Name for classes and methods
    6. 1:58The benefits of namespacing and a summary of how namespaces work
    7. 2:12What "autoloading" is and how namespacing relates to it
    8. 2:24How to create a simple autoloader
    9. 2:02Walking through our simple autoloader with a debugger
    10. 3:12How a typical PHP library will be structured and what each of the nested folders mean
    11. 1:32What FIG (Framework Interoperability Group) is and why PSR-0 (PHP Standards Recommendation) exists
    12. 8:43How to build a PSR-0 compliant autoloader, and a walkthrough of PSR-0 requirements
    13. 1:24Why it's good to use an established autoloader instead of creating your own
    14. 4:44How to make our own project PSR-0 compatible
  5. 19:50How to use Composer and Packagist
    1. 1:39How Composer and Packagist work together to help manage reusable PHP components
    2. 3:13How to install Composer on a Mac or Linux and what a .phar file is
    3. 1:23How to install Composer in Windows
    4. 2:21How to set up our Composer example folder and set up a basic Composer project
    5. 1:31How JSON (JavaScript Object Notation) and our composer.json file work
    6. 1:25What Semantic Versioning is and how to use it
    7. 2:55What happens during 'composer install' and how the download is structured
    8. 1:56How to use Composer's autoloader and use a package in our code
    9. 1:39A quick look at how Drupal 8 uses Composer
    10. 1:48How to look for packages, and how Packagist is like a module repository for PHP
  6. 105:35How to Work With Symfony Components
    1. 2:41What Symfony is and the difference between a CMS and a framework
    2. 3:19Building a simple example script and illustrating its flaws
    3. 5:21Refactoring our code, and how character encoding works
    4. 5:00How to incorporate the Http Foundation Symfony component to add object orientation to our simple script
    5. 3:18How the Request and Response classes work
    6. 1:56Why using global variables is dangerous, and how Http Foundation solves this problem and allows for extending functionality
    7. 7:04Examples of how we can use the Request class to access variables, and what a reverse proxy is
    8. 3:04Examples of using the Response class to set status codes, content and content type headers
    9. 3:37Adding a second page and an include file for common code
    10. 4:07How to add a front controller
    11. 2:21Adjusting our pages to use the front controller, and how to add new pages
    12. 2:47Reorganizing our page files to make it easier to add new pages
    13. 3:38How to convert a PHP file into a template
    14. 5:16How to use the extract() function to convert an array to string variables to use in a template
    15. 3:04The weaknesses of our current routing strategy, how to update a Composer project and set up the routing component
    16. 3:23How to set up a file to store our routes and use the routing component
    17. 2:37Updating our front controller to use the routing component
    18. 3:04How a try ... catch block works and why you would want to use it
    19. 5:27An in-depth look at how to use try ... catch and throwing exceptions
    20. 4:12How to use the routing component to generate URLs based on route name, and exploring additional methods of the Matcher class
    21. 5:16How to convert our pages to use a controller function
    22. 3:23Updating our routes to include a '_controller' attribute, and what a 'closure' or 'anonymous function’ is
    23. 2:55Replacing our app with one that calculates leap years
    24. 2:47How to create a controller class, and how to tell what are valid PHP callbacks
    25. 3:32How to use the controller resolver and install the Http Kernel component
    26. 2:59Updating our routes and controller to use the controller resolver, and how type hinting works
    27. 2:11How we can use multiple front controllers for different environments
    28. 2:55Creating a reusable Framework class
    29. 0:53Simplifying our front controller while leveraging our Framework class
    30. 0:57One minute of reassurance
    31. 2:31How to add Composer autoloading for our custom code by making it PSR-0 compatible
  7. 112:37How to Work With Symfony Components, Part 2
    1. 4:05How to split up our leap year code into a controller class and a model class
    2. 2:33Adding PSR-0 compatibility to our leap year code, and updating our app.php file
    3. 1:43What unit testing is and how it can make your code better and more flexible
    4. 3:11The difference between unit testing, functional testing and regression testing
    5. 2:25How to install PHPUnit on a Mac or Linux
    6. 5:09How to install PHPUnit on a Windows machine, what PEAR is and how it compares with Packagist
    7. 2:40How to set up PHPUnit configuration and set up our first unit tests
    8. 3:57How setting up interfaces for your classes helps with unit testing
    9. 2:05What dependency injection is, and updating our framework to use interfaces
    10. 2:28Looking at how our test and assertion actually work, and where to find out which assertions we can use
    11. 2:29Adding additional PHPUnit tests for our controller and 500 errors
    12. 2:29What the Event Dispatcher Symfony component does, and how to add it to our project
    13. 3:58How to add an event with the Event Dispatcher
    14. 2:18How to create an event class for our event
    15. 4:26How to add a listener with our event dispatcher
    16. 2:49A recap of how we set up our event dispatcher and listener
    17. 2:51Adding a second listener and setting its priority
    18. 4:06How to create a class for an event listener
    19. 2:03Reviewing the code in our event listener classes
    20. 2:09How a subscriber is different than a listener, and what a 'code smell’ is
    21. 3:41How to add a subscriber to our event dispatcher
    22. 1:47Overview of what we covered around the event dispatcher
    23. 6:29How to add caching support to our framework and controllers
    24. 4:34How to use the Http Kernel component to replace our entire framework
    25. 1:00The difference between setter injection and constructor injection
    26. 3:28How to add custom error reporting to our framework
    27. 5:45How to create a subscriber that allows controllers to return strings instead of response objects
    28. 3:17Reducing our front controller code by moving it to our Framework class
    29. 3:07The disadvantage of instantiating objects inside our framework and how a dependency injection container can help
    30. 5:29How to create and use a dependency injection container, and what a singleton pattern is
    31. 3:26How to prepare objects in the dependency injection container with parameters and methods
    32. 0:54Why you should never use a dependency injection container within a class even though it's tempting
    33. 1:04Updating our framework code to leverage the dependency injection container
    34. 2:46How to use dependency injection container properties to store settings
    35. 5:56An overview of what we learned in these Symfony videos
  8. 18:16Updating Our Environment and Using PHPStorm
    1. 1:55Overview of how we will prepare for the next Drupal 8 videos
    2. 4:19How to install Drupal 8 Alpha 12 with Dev Desktop 2 Beta
    3. 1:20How to create a Drupal-based project in PHPStorm
    4. 2:36The benefits of using PHPStorm for an IDE for Drupal work
    5. 4:47The benefits of using PHPStorm for general development
    6. 3:19How to get our example folder set up
  9. 44:54How to Use YAML
    1. 0:59Why we are going to do a deep dive into YAML
    2. 6:21How to create a YAML file for routes
    3. 5:27How to parse a routing YAML file
    4. 3:56How to parse generic YAML files and setting up our YAML syntax examples
    5. 6:20Overview of YAML syntax, part 1 - Simple arrays and variable types
    6. 5:08Overview of YAML syntax, part 2 - Associative and nested arrays
    7. 5:42What "Separation of Concerns" means and how it applies to YAML and code
    8. 6:33How to convert our dependency injector container into a services YAML file
    9. 3:43How to load services into a dependency injector container with a YAML file
    10. 0:45How to make sure you're loading the right files in your project
  10. 18:10How the Dependency Injection Container Works in Drupal 8
    1. 1:15How the dependency injection container acts like a backbone to Drupal 8
    2. 2:35Taking at look at our our first Drupal 8 services.yml file
    3. 5:09How to find the dependency injection container in Drupal 8, and an overview of how it is structured
    4. 5:25How the dependency injection container accesses its services
    5. 3:46How to figure out what code to use to call a service
  11. 50:51Working With Symfony Components in Drupal 8, Part 1 - Using and Creating Services
    1. 3:16Setting up our example module scaffolding
    2. 2:50Why hook_menu() was removed and why Drupal switched to PSR-4 autoloading
    3. 2:07How Drupal uses PSR-4 autoloading under the hood
    4. 5:47Adding a page to our example module by using a route and controller
    5. 3:15How to use services in a custom module
    6. 3:54How to find out which class is responsible for a service
    7. 4:15How to create a service with a custom module
    8. 1:55How to call our custom service
    9. 5:05An overview of why we should use services instead of simple functions or classes
    10. 1:19The differences and similarities between subscribers and hooks
    11. 3:39How to find an example subscriber class, and an overview of its structure
    12. 4:03How to find out what events we can subscribe to
    13. 3:37How to create a subscriber class
    14. 4:13How to register a subscriber as a service
    15. 1:36How to figure out what objects and methods we have to work with in a subscriber
  12. 43:16Working With Symfony Components in Drupal 8, Part 2 - Creating Events and Sub-Requests
    1. 3:37How to get the route name for the current page and how “inheritdoc” works
    2. 4:02How to fix a "Class not found" error in Drupal 8
    3. 6:24How to perform a redirect and how hook_init() has been replaced
    4. 2:33Why you might choose to create events instead of hooks
    5. 5:29How to create a custom event quickly with the GenericEvent class
    6. 2:35How to subscribe to a custom event
    7. 5:04How to create a specialized custom event class