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
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
Olá, estou desenvolvendo essa API. Gostaria que avaliassem e me desse uma senioridade de acordo com o código e se me contratariam ou não, obrigado.

Link repo: https://github.com/kakabraga/laravel-api

https://redd.it/1sjuy8u
@r_php
Weekly Ask Anything Thread

Feel free to ask any questions you think may not warrant a post. Asking for help here is also fine.

https://redd.it/1sjz2v2
@r_php
PHP app showing corrupted numeric values (e.g. 262145100 instead of 100) on server but works locally

Hey everyone,

I’m stuck with a weird issue in my PHP + MySQL project.

Problem: On localhost everything works fine. But on live server, numeric values (wallet amounts) get corrupted.

Example: Expected: 100 Actual: 262145100

Details:

* Core PHP (no framework)
* MySQL database
* Razorpay payment integration
* Same codebase used locally and on server
* Database values were getting stored incorrectly earlier (possibly due to wrong amount conversion)

What I’ve checked:

* PHP version & extensions (all good)
* Output buffering / encoding
* Session handling
* API responses

Current suspicion:

* Some kind of data corruption during amount conversion OR earlier stored bad data affecting calculations

Has anyone faced something like this? Could it be:

* Encoding / binary issue?
* Incorrect multiplication (paise conversion)?
* Hidden characters or output buffer corruption?

Any help would be really appreciated 🙏

https://redd.it/1sk3tl6
@r_php
How to use different schemas with Doctrine / where to find information?

I have difficulties finding information on how to handle schemas with Symfony and Doctrine. I know I can set the Database schema with:

#ORM\Table(name: 'table_name', schema: 'schema_name')

But setting the schema for every table seems "not optimal"? There has to be a more general approach, right? Also why can I not find any information about schema handling with doctrine? Do you all just use the default schema for every table? That cant be right.

FYI, I want to use/learn Postgres, but I read that using the public schema can be a security issue. Also I want to just split the prod tables and audit tables. Thats why I wanted to use multiple schemas.

So I come to you, Symfony gods, please help me on the way to enlightment.

https://redd.it/1sk4kfs
@r_php
Weekly help thread

Hey there!

This subreddit isn't meant for help threads, though there's one exception to the rule: in this thread you can ask anything you want PHP related, someone will probably be able to help you out!

https://redd.it/1sk28zm
@r_php
Named Arguments Make PHP More Readable and a Refactoring Nightmare at the Same Time

Ever since named arguments landed in PHP 8.0, I've gone back and forth on whether they're actually a net positive.

On one hand, this is genuinely nicer to read:

createUser(
name: 'John',
email: '[email protected]',
role: 'admin'
);


On the other hand, the moment you rename that parameter, even inside a private method, something somewhere breaks. And good luck catching it without full test coverage.

The problem is that parameter names were never part of the contract before. They were implementation details. Named arguments quietly promoted them to public API, and most codebases were not ready for that.

It gets worse in teams. One developer uses named arguments everywhere for readability. Another avoids them entirely. Now your codebase is inconsistent and every PR review turns into an argument about it.

I still use them, but only at the call site of functions I do not own like built-ins and third-party libraries. For my own code that is deployed in prod, I have mostly stopped.

So where do you actually draw the line?

https://redd.it/1skchzn
@r_php
I built an open source WebSocket server in Go that's Pusher-compatible — self-host free forever, or use the managed cloud tier

Hey r/laravel,

I've been building Relay — an open source WebSocket server written in Go that's fully Pusher-compatible. I wanted to share it here because it solves a real problem I kept running into.

The problem: Reverb is great if you're on a pure Laravel monolith. But if your team runs Laravel + Next.js, or Laravel + a Node worker, or anything outside a single Laravel app — Reverb can't serve the non-Laravel parts. Relay can.

What Relay is:

Single Go binary, no runtime dependencies
Fully Pusher-protocol compatible — swap credentials, no code changes
Works with Laravel, Next.js, Rails, Django, Node, and any other language with a Pusher SDK
Multi-app support — one server, multiple projects
Built-in Channel Inspector — live view of active channels and event payloads
Self-host free forever on a $5 VPS

The managed cloud tier (Relay Cloud) is optional. Free hobby plan, $19/mo Startup, $49/mo Business. If you outgrow it, move to self-hosting with two env var changes. Same binary, no code changes.

First-party Laravel package:

bash

composer require darknautica/relay-cloud-laravel

Two env vars and broadcasting works. No config/broadcasting.php editing required.

Performance: At 1,000 concurrent connections, Relay used \~18% CPU and 38MB RAM. Reverb used \~95% CPU and 63MB RAM on equivalent hardware. Full benchmark post here: https://relaycloud.dev/blog/relay-vs-reverb-benchmark

Links:

Site + managed cloud: [https://relaycloud.dev](https://relaycloud.dev)
Open source server: https://github.com/DarkNautica/Relay
Laravel package: [https://packagist.org/packages/darknautica/relay-cloud-laravel](https://packagist.org/packages/darknautica/relay-cloud-laravel)
Docs: https://relaycloud.dev/docs

Happy to answer any questions. Would love feedback from anyone who tries it.

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