PHP Reddit – Telegram
PHP Reddit
34 subscribers
289 photos
37 videos
24.8K links
Channel to sync with /r/PHP /r/Laravel /r/Symfony. Powered by awesome @r_channels and @reddit2telegram
Download Telegram
How I can inject extra logic queries on doctrine's schema:update

I want once I run:

php bin/console list doctrine:schema:update


Once an SQL query is generated, before printing it to generate extra SQL based on the already generated SQL. I am a situation in which the team work upon does not use db migrations (reasons uknown, no time to explain why)

I am into a situation in which I introduce upon entity a new column that is not null and unique:


I originally have this entity

declare(strict_types=1);

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

#[ORM\Entity]
class Coupon
{
public const PREFIX = 'cou';
#[ORM\Id]
#[ORM\Column(type: 'integer')]
#[ORM\GeneratedValue(strategy: 'AUTO')]
private $id;

#[ORM\Column(type: 'string', nullable: true)]
private $name;

public function __construct()
{
}

}


And the underlying table has already soem records:


id | name
--- | ---
1 | hello
2 | value

And I want to introduce a unique not null column named token:


declare(strict_types=1);

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

#[ORM\Entity]
class Coupon
{
public const PREFIX = 'cou';
#[ORM\Id]
#[ORM\Column(type: 'integer')]
#[ORM\GeneratedValue(strategy: 'AUTO')]
private $id;

#[ORM\Column(type: 'string', length: 255, unique: true)]
private string $token;

#[ORM\Column(type: 'string', nullable: true)]
private $name;

public function __construct()
{
}

}



But this need to be populated with a unique value before doctrine:schema:update generates the inique index.

Furthermore ci/cd pipeline that deploys it runs this command that updates the db:

php bin/console list doctrine:schema:update


Therefore I want this procedure to be automated. How can this be done? Is there a way to inject logic on doctrine:schema:update that generate extra sql on situations like this one?

https://redd.it/1mzump4
@r_php
How to use purely migrations for db setup on existing pre-populated dbs?

Currently I am using schema:update in order to setup the DB. I want to properly introduce the migrations and use only them for Db setup.


As a solution I thought to squash the migrations like this:

On Prod squash migrations, mark existing as skipped
Merge on staging and do a diff, mark both prod and staging ask skipped
On dev do the same


So I end up with 3 migrations:

One containing the initial prod changed (being the oldest ones)
Then one with staging
And one with dev changes


But is this a reccomended approachs what are the downsides?



https://redd.it/1mzzhan
@r_php
How to implement an APIPlatform filter that doesn't work with doctrine?

Hi,

I have an RRule (recurrence rule) field and want to add a between filter for it. Doctrine/Postgress don't support rrules so the general strategy is fetch all entries -> parse the rrule text field and check the occurences are inbetween the dates. But from the docs an API Filter just modifies the querybuilder but what I need is to filter the endresult after the data is already fetched from the db before it is send to the user.

How can this be done?

https://redd.it/1mzz2zo
@r_php
MVC Controllers: plural or singular?

Across MVC frameworks (e.g., CodeIgniter 4, Laravel, ...), what’s the common convention for controller names—plural (Users) or singular (User)? Why do you prefer it?

I like more singular cf. models. This survey seems to support this: https://www.reddit.com/r/laravel/s/K9qpqZFfQX

I never questioned this until my AI coding agent started using plurals and I thought to myself, wait a minute.


View Poll

https://redd.it/1n06rl1
@r_php
What CMS do you use?

I am curious to learn what CMS you use when you are building a content-heavy website? I have some experience with Symfony through Shopware 6 for work and a personal project (implementation of a third party API), but I have yet to build a website from scratch with it. I tried Sulu (its upcoming version 3 looks promising) and EasyAdmin. I like the latter since it integrates with your own entities, but I also tried Filament for Laravel, which is similar but miles ahead.

What do you use when the project requires one? Something custom? Or perhaps something not based on Symfony, when there's a lot of content to be edited?

https://redd.it/1n0f8du
@r_php
Configuring Laravel Boost MCP with GitHub Copilot in PHPStorm for DDEV on Windows WSL

Hey r/laravel,

Running Laravel 12 on DDEV in a Windows WSL/Mac setup, I had trouble with Laravel Boost's MCP server not connecting properly. I Googled for a bit and didn't find many resources on it, so I wanted to share my solution—it might assist some of you. Have a great day!

for Mac/Linux;

{
"servers": {
"my-laravel-project": {
"type": "stdio",
"command": "ddev",
"args": [
"exec",
"php",
"artisan",
"boost:mcp"
]
}
}
}


For Windows with WSL

{
"servers": {
"my-laravel-project": {
"type": "stdio",
"command": "wsl.exe",
"args": [
"-d",
"Ubuntu",
"--cd",
"/path/to/my-laravel-project",
"ddev",
"exec",
"php",
"artisan",
"boost:mcp"
]
}
}
}


https://redd.it/1n0gz1g
@r_php
🚀 Just released: Laravel Fast2SMS package – OTPs, DLT & Quick SMS made simple

