initParameters('role_list'); $qb = $this->getDoctrine() ->getRepository(Role::class) ->createQueryBuilder('q') ->getQuery(); // get all rows $rows = $qb->getResult(Query::HYDRATE_ARRAY); // response return $this->render('role/list.html.twig', $params); } public function rows(Request $req) { // build query $qb = $this->getDoctrine() ->getRepository(Role::class) ->createQueryBuilder('q'); // count total records $total = $qb->select('COUNT(q)') ->getQuery() ->getSingleScalarResult(); // get datatable params $datatable = $req->request->get('datatable'); // get current page number $page = $datatable['pagination']['page'] ?? 1; $perpage = $datatable['pagination']['perpage']; $offset = ($page - 1) * $perpage; // add metadata $meta = [ 'page' => $page, 'perpage' => $perpage, 'pages' => ceil($total / $perpage), 'total' => $total, 'sort' => 'asc', 'field' => 'id' ]; // build query $query = $qb->select('q'); // check if filter is present if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { $query->where('q.id LIKE :filter') ->orWhere('q.name LIKE :filter') ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); } // check if sorting is present, otherwise use default if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { $order = $datatable['sort']['sort'] ?? 'asc'; $query->orderBy('q.' . $datatable['sort']['field'], $order); } else { $query->orderBy('q.id', 'asc'); } // get rows for this page $rows = $query->setFirstResult($offset) ->setMaxResults($perpage) ->getQuery() ->getResult(Query::HYDRATE_ARRAY); // response return $this->json([ 'meta' => $meta, 'data' => $rows ]); // add crud urls foreach ($rows as $index => $row) { $rows[$index]['update_url'] = $this->generateUrl('role_update', ['id' => $row['id']]); $rows[$index]['delete_url'] = $this->generateUrl('role_delete', ['id' => $row['id']]); } // response return $this->json([ 'meta' => $meta, 'data' => $rows ]); } public function create() { $params = $this->initParameters('role_list'); // response return $this->render('role/form.html.twig', $params); } public function createSubmit(Request $req) { // TODO: validation // create new row $em = $this->getDoctrine()->getManager(); $row = new Role(); // set and save values $row->setID($req->request->get('id')) ->setName($req->request->get('name')); $em->persist($row); $em->flush(); // set success $this->addFlash( 'success', 'Changes have been saved!' ); // response return $this->redirectToRoute('role_list'); } public function update($id) { $params = $this->initParameters('role_list'); // get row data $em = $this->getDoctrine()->getManager(); $row = $em->getRepository(Role::class)->find($id); if (empty($row)) throw $this->createNotFoundException('The item does not exist'); $params['row'] = $row; $params['values'] = []; // response return $this->render('role/form.html.twig', $params); } public function updateSubmit(Request $req, $id) { // TODO: validation // get row data $em = $this->getDoctrine()->getManager(); $row = $em->getRepository(Role::class)->find($id); if (empty($row)) throw $this->createNotFoundException('The item does not exist'); // set and save values $row->setID($req->request->get('id')) ->setName($req->request->get('name')); $em->flush(); // set success $this->addFlash( 'success', 'Changes have been saved!' ); // response return $this->redirectToRoute('role_list'); } public function destroy($id) { $params = $this->initParameters('role_list'); // get row data $em = $this->getDoctrine()->getManager(); $row = $em->getRepository(Role::class)->find($id); if (empty($row)) throw $this->createNotFoundException('The item does not exist'); // delete this row $em->remove($row); $em->flush(); // response $response = new Response(); $response->setStatusCode(Response::HTTP_OK); $response->send(); } }