Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
| 1 | <?php |
||
| 34 | class OrdersController extends AbstractOrdersController |
||
| 35 | { |
||
| 36 | /** |
||
| 37 | * Lists all Orders entities. |
||
| 38 | * |
||
| 39 | * @Route("/", name="orders") |
||
| 40 | * @Method("GET") |
||
| 41 | * @Template() |
||
| 42 | */ |
||
| 43 | public function indexAction(Request $request) |
||
| 44 | { |
||
| 45 | $em = $this->getDoctrine()->getManager(); |
||
|
|
|||
| 46 | $item = $this->container->getParameter('knp_paginator.page_range'); |
||
| 47 | $qb = $em->getRepository('AppBundle:Orders')->createQueryBuilder('o'); |
||
| 48 | $qb->where('o.orderdate < ' . date('Y-m-d')); |
||
| 49 | |||
| 50 | $createForm = $this->createCreateForm('orders_create'); |
||
| 51 | |||
| 52 | $paginator = $this->get('knp_paginator')->paginate($qb, $request->query->get('page', 1), $item); |
||
| 53 | return array( |
||
| 54 | 'create_form' => $createForm->createView(), |
||
| 55 | 'paginator' => $paginator, |
||
| 56 | ); |
||
| 57 | } |
||
| 58 | |||
| 59 | /** |
||
| 60 | * Finds and displays a Orders entity. |
||
| 61 | * |
||
| 62 | * @Route("/{id}/show", name="orders_show", requirements={"id"="\d+"}) |
||
| 63 | * @Method("GET") |
||
| 64 | * @Template() |
||
| 65 | */ |
||
| 66 | public function showAction(Orders $orders) |
||
| 75 | |||
| 76 | /** |
||
| 77 | * Displays a form to create a new Orders entity. |
||
| 78 | * |
||
| 79 | * @Route("/new/{supplier}", name="orders_new") |
||
| 80 | * @Method("GET") |
||
| 81 | * @Template() |
||
| 82 | */ |
||
| 83 | public function newAction(Supplier $supplier) |
||
| 84 | { |
||
| 85 | $etm = $this->getDoctrine()->getManager(); |
||
| 86 | |||
| 87 | $orders = new Orders(); |
||
| 88 | $orders->setSupplier($supplier); |
||
| 89 | $articles = $etm->getRepository('AppBundle:Article')->getArticleFromSupplier($supplier->getId()); |
||
| 90 | |||
| 91 | // Set Orders dates (order and delivery) |
||
| 92 | $orders = $this->setDates($orders, $supplier); |
||
| 93 | |||
| 94 | $etm->persist($orders); |
||
| 95 | // Saving articles of supplier in order |
||
| 96 | $this->saveOrdersArticles($articles, $orders, $etm); |
||
| 97 | |||
| 98 | $etm->flush(); |
||
| 99 | |||
| 100 | return $this->redirect($this->generateUrl('orders_edit', array('id' => $orders->getId()))); |
||
| 101 | } |
||
| 102 | |||
| 103 | /** |
||
| 104 | * Creates a new Orders entity. |
||
| 105 | * |
||
| 106 | * @Route("/admin/create", name="orders_create") |
||
| 107 | * @Method("POST") |
||
| 108 | * @Template("AppBundle:Orders:new.html.twig") |
||
| 109 | */ |
||
| 110 | public function createAction(Request $request) |
||
| 111 | { |
||
| 112 | $etm = $this->getDoctrine()->getManager(); |
||
| 113 | |||
| 114 | $orders = new Orders(); |
||
| 115 | $form = $this->createForm(OrdersType::class, $orders); |
||
| 116 | $return = ['orders' => $orders, 'form' => $form->createView(),]; |
||
| 117 | $form->handleRequest($request); |
||
| 118 | $supplier = $orders->getSupplier(); |
||
| 119 | $articles = $etm->getRepository('AppBundle:Article')->getArticleFromSupplier($supplier->getId()); |
||
| 120 | // Tester la liste si un fournisseur à déjà une commande en cours |
||
| 121 | $test = $this->get('app.helper.controller')->testSupplierHasArticle($articles); |
||
| 122 | if ($test === false) { |
||
| 123 | $return = $this->redirectToRoute('orders'); |
||
| 124 | } else { |
||
| 125 | // Set Orders dates (order and delivery) |
||
| 126 | $orders = $this->setDates($orders, $supplier); |
||
| 127 | |||
| 128 | if ($form->isValid() && $return !== $this->redirectToRoute('orders')) { |
||
| 129 | $etm->persist($orders); |
||
| 130 | // Saving articles of supplier in order |
||
| 131 | $this->saveOrdersArticles($articles, $orders, $etm); |
||
| 132 | |||
| 133 | $etm->flush(); |
||
| 134 | |||
| 135 | $return = $this->redirect($this->generateUrl('orders_edit', array('id' => $orders->getId()))); |
||
| 136 | } |
||
| 137 | } |
||
| 138 | return $return; |
||
| 139 | } |
||
| 140 | |||
| 141 | /** |
||
| 142 | * Displays a form to edit an existing Orders entity. |
||
| 143 | * |
||
| 144 | * @Route("/admin/{id}/edit", name="orders_edit", requirements={"id"="\d+"}) |
||
| 145 | * @Method("GET") |
||
| 146 | * @Template() |
||
| 147 | */ |
||
| 148 | public function editAction(Orders $orders) |
||
| 162 | |||
| 163 | /** |
||
| 164 | * Edits an existing Orders entity. |
||
| 165 | * |
||
| 166 | * @Route("/admin/{id}/update", name="orders_update", requirements={"id"="\d+"}) |
||
| 167 | * @Method("PUT") |
||
| 168 | * @Template("AppBundle:Orders:edit.html.twig") |
||
| 169 | */ |
||
| 170 | public function updateAction(Orders $orders, Request $request) |
||
| 194 | |||
| 195 | /** |
||
| 196 | * Deletes a Orders entity. |
||
| 197 | * |
||
| 198 | * @Route("/admin/{id}/delete", name="orders_delete", requirements={"id"="\d+"}) |
||
| 199 | * @Method("DELETE") |
||
| 200 | */ |
||
| 201 | public function deleteAction(Orders $orders, Request $request) |
||
| 217 | |||
| 218 | /** |
||
| 219 | * Set order Dates. |
||
| 220 | * |
||
| 221 | * @param \AppBundle\Entity\Orders $orders La commande à traiter |
||
| 222 | * @param \AppBundle\Entity\Supplier $supplier Le fournisseur concerné |
||
| 223 | * @return \AppBundle\Entity\Orders La commande modifiée |
||
| 224 | */ |
||
| 225 | private function setDates(Orders $orders, Supplier $supplier) |
||
| 241 | |||
| 242 | /** |
||
| 243 | * Save OrdersArticles. |
||
| 244 | * |
||
| 245 | * @param array $articles Liste des articles |
||
| 246 | * @param \AppBundle\Entity\Orders $orders La commande à traiter |
||
| 247 | * @param \Doctrine\Common\Persistence\ObjectManager $etm Entity Manager |
||
| 248 | */ |
||
| 249 | private function saveOrdersArticles($articles, $orders, $etm) |
||
| 264 | |||
| 265 | /** |
||
| 266 | * Print the current order.<br />Creating a `PDF` file for viewing on paper |
||
| 267 | * |
||
| 268 | * @Route("/{id}/print/", name="orders_print", requirements={"id"="\d+"}) |
||
| 269 | * @Method("GET") |
||
| 270 | * @Template() |
||
| 271 | * |
||
| 272 | * @param \AppBundle\Entity\Orders $orders Order item to print |
||
| 273 | * @return \Symfony\Component\HttpFoundation\Response |
||
| 274 | */ |
||
| 275 | public function printAction(Orders $orders) |
||
| 281 | } |
||
| 282 |
Short variable names may make your code harder to understand. Variable names should be self-descriptive. This check looks for variable names who are shorter than a configured minimum.