Hey folks,

I built a Laravel package that makes sending SMS through Fast2SMS API way easier.

If you’ve ever dealt with raw SMS APIs, you know the pain — long payloads, DLT templates, sender IDs, juggling queues, etc. So I wrapped it all in a Laravel-fluent API that feels natural to work with.

# Features at a glance

Quick SMS
OTP support (super easy)
DLT template messages
Queue & scheduling support
Wallet balance check
Laravel Notifications integration

# Code example (it’s really this simple)

Fast2sms::otp('9999999999', '123456');

Or with a DLT template:

Fast2sms::dlt('9999999999', 'TEMPLATEID', ['John Doe'], 'SENDERID');

# 📦 Repo

👉 https://github.com/itxshakil/laravel-fast2sms

I’d love feedback, issues, or ideas for new features. And if you find it useful, a on GitHub would mean a lot 🙂

https://redd.it/1n0u66a
@r_php
🚀 Just released: Laravel Fast2SMS package – OTPs, DLT & Quick SMS made simple

Hey folks,

I built a Laravel package that makes sending SMS through Fast2SMS API way easier.

If you’ve ever dealt with raw SMS APIs, you know the pain — long payloads, DLT templates, sender IDs, juggling queues, etc. So I wrapped it all in a Laravel-fluent API that feels natural to work with.

# Features at a glance

Quick SMS
OTP support (super easy)
DLT template messages
Queue & scheduling support
Wallet balance check
Laravel Notifications integration

# Code example (it’s really this simple)

Fast2sms::otp('9999999999', '123456');


Or with a DLT template:

Fast2sms::dlt('9999999999', 'TEMPLATEID', ['John Doe'], 'SENDERID');


# 📦 Repo

👉 https://github.com/itxshakil/laravel-fast2sms

I’d love feedback, issues, or ideas for new features. And if you find it useful, a on GitHub would mean a lot 🙂

https://redd.it/1n0u75l
@r_php
Anyone using ADR + AAA tests in PHP/Symfony ?

# ADR + AAA in Symfony

I’ve been experimenting with an ADR (Action–Domain–Response) + AAA pattern in Symfony, and I’m curious if anyone else is using this in production, and what your thoughts are.

The idea is pretty straightforward:

- **Action** = a super thin controller that only maps input, calls a handler, and returns a JsonResponse.
- **Domain** = a handler with a single `__invoke()` method, returning a pure domain object (like `OrderResult`). No JSON, no HTTP, just business logic.
- **Response** = the controller transforms the DTO into JSON with the right HTTP code.

This way, unit tests are written in a clean AAA style (Arrange–Act–Assert) directly on the output object, without parsing JSON or booting the full kernel.

---

## Short example

```php
final class OrderResult {
public function __construct(
public readonly bool $success,
public readonly string $message = '',
public readonly ?array $data = null,
) {}
}

final class CreateOrderHandler {
public function __construct(private readonly OrderRepository $orders) {}
public function __invoke(OrderInput $in): OrderResult {
if ($this->orders->exists($in->orderId)) return new OrderResult(false, 'exists');
$this->orders->create($in->orderId, $in->customerId, $in->amountCents);
return new OrderResult(true, '');
}
}

#[Route('/api/v1/orders', methods: ['POST'])]
public function __invoke(OrderInput $in, CreateOrderHandler $h): JsonResponse {
$r = $h($in);
return new JsonResponse($r, $r->success ? 200 : 400);
}
````

And the test (AAA):

```php
public function test_creates_when_not_exists(): void {
$repo = $this->createMock(OrderRepository::class);
$repo->method('exists')->willReturn(false);
$repo->expects($this->once())->method('create');

$res = (new CreateOrderHandler($repo))(new OrderInput('o1','c1',2500));

$this->assertTrue($res->success);
}
```

---

## What I like about this approach

* Controllers are ridiculously simple.
* Handlers are super easy to test (one input → one output).
* The same handler can be reused for REST, CLI, async jobs, etc.

---

Open to any feedback — success stories, horror stories, or alternatives you prefer.


https://redd.it/1n0y29b
@r_php
Media is too big
VIEW IN TELEGRAM
Solving Concurrent User Sorting with Fractional Ranking in Laravel

https://redd.it/1n1ax1y
@r_php
I built a Centralized MTurk HIT Catcher with PHP + Usernoscripts

I built a small tool to centralize MTurk HIT catching.

\- Paste multiple HIT set IDs into a PHP page

\- Toggle ON/OFF catching via a server

\- Usernoscripts connect to MTurk accounts and auto-accept HITs

https://redd.it/1n1aj56
@r_php
Retiring code optimizes resources

The article talks of reasons why software is abandoned.

Ultimately, it leads me to believe that abandoning code optimizes costs and allows CTOs to reallocate resources to more productive avenues.


What are your stories related to abandoned software?


https://getlaminas.org/blog/2025-08-27-how-the-laminas-project-determines-when-to-abandon-a-library.html

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