PHP Reddit
31 subscribers
308 photos
40 videos
25.3K links
Channel to sync with /r/PHP /r/Laravel /r/Symfony. Powered by awesome @r_channels and @reddit2telegram
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
[Showcase] I got tired of building SaaS billing from scratch, so I made an open-source Laravel package with a Filament admin panel. Sets up in 15 mins.

https://redd.it/1shjxj5
@r_php
Tired of terminal hopping? I built a native GNOME extension to manage Symfony CLI servers 🐘🐧
https://redd.it/1shnh7v
@r_php
With PHP 8.4 Property Hooks, Should Booleans Be Properties or Methods?

PHP 8.4 property hooks let us put logic directly inside properties, and it's forcing me to revisit a convention I thought was settled: should boolean-returning values be properties or methods?

$user->isActive   // property?
$user->isActive() // method?


The old rule felt obvious properties hold state, methods hold logic. But now that properties can hold logic, I'm not sure that rule holds anymore.

What makes it worse is naming. isActive, hasPermission, canAccess all read like questions, and questions feel like they belong behind parentheses. Seeing $user->isActive without them genuinely bothers me and even if it works.

So which side are you on, and has PHP 8.4 changed anything for you?



https://redd.it/1shstdr
@r_php
What distroless image do you guys use for PHP?

There don't seem to be many, and they seem like small projects. Do you have any recommendations?

^(\(I use Podman btw\))

https://redd.it/1sif09j
@r_php
Lemmon Validator: A Zod-inspired, type-safe validation library for PHP 8.3

Hey everyone,

I’ve been working on **Lemmon Validator**, a schema-first validation library that brings the fluent API patterns of TypeScript libraries like **Zod** and **Valibot** to modern PHP.

It is designed for developers who want a predictable, type-safe way to validate and transform input data while maintaining zero external dependencies.

# The Core Idea

Most validation in PHP happens against "loose" arrays. Lemmon Validator focuses on building a schema that not only validates but also **coerces** and **transforms** the data into a reliable state (either as a typed array or an object).

# Key Features:

* **Zod-inspired Fluent API:** Highly readable, chainable schema definitions.
* **Form-Safe Coercion:** A common pain point in PHP is handling HTML form inputs where an empty string (`''`) should be treated as `null` rather than `0` or `false`. Lemmon Validator handles this natively when `coerce()` is enabled.
* **Transformation Pipelines:** Use `transform()` to change types (e.g., String to DateTime) or `pipe()` for sanitization (e.g., trim/lowercase).
* **Nested Error Aggregation:** Deeply nested schemas return a structured error map, making it easy to map errors back to UI fields.
* **Zero Dependencies:** Lean, focused, and easy to drop into any project.

# Quick Example:

use Lemmon\Validator\Validator;

$schema = Validator::isAssociative([
'name' => Validator::isString()->notEmpty()->required(),
'email' => Validator::isString()->email()->required(),
'age' => Validator::isInt()->min(18)->coerce(),
'roles' => Validator::isArray()
->items(Validator::isString()->in(['admin', 'user']))
->default(['user']),
]);

try {
// $_POST: ['name' => 'John', 'email' => 'invalid', 'age' => '25']
$data = $schema->validate($_POST);
// $data is now a validated, coerced, and typed array
} catch (ValidationException $e) {
$errors = $e->getFlattenedErrors();
// Returns: [['path' => 'email', 'message' => 'Value must be a valid email address'], ...]
}

# Why PHP 8.3?

The library leverages modern PHP features like readonly properties, enums, and strict typing to ensure the internal engine is as robust as the schemas you build with it.

I'm looking for feedback on the API ergonomics and any specific "edge case" format validators you find yourself constantly rewriting.

