Laravel domains

stitcher.io

My colleague Brent shares how we've been structuring our non-trivial projects at Spatie.

In this post we'll look at a different approach of structuring large code bases into separate domains. The name "domain" is derived from the popular paradigm DDD, or also: domain driven design.

Read more [stitcher.io]

The Integration Operation Segregation Principle

frederickvanbrabant.com

In a new post on his blog Senior CEO Frederick Vanbrabant explains the Integration Operation Segregation Principle, which is programmerspeak for splitting your code into nice little testable bits.

As you can see the Integration Operation Segregation Principle is just a long and complicated term to describe something very simple. This all might seem like a lot of work, but it’s worth it. Your code and especially your tests will thank you later

Read more [frederickvanbrabant.com]

Join 9,500+ smart developers

Get my monthly newsletter with what I learn from running Spatie, building Oh Dear, and maintaining 300+ open source packages. Practical takes on Laravel, PHP, and AI that you can actually use.

No spam. Unsubscribe anytime. You can also follow me on X.

Introducing Laravel Excel 3.1

medium.com

Patrick Brouwers is doing an awesome job creating a quality Laravel package to integrate with Excel. The newest version can import Excel files.

Laravel Excel 3.0 was released a while ago and completely redesigned the architecture behind exports. Our next target was to do the same paradigm shift for imports. Development took some time, because we wanted to get it right from the start.

Read more [medium.com]

The Five Types of Test Doubles & How to Create Them in PHPUnit

jmauerhan.wordpress.com

In a new post on her blog Jessica Mauerhan has some good examples on the various types of test doubles.

Did you know that a Mock is only one type of a test double? Most of us use the word “mock” to mean any kind of test double, but there’s actually five different types. It really can help you understand what you’re trying to accomplish with your test if you know a little bit more what you’re doing with your test doubles, so this article will explain the kinds of test doubles, when you use them, how you use them and why.

Read more [jmauerhan.wordpress.com]

Use custom html components in your Blade views original

by Freek Van der Herten – 7 minute read

Today we launched our newest package called BladeX. In short this package provides you with an easy html like way to render custom html components in your Blade views. In this blogpost I'd like to introduce the package to you. A first example When building a server rendered app you're probably going…

Read more

Introducing BladeX View Models original

by Freek Van der Herten – 3 minute read

Earlier today we released BladeX, a package that allows you to use Blade components using a Vue inspired syntax. Read all about it in my previous blogpost. In the latest North Meets South podcast Jacob and Michael discussed BladeX and wondered if the package could be married with view models or…

Read more

APP_KEY And You

tighten.co

Jake Bathman, developer at Tigthen Co, wrote a new blogpost explaining what Laravel's APP_KEY environment variable is used for.

In this post, we'll talk about what APP_KEY does and doesn't do, some common misconceptions about its relationship to user password hashing, and the simple steps to changing your APP_KEY safely without losing access to your data.

Read more [tighten.co]

Union Types vs. Intersection Types

medium.com

In an older but still relevant blogpost, Ondřej Mirtes, the author of PHPStan, explains the difference between union types and intersection types.

One of the headlining features of PHPStan 0.9 is the introduction of intersection types. Since this is a very useful feature that helps us understand the code much better, but the terminology is largely unknown and mysterious to the PHP community, I decided to write up and compare these two kinds of compound types.

Read more [medium.com]

Community-driven PHP 8 Wish List

blog.nikolaposa.in.rs

Nikola Poša did some light research on what features PHP developers are craving for to be added in PHP 8. Seems like I'm not the only one that wants arrow functions and generics.

It's been over two months since I started a research on Twitter about the things that developers would like to be added or improved in the next major PHP release. It had a surprisingly long reach, inspiring developers, prominent experts, community representatives to express their opinion through more than a hundred responses.

Read more [blog.nikolaposa.in.rs]

Introducing Laravel view models

stitcher.io

My colleague Brent released another awesome package called laravel-view-models. On his blog he shares some good examples and uses cases.

In essence, view models are simple classes that take some data, and transform it into something usable for the view. In this post I'll show you the basic principles of the pattern, we'll take a look at how they integrate in Laravel projects, and finally I'll show you how we use the pattern in one of Spatie's, our company, projects.

Read more [stitcher.io]

Bitmask Constant Arguments in PHP

medium.com

Liam Hammett explains what bitmask constants are and how they work.

PHP has a handful of core functions that can accept boolean arguments in the form of constants that have a binary value. These can be combined together in a single function argument, essentially passing multiple boolean flags in a very compact manner. They work a bit differently to how most people implement options in their userland functions, so let’s take a look at how they work.

Read more [medium.com]

Don’t clone your php objects, DeepCopy them

dcsg.me

Daniel Gomes, a developer at Teamleader, explains a potential problem when cloning object in PHP.

As you know, PHP has a well-known clone keyword that shallow copy all of the object’s properties. So under the hood what it does is to create a new Object with the exact same values of that object properties – unless you change its behavior by implementing the clone() function in your class.

Read more [dcsg.me]