80 lines
3.5 KiB
YAML
80 lines
3.5 KiB
YAML
uuid:
|
|
- value: f529894e-5912-4e77-91a3-d78b9cbf2584
|
|
langcode:
|
|
- value: en
|
|
type:
|
|
- target_id: daily_email
|
|
target_type: node_type
|
|
target_uuid: 8bde1f2f-eef9-4f2d-ae9c-96921f8193d7
|
|
revision_timestamp:
|
|
- value: '2025-05-11T09:00:07+00:00'
|
|
revision_uid:
|
|
- target_type: user
|
|
target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849
|
|
revision_log: { }
|
|
status:
|
|
- value: true
|
|
uid:
|
|
- target_type: user
|
|
target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849
|
|
title:
|
|
- value: 'Revisiting the Null Object pattern in Drupal'
|
|
created:
|
|
- value: '2024-08-30T00:00:00+00:00'
|
|
changed:
|
|
- value: '2025-05-11T09:00:07+00:00'
|
|
promote:
|
|
- value: false
|
|
sticky:
|
|
- value: false
|
|
default_langcode:
|
|
- value: true
|
|
revision_translation_affected:
|
|
- value: true
|
|
path:
|
|
- alias: /daily/2024/08/30/revisiting-the-null-object-pattern-in-drupal
|
|
langcode: en
|
|
body:
|
|
- value: |
|
|
<p>The Null Object pattern is one of my favourite ways to DRY up code and reduce duplication.</p>
|
|
|
|
<p>I wrote the <a href="https://www.drupal.org/project/system_user">System User module</a> for a client project a number of years ago, which also included the <a href="https://www.drupal.org/project/null_user">Null User module</a>.</p>
|
|
|
|
<p>If no system user is found, it returns a null (empty) user instead that returns null or empty values by default.</p>
|
|
|
|
<p>Today, <a href="https://x.com/opdavies/status/1829183673725284772">I posted</a> <a href="https://mastodon.social/@opdavies/113046773292848198">and tooted</a> a screenshot of some code from a side project I'm working on, which I realised would be another good time to use the Null User module.</p>
|
|
|
|
<p>In the code, I search for a user with a given licence key.</p>
|
|
|
|
<p>If a user is found, it is returned.</p>
|
|
|
|
<p>If not, instead of returning FALSE or NULL, I return a null user object that I can treat the same as a real user.</p>
|
|
|
|
<p>Now, when I create the node and assign an owner, I can just use <code>$account->id()</code> and it will always work if a user was found or not.</p>
|
|
|
|
<p>This makes the code cleaner, simpler and easier to test and maintain.</p>
|
|
|
|
|
|
format: full_html
|
|
processed: |
|
|
<p>The Null Object pattern is one of my favourite ways to DRY up code and reduce duplication.</p>
|
|
|
|
<p>I wrote the <a href="https://www.drupal.org/project/system_user">System User module</a> for a client project a number of years ago, which also included the <a href="https://www.drupal.org/project/null_user">Null User module</a>.</p>
|
|
|
|
<p>If no system user is found, it returns a null (empty) user instead that returns null or empty values by default.</p>
|
|
|
|
<p>Today, <a href="https://x.com/opdavies/status/1829183673725284772">I posted</a> <a href="https://mastodon.social/@opdavies/113046773292848198">and tooted</a> a screenshot of some code from a side project I'm working on, which I realised would be another good time to use the Null User module.</p>
|
|
|
|
<p>In the code, I search for a user with a given licence key.</p>
|
|
|
|
<p>If a user is found, it is returned.</p>
|
|
|
|
<p>If not, instead of returning FALSE or NULL, I return a null user object that I can treat the same as a real user.</p>
|
|
|
|
<p>Now, when I create the node and assign an owner, I can just use <code>$account->id()</code> and it will always work if a user was found or not.</p>
|
|
|
|
<p>This makes the code cleaner, simpler and easier to test and maintain.</p>
|
|
|
|
|
|
summary: null
|
|
field_daily_email_cta: { }
|