PHP Reddit – Telegram
PHP Reddit
34 subscribers
288 photos
36 videos
24.8K links
Channel to sync with /r/PHP /r/Laravel /r/Symfony. Powered by awesome @r_channels and @reddit2telegram
Download Telegram
Votes needed for a VS Code feature request: Node filter for objects variables on debug hover

I requested this feature from the VS Code repo. Now, it needs 20 upvotes within 30 days to start development. If you find this feature helpful, please open the request and upvote. Thanks

https://github.com/microsoft/vscode/issues/279795

https://redd.it/1pznecw
@r_php
My "Ship Factory" for 12 SaaS products in 12 months (Laravel Octane + Traefik on VPS). Overkill?

I'm starting a challenge to ship 12 products in 2026. To avoid burnout, I need zero-friction deployments.

I skipped Vercel/Forge and built this on a $10 OVH VPS:

Backend: Laravel 12 + Octane (Swoole)
Frontend: Nuxt 4 SSR
Routing: Docker Compose + Traefik (auto SSL).
CI/CD: GitHub Actions.

A push to main builds the container, pushes to GHCR, and updates the stack on the VPS in < 2 mins.

Am I setting myself up for pain managing 12 Docker stacks manually over 12 months, or is this the optimal path for cost/performance control vs a PaaS?

https://preview.redd.it/ljl1jfpa1fag1.png?width=1024&format=png&auto=webp&s=fcec5c7398ff25c637ec7557c3a33316bdfd6a51



https://redd.it/1pzvfu8
@r_php
Which translation style do you use?

In Laravel we know multiple ways to handle translations. Are you a .json or a .php kinda person. Do you have multi layer directories or keep it simple?

Personally I have always done the php file with multiple directories per livewire component or domain of the application.

https://redd.it/1q09zk6
@r_php
Yii3 is released

It happened! Yii3 is officially released after years of intensive development and polishing.

Yii3 landing page
Official announcement
Documentation
• Application templates: Web, API, Console
• Demo applications: Blog (Layered DDD), Diary (Vertical slices, Active Record)

We're pretty sure the Yii3 codebase will serve us well in at least the next 10 years or even more.

Merry Christmas and Happy New Year! Enjoy! 🎉

https://redd.it/1q0ceia
@r_php
My architecture decision while building an Audit Bundle for Symfony

While building an audit trail bundle for Symfony, I had to make a key architectural decision:
how to capture accurate entity changes without slowing down the main request or coupling the audit logic too tightly with Doctrine internals.

I ended up designing a split-phase audit architecture.
You can find the complete article here


If you’re interested, you can also check out the code repository here


suggestions are very welcome.

https://redd.it/1q0f0ft
@r_php
Refactoring column names

I recently had to refactor a single column in a very large app (thousands of routes, 270 models) and wondered if there was a better way to track usage of a single column

My specific scenario was a nightmare because what I wanted to do was refactor a column called "type" to be called "type_id" so that $model->type could return an object, where as previously it just returned a string, while the original string ID could still be accessible via ->type_id.

Of course it could have been possible to refactor in a different way, keep the "type" column and have the object available under another name, but other tables generally used the syntax of ->object and ->object_id. Either way lets ignore that and focus on the refactor.

Obviously doing a search for "type" returned thousands of results throughout the app.

Most of the time these were either prefixed by -> or wrapped in single quotes e.g. $model->type or $array['type']. Sometimes it might be a property in a class e.g. CreateMyModel() accepting a $type argument. Other times it was not explicit that it was being used e.g. array_keys($model->getCasts) but I think most of these instances were caught by renaming in the one place it was explicitly defined (e.g. the casts array).

Nonetheless I could not figure a means of doing this refactor other than searching the entire codebase for "type" and going through every single result line by line, what I actually did was use grep to create a txt file and then go through line by line marking each one with * at the start of the line in the text file when it had been checked. Some of these I could tell just by eyeballing the response from grep itself whether it was related so this was fairly quick to just look through the txt file.

But is there a better way?

I started dreaming of one day having a project where all columns where defined in constants so I could easily find all usages of Model::column_type although I can imagine this would make the code feel very bloated and i've never seen anyone actually attempt this, probably for good reason.

It would have been nice if my Model would have had a $type property in the class itself rather than all the Laravel magic. But then again I would still have had to go through my grep approach to find all the ways in which it was used.

