PHP Symfony Microservice with gRPC: A Practical Guide
Post: https://albertcolom.com/posts/php-symfony-microservice-with-grpc-a-practical-guide/
GirHub: https://github.com/albertcolom/symfony-grpc
https://redd.it/1pzr6rh
@r_php
Post: https://albertcolom.com/posts/php-symfony-microservice-with-grpc-a-practical-guide/
GirHub: https://github.com/albertcolom/symfony-grpc
https://redd.it/1pzr6rh
@r_php
️Albert Colom
PHP Symfony Microservice with gRPC: A Practical Guide
Learn how to build a PHP Symfony microservice with gRPC in this practical guide. Explore step-by-step instructions to set up, implement, and optimize gRPC for fast, scalable microservices in 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
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
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
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
Reddit
From the laravel community on Reddit
Explore this post and more from the laravel community
20 Years of Symfony: A Gift for the Community✨
https://symfony.com/blog/20-years-of-symfony-a-gift-for-the-community?utm_medium=feed&utm_source=Symfony%20Blog%20Feed
https://redd.it/1q0aah8
@r_php
https://symfony.com/blog/20-years-of-symfony-a-gift-for-the-community?utm_medium=feed&utm_source=Symfony%20Blog%20Feed
https://redd.it/1q0aah8
@r_php
Symfony
20 Years of Symfony: A Gift for the Community✨ (Symfony Blog)
To celebrate the holidays and 20 years of Symfony, we’re offering a special gift to the community 🎁 Watch Fabien Potencier’s keynote “20 Years of Symfony, What’s Next?” — free and avail…
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
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
Yiiframework
Yii3 Framework
PHP framework for rapid development of modern applications.
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
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
Medium
Designing a Split-Phase Audit Architecture for Symfony
Building a Production-Ready Audit Trail Without Compromising Performance
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
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
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.
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
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
It would have been nice if my Model would have had a
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:
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
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.logAnd 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:
https://redd.it/1q0hzag
@r_php
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.csvhttps://redd.it/1q0hzag
@r_php
Reddit
From the laravel community on Reddit
Explore this post and more from the laravel community
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
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
Reddit
From the PHP community on Reddit
Explore this post and more from the PHP community
Lychee 7 is released! FrankenPHP, Webshop & background processing
https://lycheeorg.dev/2025-12-31-version-7/
https://redd.it/1q1281q
@r_php
https://lycheeorg.dev/2025-12-31-version-7/
https://redd.it/1q1281q
@r_php
Lychee
Version 7 released!
Another year, another major release for Lychee! Version 7 is here with exciting new features and improvements.
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
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
Musings and realizations from 2025 as a Laravel developer
https://cosmastech.com/2026/01/01/musings.html
https://redd.it/1q17w2j
@r_php
https://cosmastech.com/2026/01/01/musings.html
https://redd.it/1q17w2j
@r_php
cosmastech
Musings on 2025
As 2025 wraps up, I wanted to touch on some broader topics that I thought deeply about this year.
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
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
GitHub
GitHub - novik133/NovaRadio: Modern Radio Management System featuring: Multi-station AzuraCast support 📻, Real-time Chat 💬, Advanced…
Modern Radio Management System featuring: Multi-station AzuraCast support 📻, Real-time Chat 💬, Advanced Scheduling 📅, Podcasts & Blog 🎙️, Song Requests/Dedications 🎶, and a full Admin/DJ Da...
Sunsetting Enlightn
2 months ago, u/ShadowSpade wondered what happened to Enlightn, this week I received this email:
>Sunsetting Enlightn
>After much thought and consideration, we are sunsetting Enlightn. It will be shutting down starting Jan 2026. With rapid advances in AI powered code assistants, it has become clear that they now cover most of the use cases Enlightn was built for.
>Recently purchased licenses have been fully refunded. Feel free to email us at sales at laravel-enlightn dot com for any questions or refund requests if we missed on refunding your recently purchased license. The open source package on Github will stay available for anyone who finds it useful. Thank you for the support and for trusting Enlightn to help improve your apps over the years!
https://redd.it/1q1tal9
@r_php
2 months ago, u/ShadowSpade wondered what happened to Enlightn, this week I received this email:
>Sunsetting Enlightn
>After much thought and consideration, we are sunsetting Enlightn. It will be shutting down starting Jan 2026. With rapid advances in AI powered code assistants, it has become clear that they now cover most of the use cases Enlightn was built for.
>Recently purchased licenses have been fully refunded. Feel free to email us at sales at laravel-enlightn dot com for any questions or refund requests if we missed on refunding your recently purchased license. The open source package on Github will stay available for anyone who finds it useful. Thank you for the support and for trusting Enlightn to help improve your apps over the years!
https://redd.it/1q1tal9
@r_php
Reddit
From the laravel community on Reddit
Explore this post and more from the laravel community