**Repo:** [https://github.com/lemmon/validator-php](https://github.com/lemmon/validator-php)

Happy to answer any questions!

https://redd.it/1sj8lky
@r_php
Larabox, Alternate to Laragon/Xampp/Laravel herd

I have been working on an App (Larabox) for setting up local development stack, because Laragon has been plagued with annoying popups that shifts focus even from fullscreen apps and Laravel herd is now too limited for free.
The app contains bundled or minimal installer for PHP, Nginx, Mariadb, Postgres, Mailpit, Redis, Meiliseach and Nodejs with changeable versions and delta updates to binaries. I have not signed the app yet so smart screen warnings will be shown by windows.

If anyone wants to try it out, I'll appreciate the feedback or bug reports. You can download from Larabox.org

https://redd.it/1sjctdz
@r_php
I built a lightweight alternative to Laravel Horizon that works without Redis (SQS / DB / sync supported)

I built a small package for Laravel to monitor queues without being tied to Redis.

Horizon is great, but:

\- it requires Redis

\- it's a bit heavy for small projects

\- and it doesn’t really work if you're using SQS, database or sync drivers

In many cases, I just wanted to know:

\- did my jobs run?

\- which ones failed?

\- why did they fail?

So I made a lightweight solution:

\- works with any queue driver (Redis, SQS, database, sync)

\- tracks full job lifecycle (processing / success / failed)

\- shows retries and execution time

\- simple Blade dashboard out of the box

\- JSON API included (for custom frontends)

Setup is super simple:

composer require romalytar/yammi-jobs-monitoring-laravel

php artisan migrate

That’s it — you immediately get a UI at `/jobs-monitor`.

Would really appreciate any feedback

Especially what’s missing or what could be improved.

GitHub: https://github.com/RomaLytar/yammi-jobs-monitoring-laravel

https://redd.it/1sjf33x
@r_php
Laravel's wildcard validation is O(n²), here's a fix

I was profiling a slow import endpoint. 100 items, 47 fields each with exclude_unless and required_if. Endpoint took 3.4 seconds. I assumed database queries. Validation alone was 3.2s.

When you write items.*.name => required|string|max:255, Laravel's explodeWildcardRules() flattens data with Arr::dot() and matches regex patterns against every key. 500 items × 7 fields = 3,500 concrete rules, and the expansion is O(n²). Conditional rules like exclude_unless make it worse because they trigger dependent-rule resolution on every attribute.

I submitted 10 performance PRs to laravel/framework. Four merged, the six validation ones were all closed. So I built it as a package: laravel-fluent-validation.

Add use HasFluentRules to your FormRequest, keep your existing rules. The wildcard expansion is replaced with O(n) tree traversal. For 25 common rules it compiles PHP closures (is_string($v) && strlen($v) <= 255 instead of rule parsing + method dispatch + BigNumber). If the value passes, Laravel's validator never sees it. Fails go through Laravel for the correct error message. It also pre-evaluates exclude_unless/exclude_if before validation starts, so instead of 4,700 rules each checking conditions, the validator only sees the \~200 that actually apply.

class ImportRequest extends FormRequest
{
use HasFluentRules;
}

Benchmarks (CI, PHP 8.4, OPcache, median of 3 runs):

|Scenario|Laravel|With trait|Speedup|
|:-|:-|:-|:-|
|500 items × 7 simple fields|\~200ms|\~2ms|97x|
|500 items × 7 mixed fields (string + date)|\~200ms|\~20ms|10x|
|100 items × 47 conditional fields|\~3,200ms|\~83ms|39x|

It's already noticeable with a handful of wildcard inputs that each have a few rules. The package works with Livewire and Filament, is Octane-safe and has a large set of tests.

https://github.com/SanderMuller/laravel-fluent-validation

Performance issue tracked upstream: laravel/framework issue 49375

https://redd.it/1sjjv6e
@r_php
Laravel's wildcard validation is O(n²), here's a fix
/r/laravel/comments/1sjjv6e/laravels_wildcard_validation_is_on²_heres_a_fix/

https://redd.it/1sjk26q
@r_php
How is the junior php market in the US?

Job boards all over the place with some showing lots of listing and others barely showing any. Anyone here have some insights on the PHP market for juniors?

https://redd.it/1sjoys5
@r_php
rsync repositories?

Has PHP stopped filling the rsync repositories with PHP updates?

americas.rsync.php.net and rsync.php.net

I'm not seeing 8.5.5 or 8.4.20 on there.

https://redd.it/1sjnr7d
@r_php
Any Non-Slop Open Source Projects Looking For Contributors?

Looking to escape the professional drudgery that is the new "AI-first engineering", "agentic engineering", or whatever we're calling it these days. I have over a decade of professional experience, and I don't think I've contributed a single commit to an open source project. Are there any smaller, well-maintained projects that could use help from someone who knows better than to just dump a Claude-authored 45 file PR and call it a day?

https://redd.it/1sjtbxh
@r_php