It may be possible to use an LLM but i've no idea how people give an entire massive monolith to an LLM and I wouldn't totally trust it to not make any mistakes checking thousands of occurrences so I would still have to go through every single one, one by one.

The only real conclusion I could draw was that (1) my grep to text file approach wasn't THAT bad and (2) the most important thing would be having full test coverage. If I had that in theory I could run the migration to rename the column and then have the test populate a list of every place that was affected. Although I don't think i'd ever be confident enough to trust and not do the grep method.

But yes, I assume many, many people have faced this problem and wondered how people approach it and if there's some amazing tool or technique i'm missing?

If anyone is not sure what I mean about the grep you can run these commands in a terminal:

grep -irn "type" ./app ./resources/views ./routes ./database > ./type_usages.log

And get results like this into a text file

>./app/Console/Kernel.php:68:        $schedule->command('videos:get-channel-stats --type=daily')

>./app/Console/Kernel.php:73:        $schedule->command('videos:get-channel-stats --type=weekly')

>./app/Console/Kernel.php:78:        $schedule->command('videos:get-channel-stats --type=monthly')

>./app/Console/Kernel.php:83:        $schedule->command('videos:get-video-stats --type=daily')

>./app/Console/Kernel.php:88:        $schedule->command('videos:get-video-stats --type=weekly')

>./app/Console/Kernel.php:93:        $schedule->command('videos:get-video-stats --type=monthly')

Of course you can use find within your IDE, but the benefit of this is having a txt file where you can tick them off
one by one.

You could also put it into a CSV for use with Excel or any other tool like so:

echo "File Path,Line Number,Snippet" > type_usages.csv && grep -rin "type" ./app ./resources/views ./routes ./database | sed 's/"/""/g' | sed -E 's/^([^:]+):([^:]+):(.*)$/"\1",\2,"\3"/' >> type_usages.csv

https://redd.it/1q0hzag
@r_php
Anyone any experience with Mago - an alternative for PHP-CS-Fixer, Psalm, PHPStan, and PHP_CodeSniffer?

I just came across this project and it seems very interesting. My current setup includes:

* PHP-CS-Fixer
* PHPStan
* Rector

I'm wondering if Mago might be a tool worth looking into. Anyone has any experience with it? I'd appreciate any feedback

https://redd.it/1q0yrto
@r_php
Detecting unauthorized tampering or modifications in Symfony.

Happy New Year!

Starting the first day of the year by shipping a new feature Verify Audit Log Integrity Ensure the integrity of your audit logs by detecting any unauthorized tampering or modifications. This command validates cryptographic hashes to identify compromised records and ensure trustworthiness of audit data.

https://preview.redd.it/0gn2z5inqrag1.png?width=794&format=png&auto=webp&s=92ed22bd55115c61ce92d7184952a4772c510ecd

You can find the code here: AuditTrailBundle

https://redd.it/1q18yoq
@r_php
When did you know you could write your Entity as simple as this ?
https://redd.it/1q1r1pi
@r_php
Open Source NovaRadio CMS – A modern, all-in-one management system for internet radio (AzuraCast integrated)

Hi everyone! 👋

I’ve just released the first version (v0.1.0) of NovaRadio CMS – a professional Content Management System designed specifically for internet radio stations.

I’m a radio enthusiast and developer, and I noticed there was a gap for a modern, PHP 8.4-based CMS that plays nicely with AzuraCast.

# 🚀 Key Features in the First Version:

Full AzuraCast Integration: Manage stations, API keys, and streams directly.
DJ & Admin Panels: Separate dashboards for DJs to manage their shows without needing full AzuraCast access.
Real-Time Interaction: AJAX-powered live chat, song requests, and dedications.
Content Suite: Manage shows, schedules, podcasts, blog posts, events, and even a simple merch shop.
Listener Engagement: Polls, contests, music charts, and song history.
Branding & Customization: Light/Dark mode, custom widgets, and full SEO control.

# 🛠 Tech Stack:

PHP 8.4+ (utilizing modern features)
MariaDB / MySQL
Vanilla JS & CSS3 (keeping it lightweight)
Docker-friendly

# 🔗 Links:

GitHub Repository: [https://github.com/novik133/NovaRadio](https://github.com/novik133/NovaRadio)
Live Demo: https://novikradio.com

Note: This is the very first version (v0.1.0). It’s functional and feature-rich, but I’m actively looking for feedback, bug reports, and suggestions for future updates.

Feel free to check it out, star the repo if you like it, and let me know what you think!

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