235 videos, 12h 27m

Drupal 8 Developer Prep

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
    8. 0:46A final word on what we’ve learned about events
    9. 6:05How to override an existing service
    10. 0:53The benefits of using an interface for a service
    11. 2:31Overview of what we've covered, and how we're going to use the HTTP Kernel component to create sub-requests
    12. 3:17How to create a subrequest with the HTTP Kernel service
  13. 49:27Upgrading a Module to Drupal 8, Part 1 - Plugins, Annotations and Subscribers
    1. 2:47The three groups of knowledge that you need to work with Drupal 8 effectively
    2. 2:55A tour of our Drupal 7 module's front-end feature set
    3. 5:03A tour of our Drupal 7 module's code base, part 1
    4. 3:26A tour of our Drupal 7 module's code base, part 2
    5. 1:38Getting our module to upgrade set up, and running into our first upgrade problem
    6. 3:47Overview of resources to use when upgrading a module to Drupal 8
    7. 3:37How to upgrade a .info file to a .info.yml file and install our module
    8. 1:22How to find a good source in the user interface for an example block
    9. 2:20How to find a piece of code by searching for a unique string from the interface
    10. 1:43How a block plugin class is structured
    11. 2:11What annotations are and how they work
    12. 2:11Overview of the alternatives to annotations, and why we're not using them
    13. 1:41A brief description of what a Drupal plugin is
    14. 2:47How to troubleshoot overlays not showing and how blocks are now actually block factories
    15. 4:46How to create a block plugin
    16. 3:14How to modify the default caching settings for a block plugin
    17. 3:59How to move our hook_init() code into a subscriber
  14. 74:58Upgrading a Module to Drupal 8, Part 2 - State API, Configuration API, Forms and Blocks
    1. 2:37A comparison of the State API and the Configuration API and how they replace variable_get()
    2. 2:07How to use the State API to store arbitrary values
    3. 0:55How to replace variable_get() with a State API call
    4. 2:40How to replace drupal_get_title() with a call to the "title resolver" service
    5. 1:23How to replace variable_set() with a State API call
    6. 3:40How to replace the $_GET['q'] and what to do when getting a "Drupal class not found" error
    7. 1:03How to replace variable_del() with a State API call
    8. 4:31How to upgrade hook_block_view() and format_interval()
    9. 3:21Overview of the pieces we need for our module configuration form, and finding a good example
    10. 2:07How forms are structured in Drupal 8
    11. 5:25Removing unnecessary overrides and upgrading drupal_map_asscoc()
    12. 4:18How to use the Configuration API to store default module settings, replacing variable_set()
    13. 1:23How to update configuration with the Configuration API and submitting a module settings form
    14. 4:44How to add a page for our module configuration form
    15. 1:14How to get our default configuration value to register while doing development
    16. 0:34Which files to use if you're starting this series from here
    17. 5:03How to register a menu link and find the ID for an existing menu link
    18. 1:13How to show a link to our module configuration form from the module listing page
    19. 5:27How to set up a block configuration form, and a benefit of using plugins
    20. 3:35How to use block settings in a block configuration form
    21. 1:48How to use the Configuration API as a service
    22. 1:32Testing out our module settings and troubleshooting a problem with saving the value
    23. 3:35Troubleshooting our block configuration form
    24. 1:24Adding a second block and ways to improve our block configuration
    25. 5:32Updating our .module file's hook_permission() and hook_help()
    26. 2:34Cleaning up our .module file and updating hook_cron()
    27. 1:13How to fix an "Undefined offset" error
  15. 32:12Using the Twig template engine in Drupal 8
    1. 2:51Overview of how Twig works and why Twig is so useful
    2. 3:43How to set up a Twig template file and a brief description of Twig variables
    3. 2:50How to register a Twig template file with hook_theme()
    4. 2:16How to wire up a Twig template to a render array
    5. 2:08How to easily debug Twig templates by reloading updated template files automatically
    6. 2:52How to use Twig filters and translate content in a template with the t filter
    7. 1:16How to replace variables in a translated string using the "t" filter in a Twig template
    8. 2:04How to set up a new variable to use in our Twig template file
    9. 2:31How to decide how granular a template file should be
    10. 1:50How to see what variables you have to work with in a Twig template using "dump"
    11. 3:08How to do a foreach loop in a Twig template
    12. 0:52How to use the dump tool in Twig to see just the names of the available variables
    13. 1:38How to figure out what Twig template file is responsible for any output on the page
    14. 2:13Congratulations and a quick review of what we covered in this course


Add to playlist

Add to , or

Add to new playlist:

Add to playlist
This is a member-only feature
But, it's easy to become a member

Add to cart:

Add to playlist

Add to , or

Add to new playlist:

Add to playlist
Contact us

Below are the supported keyboard shortcuts for our video player.

Start / stop video
Go to next video
Go to previous video
Increase or decrease player speed by 20%
Skip ahead or go back by 15 seconds
Jump to a percentage (2 is 20%, for example)
Toggle full screen
Videos Pricing More Search
BuildAModule Logo Icon BuildAModule Logo Icon
Become a member!
1 month
6 months
10% off
12 months
20% off
All memberships come with the following:
24 / 7 access to the entire 1800+ video library
An innovative video player with a rolling transcript
Extensive Drupal and cross-platform training
A thorough and thoughtful training style
Progress tracking
Take notes on specific video sections
Intuitive multi-user management
How many users?
Go solo with a single user, or give multiple team members access through one account and get discounts by bundling multiple users into a single membership.