Skip to main content

Web development using Symfony

Details on Building an Enterprise ERP Using PHP with Symfony. The Transition from CodeIgniter to Symfony and the Foundation of a Modern ERP Designed From Scratch to Process Massive Data Flows.

Web development using Symfony

The application was commissioned by a client operating in Europe for collecting tires and other related automotive workshop products. My role was focused on implementing various features within the application.

The Transition from Simple Systems to Symfony

My first impression working with Symfony was interesting. Although it is an MVC framework like Laravel or CodeIgniter, it is much more flexible and complex. Being so permissive, it is also very easy to make mistakes. At the same time, due to this flexibility, it allows the implementation of any design philosophy, such as DDD (Domain-Driven Design).

The most impressive part for me was the ORM. Up until that point, I hadn't worked with an ORM, and I've been using it daily ever since.

It was also within this project that I saw what modern PHP development looks like. The team set up a standard but, for me, entirely new workflow: Docker, PHPStan, PHP_CodeSniffer, PHPUnit, PR reviews, and separate dev and prod environments. It is a workflow that makes complete sense and allows the development of an enterprise application that would otherwise become increasingly difficult to manage in a traditional way as it grows. It’s a workflow I now use daily.

My Contributions to Development

Most of the features I developed were simple CRUDs, but there were also several more notable implementations.

Implementing Data Extraction from Files Using AI and an MCP Server

This functionality was extremely interesting. Files were uploaded to an S3 Bucket, scanned by AI, and sent over for form mapping. Why was it interesting? Even though we used an MCP (Model Context Protocol) server, data collection using AI is always a challenge. AI inherently has an error rate, and it is highly unlikely to get perfectly consistent results, but the goal was to fill in whatever was possible to assist the overall workflow.

I chose to design a JSON schema based on the form. This way, the MCP server always received the exact fields required. That schema was sent to structure the AI's response, making it easy to autocomplete and map the recovered data.

Utilizing a Message Queue with RabbitMQ

This implementation was integrated into the invoicing system. The software supports multi-company operations; therefore, certain features such as invoice series have multiple uniqueness criteria. Given the system architecture and these requirements, the best method for implementation was using a message queue.

Utilizing API Platform for the Mobile App

The software also includes a mobile application for field operators. Part of my responsibilities involved creating API endpoints for that app. This is where I truly saw the value of API Platform combined with Symfony. It makes API development incredibly straightforward, and as a bonus, they come completely documented right out of the box.

Utilizing EasyAdmin for the Dashboard

EasyAdmin was the only component in this stack that I didn't quite get along with. It is very strict regarding data handling and incredibly inflexible for custom requirements. I could see its value for building a basic dashboard quickly and effortlessly, but in an ERP with complex requirements, it felt like it hindered progress rather than helping it.

In Conclusion

To me, Symfony feels like the perfect framework for teamwork on an enterprise project, but the standout component remains Doctrine ORM. Symfony is an extremely powerful and versatile tool, though it is not particularly beginner-friendly.

At the moment, I still use CodeIgniter 4 for my own applications. For me, it feels like a good compromise between development speed and the resulting quality, but it's not exactly a traditional CodeIgniter setup anymore. One of the concepts I adopted from Symfony is the Service layer. Although CodeIgniter lacks a native ORM component, you can work with it in an "ORM-like" fashion. It requires some care to avoid generating N+1 queries, but it significantly improves the overall development experience.

Thinking about improving your business with a web system?

The consultation is free. Pricing is hourly or per project.

I can help you see if what you're proposing is viable and give you an approximate cost.