Zend Framework 1 → Symfony
Zend Framework Migration: from Zend 1 or 2 to Laminas, Symfony or Laravel
Zend Framework 1 has been unsupported since 2016 and Zend 2 followed. We migrate Zend applications to a maintained framework with Rector rules tailored to Zend conventions, so the business keeps running on the same code while it changes underneath.
Typical blockers
What stops a Zend Framework upgrade
- Zend 1 front controller,
Zend_RegistryandZend_Db_Tablepatterns with no modern equivalent - Zend 2 module system and service manager configs spread over dozens of arrays
- Forms, validators and view helpers coupled to the framework in every layer
- PHP version locked at 5.x or 7.x because the framework does not support anything newer
How we do it
Step by step, always mergeable
- Intro analysis: we identify every Zend component your code touches and how deep, then propose the target framework and the order of steps.
- Decouple first: registry to constructor injection, table gateways to repositories, view helpers to plain services, all with Rector rules.
- Run the new framework kernel next to the Zend one, moving routes across one by one with tests green after each move.
- Remove Zend, bump PHP to the latest version and leave Rector and PHPStan in CI.
What the diff looks like
Every change is a reviewable diff, small enough to merge the same day.
-class OrderController extends Zend_Controller_Action
-{
- public function viewAction()
- {
- $id = $this->_getParam('id');
- $orders = new Application_Model_DbTable_Orders();
- $this->view->order = $orders->find($id)->current();
- }
-}
+final class OrderController extends AbstractController
+{
+ public function __construct(
+ private readonly OrderRepository $orderRepository,
+ ) {
+ }
+
+ #[Route('/order/{id}')]
+ public function view(int $id): Response
+ {
+ $order = $this->orderRepository->find($id);
+
+ return $this->render('order/view.html.twig', ['order' => $order]);
+ }
+}
“Thanks to Rector, we were able to quite simply refactor the core of our API, which saved a lot of work that our developers would otherwise have to do manually.”
Milan Mimra
CTO at Spaceflow
Intro analysis
2 weeks, $6,000-8,000
Codebase measured, blockers listed, timeline and price for the whole upgrade in a PDF report.
Hands-on upgrade
$120 / hour
20-80 hours a week, in parallel to your team, every change delivered as a mergeable pull request.
Do it yourself
Open source
Browse Rector rules and read the documentation to run the upgrade with your own team.