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_Registry and Zend_Db_Table patterns 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

  1. Intro analysis: we identify every Zend component your code touches and how deep, then propose the target framework and the order of steps.
  2. Decouple first: registry to constructor injection, table gateways to repositories, view helpers to plain services, all with Rector rules.
  3. Run the new framework kernel next to the Zend one, moving routes across one by one with tests green after each move.
  4. 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.

zend framework-upgrade.diff
-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
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.

Read more about Zend Framework upgrades

Request a Zend Framework upgrade estimate