My talk “Slicing into Blade” from Laracon EU Online 2021 has just been made public on YouTube, so if you’re looking for an overview about how Laravel Blade’s internals works and want to take a dive into it, check it out!
In this short video series, I take you through Laravel Blade and some things I’ve picked up from using it extensively for a long time.
We’ll see how to make Blade work from plain PHP, the additional things it does under-the-hood, how to disable the view cache, extend Blade and write your own custom directives that work reliably and effectively. Come along for the ride and watch the series.
We use autoloaders in PHP all the time, but if you change your mindset a little, you’ll find they can do a lot more than you might’ve thought. We’ll be taking a look at using some unconventional techniques, we can use autoloaders to take PHP a step further, introducing interesting and exciting new functionality PHP natively doesn’t support.
There are a few different ways to handle translated text in your codebase, but here we’ll cover 2 of the more common approaches; using the full text in your source code, and using translation keys.
Full text in source code
⚠️ Note: This is an excerpt from my upcoming book & course about localisation for software developers. If you want more of this kind of content, sign up to the newsletter at l10n.expert to get more excerpts before the full release.
If you’ve not heard already, I announced on Twitter the other day that I’ll be starting a Livewire-focussed newsletter.
I plan to use this as a space to help make people aware about all the new minor features in Livewire that don’t get their own big announcement, as well as general community updates and 🔥 tips to get the most out of Livewire.
You might be aware that one Gmail account could have an almost unlimited number of email addresses associated with it, to no effort of the user who owns the account. If you’re not aware of this, check out my post below explaining it:
If you’re thinking to yourself “how can I protect against users abusing this in my own applications?” - you’re in luck, because that’s exactly what we’ll be covering here.
Back in November 2019, I gave a lightning talk at the PHPSW meetup highlighting how to avoid a few of the pitfalls I often see people struggle with when they get started with localising web projects.
You can find the slides here: https://slides.com/liamhammett/avoiding-the-pain-of-localisation
When creating UIs with TailwindCSS, I often find myself writing the same few utilities together on the same elements all the time. This is why I often end up composing some common components, like a
In my mind, however, a “component” is a fully-formed set of styles for an element - something like a button may affect the colours, padding, border radius, text size and more - styles that are not necessary to be coupled together to still have a usable element.
But what do you do if you want to modify something that’s tightly coupled together, like the colours? If your default element has black text and you set a dark background utility, you probably don’t want it to keep having black text - coupling another text-colour utility to it.
You might think you know PHP, but if you dig below the surface you might find it can do more than you knew. Beyond the documented features, there lies a world of tricks, hacks and other techniques that can allow PHP to go a step further.
In this talk we’ll look outside the box at some things PHP provides like references, autoloading and magic methods and explore how using them in an unconventional way can benefit our own code.
Do you enjoy using TailwindCSS, AlpineJS, Laravel and Livewire together?
Well you’re in luck! Along with Dan Harrin and Ryan Chandler, we’ve just released a preset that can provide all of this out-of-the-box with sensible defaults to get you up and running with these technologies in a flash.
“Static constructors” are a concept a lot of object-oriented programming languages support - although, unfortunately, PHP does not.
If you’re not familiar with the concept, a static constructor is just a method the developer can define on a class which can be used to initialise any static properties, or to perform any actions that only need to be performed only once for the given class. The method is only called once as the class is needed.
The C# guide about static constructors is a good resource to see how another language handles these, however we’ll cover the important bits below.
Laravel offers some very useful ways to test that your pages are being rendered with the right content by making assertions directly on the response object.
It’s such an elegant and fast way to be sure your application is doing what you want, but doesn’t necessarily always do what you might want.
A test doing this in Laravel may look like the following, creating an article then making sure the title of that article shows on the listing page:
Have you ever wished that a PHP class had another method on it that you’d like to use? Laravel makes this dream come true through its concept of “Macroable” classes.
Macroable itself is the name of a trait Laravel comes with that is applied to many of the framework’s own classes.
This trait allows you to call a static “macro” method at runtime to add a new method to the class by executing a closure. Behind the scenes, it will use the magic
__callStatic() methods PHP provides to make the method work as if it were really on the class.
Black Friday and Cyber Monday deals have already started for 2019, and if you’re a PHP or specifically Laravel developer, there’s a lot to look forward to, especially if you’re looking to expand your knowledge and pick up some new skills on the cheap.
In this page I’ll be keeping you up-to-date with the best and latest deals to keep an eye on - it’s the only time of year with these kinds of huge price drops, so don’t miss out.
If you want to see the kind of deals that were up for grabs last year and what you can expect to come over the next few days, check out last year’s post.
If you’ve ever tried to build a custom component to wrap around the
<textarea> element with Vue, you’ll find that it’s not as simple as you first think to keep the behaviour the same as the native element.
In this post I’m going to quickly show the problem that you’ll likely run into, and a simple solution for it.
Let’s take a look…
Sometimes when working on a project, I’ll always want to run a handful of commands at the same time, some of which may return when they’re done, others might be long-running, like watchers or services actively exposing ports.
This is something that might seem simple to do with a basic Bash script at first, but what if your script has multiple processes running side-by-side and you want to be able to stop them all at once too?
Here we’re going to take a look at how we can achieve this with Bash traps and the single-ampersand operator.
Private constructors are a pattern found in object-oriented programming languages that prevents the class from being instantiated, except by itself.
The first time I saw this pattern in my programming career, I was confused. It wasn’t immediately apparent why such a feature would ever be beneficial in the real world. How are you meant to use the class if it can’t be instantiated? Why even bother defining a constructor at all if it can’t be called?
It turns out there are a handful of uses that private constructors can lend themselves to. Here I’m going to go over a few purposes they serve. The examples are in PHP but should transfer to any language that supports this feature.
Back when I started using PHP properly in the early 5.0 days, it felt like the language was pretty basic. Other languages were making leaps and bounds every year, and as time went on, PHP seemed to have stagnated. The language wasn’t bad, but it wasn’t as good as it could’ve been.
That all changed this decade. PHP has come an awful long way in the last few years and is once again proving that it’s got what it takes to be a programming language people should take seriously, even outside the web. I’m hugely happy with the direction PHP has taken and the amazing work of the core contributors and the entire ecosystem.
That said, there are a handful of things I would love to see PHP implement at some point in the future. These are a few things that I would’ve liked to be able to use every now and again when the circumstances for them come up.
As you can see because you’re already on it, I have a new site that I’ll be posting blog content to at liamhammett.com!
My reason for this change was pretty simple; I want more control over my content.
Medium seems to be given a lot of shit lately, but it holds a special place in my heart for getting me interested in writing. Here I’m going to talk about some pros and cons with the platform that made me come to my decision to move away from it.