From d0c0f5cdecd49e2539ba8b2a69eb0fb2b7b5e590 Mon Sep 17 00:00:00 2001 From: genti-extendas Date: Mon, 13 Jul 2026 12:52:55 +0300 Subject: [PATCH 1/2] SPIN-5589: Drop Symfony 5.4 support, add Symfony 7.4 support --- Util/Datatable.php | 23 +++++++++++++- Util/Factory/Query/DoctrineBuilder.php | 42 ++++++++++++++++++-------- composer.json | 6 ++-- 3 files changed, 55 insertions(+), 16 deletions(-) diff --git a/Util/Datatable.php b/Util/Datatable.php index d30096b..c24a7ff 100644 --- a/Util/Datatable.php +++ b/Util/Datatable.php @@ -96,6 +96,27 @@ protected function _applyDefaults() } } + /** + * Looks up a request parameter the same way the deprecated Request::get() + * did: attributes, then query, then request (POST) parameters. + */ + private function _requestGet(Request $request, string $key, mixed $default = null): mixed + { + if ($request->attributes->has($key)) + { + return $request->attributes->get($key); + } + if ($request->query->has($key)) + { + return $request->query->get($key); + } + if ($request->request->has($key)) + { + return $request->request->get($key); + } + return $default; + } + /** * add join * @@ -188,7 +209,7 @@ public function execute() }); } $output = array( - "sEcho" => intval($request->get('sEcho')), + "sEcho" => intval($this->_requestGet($request, 'sEcho')), "iTotalRecords" => $total_count, "iTotalDisplayRecords" => $total_count, "aaData" => $data diff --git a/Util/Factory/Query/DoctrineBuilder.php b/Util/Factory/Query/DoctrineBuilder.php index 0fb4fb6..fc8d1b9 100644 --- a/Util/Factory/Query/DoctrineBuilder.php +++ b/Util/Factory/Query/DoctrineBuilder.php @@ -85,6 +85,27 @@ public function __construct(EntityManagerInterface $em) $this->query_hints = []; } + /** + * Looks up a request parameter the same way the deprecated Request::get() + * did: attributes, then query, then request (POST) parameters. + */ + private function _requestGet(string $key, mixed $default = null): mixed + { + if ($this->request->attributes->has($key)) + { + return $this->request->attributes->get($key); + } + if ($this->request->query->has($key)) + { + return $this->request->query->get($key); + } + if ($this->request->request->has($key)) + { + return $this->request->request->get($key); + } + return $default; + } + /** * get the search dql * @@ -96,11 +117,10 @@ protected function _addSearch(\Doctrine\ORM\QueryBuilder $queryBuilder, array $f { if ($this->search == TRUE) { - $request = $this->request; $search_fields = array_values($this->fields); foreach ($search_fields as $i => $search_field) { - $search_param = $request->get("sSearch_{$i}"); + $search_param = $this->_requestGet("sSearch_{$i}"); $filter = $filter_fields[$i] ?? null; $is_required_date_filter = $filter instanceof DateTimeFilter && $filter->isRequired(); @@ -408,14 +428,14 @@ public function getTotalRecords(array $filter_fields=[]) */ public function addSorting() { - $request = $this->request; $dql_fields = array_values($this->fields); + $sort_col = $this->_requestGet('iSortCol_0'); // add sorting - if ($request->get('iSortCol_0') !== null) + if ($sort_col !== null) { - $order_field = current(explode(' as ', $dql_fields[$request->get('iSortCol_0')])); + $order_field = current(explode(' as ', $dql_fields[$sort_col])); } else { @@ -425,14 +445,14 @@ public function addSorting() if ($order_field !== null) { - $field = $dql_fields[$request->get('iSortCol_0')]; + $field = $dql_fields[$sort_col]; if ($field instanceof DQLDatatableField) { - $qb->orderBy($field->getAlias(), $request->get('sSortDir_0', 'asc')); + $qb->orderBy($field->getAlias(), $this->_requestGet('sSortDir_0', 'asc')); } else { - $qb->orderBy($order_field, $request->get('sSortDir_0', 'asc')); + $qb->orderBy($order_field, $this->_requestGet('sSortDir_0', 'asc')); } } else @@ -498,8 +518,6 @@ public function getParameters() */ public function getData(array $filter_fields=[]) { - $request = $this->request; - $qb = $this->addSorting(); // extract alias selectors @@ -527,8 +545,8 @@ public function getData(array $filter_fields=[]) // add search $this->_addSearch($qb, $filter_fields); - $display_length = (int) $request->get('iDisplayLength'); - $display_start = (int) $request->get('iDisplayStart'); + $display_length = (int) $this->_requestGet('iDisplayLength'); + $display_start = (int) $this->_requestGet('iDisplayStart'); if($display_length > 10000) //Magic! { $display_length = 10000; diff --git a/composer.json b/composer.json index b124e20..eee1cc2 100644 --- a/composer.json +++ b/composer.json @@ -18,9 +18,9 @@ "doctrine/orm": ">=2.3", "doctrine/dbal": ">=2.13", "doctrine/doctrine-bundle": "~1.0|~2.0", - "symfony/framework-bundle": "^5.4|^6.4", - "symfony/form": "^5.4|^6.4", - "symfony/translation": "^5.4|^6.4", + "symfony/framework-bundle": "^6.4|^7.4", + "symfony/form": "^6.4|^7.4", + "symfony/translation": "^6.4|^7.4", "shipmonk/doctrine-mysql-index-hints": "^3.0" }, "target-dir": "Ali/DatatableBundle", From 3026a33861002f4e9bc05e938263b9af32dd2c8d Mon Sep 17 00:00:00 2001 From: genti-extendas Date: Mon, 17 Aug 2026 15:05:57 +0200 Subject: [PATCH 2/2] SPIN-5589: address pr comments --- Util/Datatable.php | 23 +----------------- Util/Factory/Query/DoctrineBuilder.php | 33 +++++--------------------- 2 files changed, 7 insertions(+), 49 deletions(-) diff --git a/Util/Datatable.php b/Util/Datatable.php index c24a7ff..bd27073 100644 --- a/Util/Datatable.php +++ b/Util/Datatable.php @@ -96,27 +96,6 @@ protected function _applyDefaults() } } - /** - * Looks up a request parameter the same way the deprecated Request::get() - * did: attributes, then query, then request (POST) parameters. - */ - private function _requestGet(Request $request, string $key, mixed $default = null): mixed - { - if ($request->attributes->has($key)) - { - return $request->attributes->get($key); - } - if ($request->query->has($key)) - { - return $request->query->get($key); - } - if ($request->request->has($key)) - { - return $request->request->get($key); - } - return $default; - } - /** * add join * @@ -209,7 +188,7 @@ public function execute() }); } $output = array( - "sEcho" => intval($this->_requestGet($request, 'sEcho')), + "sEcho" => intval($request->query->get('sEcho')), "iTotalRecords" => $total_count, "iTotalDisplayRecords" => $total_count, "aaData" => $data diff --git a/Util/Factory/Query/DoctrineBuilder.php b/Util/Factory/Query/DoctrineBuilder.php index fc8d1b9..ac335ee 100644 --- a/Util/Factory/Query/DoctrineBuilder.php +++ b/Util/Factory/Query/DoctrineBuilder.php @@ -85,27 +85,6 @@ public function __construct(EntityManagerInterface $em) $this->query_hints = []; } - /** - * Looks up a request parameter the same way the deprecated Request::get() - * did: attributes, then query, then request (POST) parameters. - */ - private function _requestGet(string $key, mixed $default = null): mixed - { - if ($this->request->attributes->has($key)) - { - return $this->request->attributes->get($key); - } - if ($this->request->query->has($key)) - { - return $this->request->query->get($key); - } - if ($this->request->request->has($key)) - { - return $this->request->request->get($key); - } - return $default; - } - /** * get the search dql * @@ -120,7 +99,7 @@ protected function _addSearch(\Doctrine\ORM\QueryBuilder $queryBuilder, array $f $search_fields = array_values($this->fields); foreach ($search_fields as $i => $search_field) { - $search_param = $this->_requestGet("sSearch_{$i}"); + $search_param = $this->request->query->get("sSearch_{$i}"); $filter = $filter_fields[$i] ?? null; $is_required_date_filter = $filter instanceof DateTimeFilter && $filter->isRequired(); @@ -429,7 +408,7 @@ public function getTotalRecords(array $filter_fields=[]) public function addSorting() { $dql_fields = array_values($this->fields); - $sort_col = $this->_requestGet('iSortCol_0'); + $sort_col = $this->request->query->get('iSortCol_0'); // add sorting if ($sort_col !== null) @@ -448,11 +427,11 @@ public function addSorting() $field = $dql_fields[$sort_col]; if ($field instanceof DQLDatatableField) { - $qb->orderBy($field->getAlias(), $this->_requestGet('sSortDir_0', 'asc')); + $qb->orderBy($field->getAlias(), $this->request->query->get('sSortDir_0', 'asc')); } else { - $qb->orderBy($order_field, $this->_requestGet('sSortDir_0', 'asc')); + $qb->orderBy($order_field, $this->request->query->get('sSortDir_0', 'asc')); } } else @@ -545,8 +524,8 @@ public function getData(array $filter_fields=[]) // add search $this->_addSearch($qb, $filter_fields); - $display_length = (int) $this->_requestGet('iDisplayLength'); - $display_start = (int) $this->_requestGet('iDisplayStart'); + $display_length = (int) $this->request->query->get('iDisplayLength'); + $display_start = (int) $this->request->query->get('iDisplayStart'); if($display_length > 10000) //Magic! { $display_length = 10000;