{"id":"https:\/\/freek.dev\/feed\/php","link":{"@attributes":{"href":"https:\/\/freek.dev\/feed\/php","rel":"self"}},"title":{},"subtitle":"All PHP blogposts on freek.dev","updated":"2026-06-03T14:30:27+02:00","entry":[{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3127-the-reason-i-love-tempest-for-apis"}},"id":"https:\/\/freek.dev\/3127","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-06-03T14:30:27+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3125-using-property-hooks-in-php"}},"id":"https:\/\/freek.dev\/3125","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-06-01T14:30:31+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3124-validating-distinct-data-in-requests"}},"id":"https:\/\/freek.dev\/3124","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-05-31T14:30:37+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3133-the-stack-behind-there-there"}},"id":"https:\/\/freek.dev\/3133","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-05-30T10:13:56+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3128-an-update-on-composer-packagist-supply-chain-security"}},"id":"https:\/\/freek.dev\/3128","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-05-27T21:09:01+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3074-using-the-adr-actiondomainresponder-pattern-in-laravel"}},"id":"https:\/\/freek.dev\/3074","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-05-12T14:30:29+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3096-flaky-test-retries-in-pest-v450"}},"id":"https:\/\/freek.dev\/3096","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-05-10T14:30:29+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3113-idempotency-what-why-and-how"}},"id":"https:\/\/freek.dev\/3113","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-05-07T14:33:25+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3118-searching-multiple-columns-with-one-url-parameter-in-laravel-query-builder"}},"id":"https:\/\/freek.dev\/3118","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-05-04T10:09:06+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3101-rbac-in-laravel-a-practical-deep-dive"}},"id":"https:\/\/freek.dev\/3101","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-05-01T14:40:29+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3112-announcing-laravel-sluggable-v4-with-self-healing-urls"}},"id":"https:\/\/freek.dev\/3112","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-04-29T16:36:36+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3070-validating-array-inputs-in-laravel-without-the-n1"}},"id":"https:\/\/freek.dev\/3070","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-04-16T14:22:28+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3066-why-use-static-closures"}},"id":"https:\/\/freek.dev\/3066","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-04-14T12:30:26+02:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3021-liminal-a-full-laravel-playground-in-your-browser"}},"id":"https:\/\/freek.dev\/3021","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-03-25T13:30:28+01:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3058-whats-new-in-laravel-activitylog-v5"}},"id":"https:\/\/freek.dev\/3058","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-03-25T11:39:31+01:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3020-moving-from-phpstorm-to-zed-for-laravel-development"}},"id":"https:\/\/freek.dev\/3020","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-03-23T13:30:28+01:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3019-chat-with-your-documents-a-practical-guide-to-rag-using-the-laravel-ai-sdk"}},"id":"https:\/\/freek.dev\/3019","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-03-20T13:30:26+01:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3018-build-an-mcp-server-with-laravel"}},"id":"https:\/\/freek.dev\/3018","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-03-19T13:30:29+01:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3052-laravel-query-builder-v7-a-must-have-package-for-building-apis-in-laravel"}},"id":"https:\/\/freek.dev\/3052","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-03-16T14:57:04+01:00"},{"title":{},"link":{"@attributes":{"rel":"alternate","href":"https:\/\/freek.dev\/3048-how-to-easily-access-private-properties-and-methods-in-php"}},"id":"https:\/\/freek.dev\/3048","author":{"name":{},"email":{}},"summary":{"@attributes":{"type":"html"}},"updated":"2026-03-12T11:39:39+01:00"}]}