<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/vendor/feed/atom.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
                        <id>https://freek.dev/feed/php</id>
                                <link href="https://freek.dev/feed/php" rel="self"></link>
                                <title><![CDATA[freek.dev - all PHP blogposts]]></title>
                    
                                <subtitle>All PHP blogposts on freek.dev</subtitle>
                                                    <updated>2023-11-08T11:23:00+01:00</updated>
                        <entry>
            <title><![CDATA[Implementing Load More functionality with Livewire 3 in 2 minutes.]]></title>
            <link rel="alternate" href="https://freek.dev/2584-implementing-load-more-functionality-with-livewire-3-in-2-minutes" />
            <id>https://freek.dev/2584</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>In this video you'll learn how to implement &quot;load more&quot; functionality with Livewire 3 in about 2 minutes.</p>


<a href='https://youtu.be/2FugiBYjZR8'>Read more</a>]]>
            </summary>
                                    <updated>2023-11-08T11:23:00+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Build a Quick & Easy Instant Search UI With Alpine AJAX & Laravel]]></title>
            <link rel="alternate" href="https://freek.dev/2585-build-a-quick-easy-instant-search-ui-with-alpine-ajax-laravel" />
            <id>https://freek.dev/2585</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>How to easily progressively enhance an instant search component with Alpine AJAX so that it works with or without JavaScript available.</p>


<a href='https://imacrayon.com/words/instant-search-with-alpine-ajax-and-laravel/'>Read more</a>]]>
            </summary>
                                    <updated>2023-11-06T13:23:00+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Juggling Databases When Testing With Laravel: Tackling the Lock Wait Timeout Error]]></title>
            <link rel="alternate" href="https://freek.dev/2586-juggling-databases-when-testing-with-laravel-tackling-the-lock-wait-timeout-error" />
            <id>https://freek.dev/2586</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Writing tests to validate behaviour in a multi-tenancy, multi-database app can be challenging. &quot;Lock wait timeout&quot; errors, or transactions cleaned up in one db and not another - it can be very frustrating! Fortunately, Laravel has a way to support db transactions across multiple databases.</p>


<a href='https://www.conroyp.com/articles/juggling-databases-testing-laravel-multi-tenancy-lock-wait-timeout'>Read more</a>]]>
            </summary>
                                    <updated>2023-11-03T13:22:00+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Ensure model events are fired in your tests when using Model Observers]]></title>
            <link rel="alternate" href="https://freek.dev/2587-ensure-model-events-are-fired-in-your-tests-when-using-model-observers" />
            <id>https://freek.dev/2587</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>We will look at a couple of common scenarios where adding a couple of lines to your tests can future-proof your application from data loss when using Model Observers.</p>


<a href='https://devonmather.dev/posts/ensuring-model-events-are-fired-in-your-tests-when-using-model-observers'>Read more</a>]]>
            </summary>
                                    <updated>2023-10-31T13:22:00+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Mailcoach gains split testing, Livewire 3 support, suppression list, and much more]]></title>
            <link rel="alternate" href="https://freek.dev/2589-mailcoach-gains-split-testing-livewire-3-support-suppression-list-and-much-more" />
            <id>https://freek.dev/2589</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Today, we're adding some very powerful features to both the hosted and self-hosted versions of Mailcoach: split testing (also known as A/B testing), MJML support, Livewire 3 support, suppression lists, new datables, and much more!</p>


<a href='https://mailcoach.app/blog/mailcoach-gains-split-testing-livewire-3-support-suppression-list-and-much-more'>Read more</a>]]>
            </summary>
                                    <updated>2023-10-30T11:50:57+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Why you should use spatie/laravel-data to store "settings" in your Laravel app]]></title>
            <link rel="alternate" href="https://freek.dev/2588-why-you-should-use-spatielaravel-data-to-store-settings-in-your-laravel-app" />
            <id>https://freek.dev/2588</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>I struggled for a long time to find a good way to represent settings in my Laravel apps.
spatie/laravel-data solves this for me with strong types and Eloquent casting.</p>


<a href='https://stefanzweifel.dev/posts/2023/10/29/spatielaravel-data-is-probably-the-best-way-to-store-settings-in-your-laravel-app'>Read more</a>]]>
            </summary>
                                    <updated>2023-10-30T11:21:36+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Single-use tests]]></title>
            <link rel="alternate" href="https://freek.dev/2581-single-use-tests" />
            <id>https://freek.dev/2581</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Another gem of a blog post by Tim MacDonald</p>


<a href='https://timacdonald.me/single-use-tests/'>Read more</a>]]>
            </summary>
                                    <updated>2023-10-13T15:50:00+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Ray as a debugging companion in busy integration tests]]></title>
            <link rel="alternate" href="https://freek.dev/2580-ray-as-a-debugging-companion-in-busy-integration-tests" />
            <id>https://freek.dev/2580</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>How to use Ray as a debugging companion in busy integration tests</p>


<a href='https://myray.app/blog/8-ray-as-a-debugging-companion-in-busy-integration-tests'>Read more</a>]]>
            </summary>
                                    <updated>2023-10-12T15:49:00+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Livewire v3: Modelable, Events, and Data Sharing]]></title>
            <link rel="alternate" href="https://freek.dev/2573-livewire-v3-modelable-events-and-data-sharing" />
            <id>https://freek.dev/2573</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Share dynamic attributes between parent and child components using Livewire Modelable, and thirftily share data between separate components with client side events!</p>


