Drupal 8

Documenting my findings about Drupal 8 here.
By Phil Frilling, 7 April, 2021

Recently, I was building a custom Drupal form that used dependency injection and included an ajax submit handler. While testing the form, on the initial page load, the form submitted just fine using ajax. However, when the user used another ajax handler on the same form, all of the injected services were set to `NULL`.

It turns out that I had my services set to be

By Phil Frilling, 21 November, 2018

In a recent project, we were using an external service that pulls our site into their system and injects their content into our project. The issue we ran into was that the third party was overwriting all links in the template we provided with their HTTP host, causing the menu system from our Drupal site to break. To get around this we needed to generate absolute links for all of our menus.

In order to accomplish this we used template_preprocess() to dynamically provide our site's hostname as a variable:

By Phil Frilling, 19 September, 2018
Drupal 8 custom validation of multiple entity fields In a recent Drupal 8.6 project, I was using the media entity type to add custom fields to pdf documents. These pdf files contain two fields: a select list and a text field. When a specific select option is chosen, the text field becomes required. I could have used a form alter function to add my custom validation for these fields, but this would limit my validation to just one form.
By Phil Frilling, 5 September, 2018
I was tasked with breaking the user registration form of a Drupal 8 installation into a multi-step form. This was necessary because depending on what a user selected in step one, they were shown different form fields in step two. To begin, I added all of the fields I needed to the user profile using the GUI. (/admin/config/people/accounts/fields). Then, I added the fields I needed to the manage form display/register tab (/admin/config/people/accounts/form-display/register). This gave me a working, one page registration form.
By Phil Frilling, 3 January, 2017
Loading a paragraph field entity for use within node.html.twig. In order to load a field in a paragraph referenced entity, we need to first load the referenced entities

$my_paragraphs = $variables['node']->my_paragraph_field_name->referencedEntities();
Then, we look through the paragraphs to get the correct language, and in turn, pull the field from the paragraph.

    foreach ($my_paragraphs as
By Phil Frilling, 9 November, 2016
In order to alter a menu item that is provided by a module/system, you can use hook_preprocess_menu__MENUNAME() (Since hook_menu_alter() no longer exists). In my instance, I need to change the system provided 'Logout' link to read 'Log Out'.