PHP Reddit – Telegram
PHP Reddit
34 subscribers
286 photos
36 videos
24.7K links
Channel to sync with /r/PHP /r/Laravel /r/Symfony. Powered by awesome @r_channels and @reddit2telegram
Download Telegram
Guidance on how to refactor a legacy (>10 years old) application?

I'm a junior dev with only basic knowledge of modern PHP (since all main webdev related languages tend to work the same after all) and I can understand what a modern app works (even if I still have to grasp what some PSR are about).

That said, my first ever "real job", after a short internship as a NET6 dev, will be to help and refactor an old application made in PHP5 and with hundreds of files mixing rendering, queries and buisness logic.

The app is very delicate and manages millions of dollars in transactions daily so it's really important that nothing breaks.

Conceptually I know how one should approach the refactoring: modularize the pages in an MVC like architecture and use the legacy php files as controllers, add testing (and perhaps introduce Twig instead of relying on string manipulation or even a framework like Symphony to avoid reinventing the wheel on routing/controllers and security?) but as you may imagine, for a jr like me it feels also really overwhelming, do you have any book/course you think may help me approach this challenge?

I'm still thinking about grabbing a course on Udemy to learn modern PHP development first thing first lol but refactoring feels really intimidating, like "correcting" another developer with much more experience than you

https://redd.it/1pahjaa
@r_php
Weekly /r/Laravel Help Thread

Ask your Laravel help questions here. To improve your chances of getting an answer from the community, here are some tips:

What steps have you taken so far?
What have you tried from the documentation?
Did you provide any error messages you are getting?
Are you able to provide instructions to replicate the issue?
Did you provide a code example?
Please don't post a screenshot of your code. Use the code block in the Reddit text editor and ensure it's formatted correctly.

For more immediate support, you can ask in the official Laravel Discord.

Thanks and welcome to the r/Laravel community!

https://redd.it/1paotb4
@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/1pb3332
@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/1pb640g
@r_php
We built an AI powered PHP framework

Hey everyone

We’ve been working on a new PHP framework and wanted to share it here ! The idea was to combine the best of both worlds : Laravel and Symfony, to create something that feels like us.
One of the things we are really excited about is that we integrated a bridge between Symfony AI and our framework, so you can use AI directly inside the framework. Our goal is to make it easier to use AI in real projects without a lot of work.
We’d love to hear your thoughts, feedback or suggestions for improvements. We still working on it and it is challenging !
Thanks in advance !

https://github.com/doppar/doppar

https://redd.it/1pbgtkq
@r_php
Laravel Octane + Multi-tenancy + Yajra Datatables: Second tenant can't load data (state leaking issue)

Hey everyone, I'm stuck with a tricky state leaking problem and hoping someone has dealt with this scenario before.

**My Stack:**

* Laravel with Swoole via Octane
* Multi-tenancy using `stancl/tenancy` (archtechx/tenancy)
* Redis for cache with tenant-specific prefixes
* Yajra Datatables for server-side processing

**The Problem:**
When the **first tenant** logs in after `octane:reload`, everything works perfectly - all datatables load data correctly. However, when a **second tenant** logs in (using the same worker/PID), some datatables simply don't return data even though the records exist in their database. It's not all datatables - some work fine, but specific ones consistently fail for the second tenant.

**What I've Tried:**

* Enabled `RedisTenancyBootstrapper` and `CacheTenancyBootstrapper` in tenancy config
* Set `persistent => false` in Redis connection config
* Added `Redis::purge()` in `TenancyBootstrapping` event
* Used `app()->forgetInstance()` for redis, cache, and [cache.store](http://cache.store)
* Added Yajra classes to Octane's `flush` array
* Created middleware to reset datatables instances per request
* Verified Redis keys have correct tenant prefixes (they do!)

**Debug Info:**

* Logs confirm the tenant boots correctly with the right prefix
* Same worker PID serves both tenants (expected with Octane)
* Redis disconnect/purge logs appear correctly
* The issue is NOT with all datatables, only specific ones

**My Theory:**
Since Redis isolation seems correct (keys have proper prefixes), I suspect the Yajra Datatables service is holding onto the `Request` object or query state from the first tenant, even after attempting to flush it. But I can't pinpoint exactly what's being cached in memory.

Has anyone successfully run this exact combo (Octane + stancl/tenancy + Yajra Datatables)? Is there a known incompatibility or specific service that needs manual cleanup between tenant switches?

https://redd.it/1pbn84f
@r_php
Laravel is hiring a Community Manager!

Hey all! Admin approved message here. :)

Laravel is hiring a Community Manager to engage with the community on X, Discord, and here on Reddit of course.

Link to job →  https://apply.workable.com/laravel/j/D34D04F351/

You'd work closely with Marketing, Dev Rel, and our Product teams. It's great for someone who has a background in Laravel but doesn't want to spend their whole day in the code mines anymore.

We also have a few other roles open if that one doesn't strike your fancy. Feel free to DM me me if you have questions or just comment here.



https://redd.it/1pbrjfu
@r_php
Literature

It’s been a while since I’ve looked at any Laravel books. What are the current books out there for building modern applications using best practices?

https://redd.it/1pc4lul
@r_php
Using landlock in a php noscript