<a href='https://fly.io/laravel-bytes/modelable-events-data-livewire/'>Read more</a>]]>
            </summary>
                                    <updated>2023-10-11T15:48:00+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Debugging Livewire components using Ray]]></title>
            <link rel="alternate" href="https://freek.dev/2577-debugging-livewire-components-using-ray" />
            <id>https://freek.dev/2577</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Debugging Livewire components using Ray</p>


<a href='https://myray.app/blog/11-debugging-livewire-components-using-ray'>Read more</a>]]>
            </summary>
                                    <updated>2023-10-10T14:30:00+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Building a Subscription Form with Laravel Volt & Mailcoach]]></title>
            <link rel="alternate" href="https://freek.dev/2575-building-a-subscription-form-with-laravel-volt-mailcoach" />
            <id>https://freek.dev/2575</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Discover how you can build a subscription form with Laravel Volt and Mailcoach.</p>


<a href='https://mailcoach.app/blog/36-building-a-subscription-form-with-laravel-volt-mailcoach'>Read more</a>]]>
            </summary>
                                    <updated>2023-10-09T14:30:00+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Building a flexible yet abstract external integrations structure]]></title>
            <link rel="alternate" href="https://freek.dev/2572-building-a-flexible-yet-abstract-external-integrations-structure" />
            <id>https://freek.dev/2572</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>In this post we'll describe how we created a flexible yet abstract external integrations structure for Flare.</p>


<a href='https://flareapp.io/blog/67-building-a-flexible-yet-abstract-external-integrations-structure'>Read more</a>]]>
            </summary>
                                    <updated>2023-09-27T14:48:37+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Unorthodox Eloquent]]></title>
            <link rel="alternate" href="https://freek.dev/2560-unorthodox-eloquent" />
            <id>https://freek.dev/2560</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Muhammed's been working with Eloquent for over half a decade now, and it's time to share his bag of tricks. Buckle up, it'll be a good ride!</p>


<a href='https://muhammedsari.me/unorthodox-eloquent'>Read more</a>]]>
            </summary>
                                    <updated>2023-09-18T09:33:03+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel 11: Release Date and New Features]]></title>
            <link rel="alternate" href="https://freek.dev/2561-laravel-11-release-date-and-new-features" />
            <id>https://freek.dev/2561</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>It's the last quarter of the year and I'm getting more and more excited about the upcoming Laravel 11 release. Let's wrap it up!</p>


<a href='https://alexandergaal.at/laravel-11'>Read more</a>]]>
            </summary>
                                    <updated>2023-09-18T09:02:33+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Why error tracking is crucial for your application]]></title>
            <link rel="alternate" href="https://freek.dev/2557-why-error-tracking-is-crucial-for-your-application" />
            <id>https://freek.dev/2557</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Alex and Christoph explain why error tracking is crucial for your application.</p>


<a href='https://flareapp.io/blog/66-why-error-tracking-is-crucial-for-your-application'>Read more</a>]]>
            </summary>
                                    <updated>2023-09-15T14:30:00+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[The State of Laravel 2023 results]]></title>
            <link rel="alternate" href="https://freek.dev/2556-the-state-of-laravel-2023-results" />
            <id>https://freek.dev/2556</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Here are the result on the survey on the Laravel ecosystem run by Tobias Petry.</p>


<a href='https://stateoflaravel.com/results'>Read more</a>]]>
            </summary>
                                    <updated>2023-09-14T15:00:00+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Nginx Unit with Laravel and PHP]]></title>
            <link rel="alternate" href="https://freek.dev/2559-nginx-unit-with-laravel-and-php" />
            <id>https://freek.dev/2559</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>How to use Nginx Unit to server your Laravel application. It turns out, we can get rid of PHP-FPM, and run our apps more efficiently. We see how, and go over the pros and cons.</p>


<a href='https://fideloper.com/nginx-unit-with-laravel-and-php'>Read more</a>]]>
            </summary>
                                    <updated>2023-09-14T14:30:00+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Workbench App for Packages]]></title>
            <link rel="alternate" href="https://freek.dev/2558-workbench-app-for-packages" />
            <id>https://freek.dev/2558</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>A new package by Mior called Workbench lets us set up an example Laravel app inside our packages. This Workbench app can serve as documentation of how the package integrates with a Larave app. Plus, we can use the Workbench models, controllers, routes, etc., in our package's tests and quickly run the Workbench app in the browser!</p>


<a href='https://world.hey.com/tonysm/workbench-app-for-packages-9372288e'>Read more</a>]]>
            </summary>
                                    <updated>2023-09-13T12:11:46+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Fast database queries are not always better]]></title>
            <link rel="alternate" href="https://freek.dev/2552-fast-database-queries-are-not-always-better" />
            <id>https://freek.dev/2552</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Tim McDonald explains Laravel's cool <code>whenQueryingForLongerThan</code> method.</p>


<a href='https://timacdonald.me/fast-database-queries-are-not-always-better/'>Read more</a>]]>
            </summary>
                                    <updated>2023-09-07T14:30:00+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Why does a backslash prefix improve PHP function call performance]]></title>
            <link rel="alternate" href="https://freek.dev/2551-why-does-a-backslash-prefix-improve-php-function-call-performance" />
            <id>https://freek.dev/2551</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Personally, I've never done this, as it feels like a micro-optimizations, but still good to know.</p>


<a href='https://www.deviaene.eu/articles/2023/why-prefix-php-functions-calls-with-backslash/'>Read more</a>]]>
            </summary>
                                    <updated>2023-09-06T17:10:14+02:00</updated>
        </entry>
    </feed>