There's a maturing API in Linux called landlock. It looks really promising as a way for applications to state their access intentions and then lock themselves into that.

Based on dealing with past PHP exploits, this would be a great additional way to limit access to the filesystem and to the network in a way that would be another speed bump for the nefarious out there.

However, the settings remain active for a thread/process. I haven't really dug into the weeds on low level php deployments. Do the usual deployment models launch threads/processes for each noscript or use a thread/process pool? If the latter, this wouldn't work.

https://redd.it/1pc4nwb
@r_php
What’s one “unpopular opinion” you have about modern PHP development?

I feel like everyone talks about frameworks, performance, and best practices, but PHP devs rarely share the real hot takes. So I’m curious:

What’s one opinion you have about PHP that most devs would probably disagree with?

https://redd.it/1pc6c4v
@r_php
ANN Restler v6.0.0: Zero-Boilerplate PHP REST API Framework with Async Support

Hi r/PHP! 👋

We're excited to announce Restler v6.0.0, a complete rebuild of our PHP REST API framework that's been in production since 2010.

# What's Restler?

Restler is for developers who want to build REST APIs in PHP without fighting boilerplate. You write a class, Restler handles the rest:

class Products {
function get(int $id): array {
return Database::findProduct($id);
}
}

$api = new Restler();
$api->addAPIClass(Products::class);
$api->handle();

That's it.

Routes? Auto-generated.
Validation? Type hints + PHPDoc.
Documentation? OpenAPI 3.0 auto-generated.
Content negotiation? JSON, XML, CSV, Excel—automatic.
HTTP status codes? Correct ones, automatic.

# What's New in v6?

1. Async Performance

Swoole/ReactPHP support: 10-15x throughput vs traditional PHP-FPM
AWS Lambda/serverless ready (via Bref)
Same code works on all runtimes

2. Modern PHP 8+

Full PHP 8.0-8.5 support
Strict typing throughout
PSR-7 HTTP messages
PSR-11 container

3. Security First

Replaced unsafe `unserialize()` with JSON (prevents object injection)
JSONP callback validation
Template variable hardening
Professional security policy

4. Multi-Format

GET /api/products/123 → JSON
GET /api/products/123.xml → XML
GET /api/products/123.csv → CSV
GET /api/products/123.xlsx → Excel

One class. Every format.

5. Complete Documentation

12 comprehensive guides
18+ working examples
Migration guide from v5
Security best practices

# Comparison with Other Frameworks

|Feature|Restler|Laravel|Symfony|
|:-|:-|:-|:-|
|Boilerplate (LOC)|5|50+|60+|
|Learning curve|Minimal|Steep|Steep|
|Auto-docs||🔨|🔨|
|Multi-format||🔨|🔨|
|Type safety||||
|Async ready||||
|For APIs| Primary| Secondary| Secondary|

Note: This is our take. Other frameworks are great for different use cases.

# Upgrading from v5

If you're using v5:

Minimal breaking changes
Migration guide: https://github.com/Luracast/Restler/blob/master/MIGRATION.md
Most APIs migrate in 2-4 hours
Same simplicity, better performance

# Getting Started

composer require luracast/restler:^6.0

Full docs: https://github.com/Luracast/Restler

# The Numbers

15 years in production
500K+ Packagist downloads
1,300+ GitHub stars
98.8% test coverage
Zero CVEs in recent versions
10-15x performance with async (Swoole)

# Community & Support

Questions? [GitHub Discussions](https://github.com/Luracast/Restler/discussions)
Issues? GitHub Issues
Security? [SECURITY.md](https://github.com/Luracast/Restler/blob/master/SECURITY.md)

# Why This Matters

If you've been frustrated with:

Boilerplate in your REST API framework
Slow performance with traditional PHP-FPM
Overhead of learning complex frameworks just for an API
Documentation that's outdated or incomplete

Restler might be the framework you've been looking for.

We're not trying to replace Laravel/Symfony (great frameworks!). We're offering a focused, simple alternative for API development.

# Questions I Expect

Q: Why not just use Laravel/Symfony?
A: For APIs, Restler does more with less. But Laravel/Symfony are great for web apps.

Q: Is it battle-tested?
A: 15 years in production. Fortune 500 companies use it. Zero recent CVEs.

Q: What if I need a web UI?
A: Restler focuses on APIs. Use it with a separate frontend (React, Vue, etc.).

Q: How hard is the migration from v5?
A: 2-4 hours for typical APIs. See migration guide.

Q: Can I use it with Laravel?
A: Restler is standalone. But you could use both (Restler with Laravel components).

Q: What about GraphQL?
A: Built-in support in v6.

# Links

GitHub:
https://github.com/Luracast/Restler
Packagist: [https://packagist.org/packages/luracast/restler](https://packagist.org/packages/luracast/restler)
Documentation: https://github.com/Luracast/Restler/blob/master/README.md
Blog Post: [https://luracast.com/blog/restler-v6-launch](https://luracast.com/blog/restler-v6-launch) (link to your blog)
Discussions: https://github.com/Luracast/Restler/discussions

We'd love your feedback! Ask questions, share experiences, or tell us what you think.

Excited to hear what you build with Restler v6! 🚀

# P.S.

If you try it, drop a comment here. Love it? Hate it? Somewhere in between? Let us know!

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