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 |
||
| 36 | class ContainerController extends Controller |
||
| 37 | { |
||
| 38 | /** |
||
| 39 | * Lists all registered containers. |
||
| 40 | * |
||
| 41 | * @ApiDoc( |
||
| 42 | * resource=true, |
||
| 43 | * description="Lists all registered containers", |
||
| 44 | * statusCodes={ |
||
| 45 | * 200="Returned on success." |
||
| 46 | * } |
||
| 47 | * ) |
||
| 48 | * @Route("/api/{version}/templates/containers/", options={"expose"=true}, defaults={"version"="v1"}, name="swp_api_templates_list_containers") |
||
| 49 | * @Method("GET") |
||
| 50 | 1 | * @Cache(expires="10 minutes", public=true) |
|
| 51 | */ |
||
| 52 | 1 | public function listAction(Request $request) |
|
| 60 | 1 | ||
| 61 | /** |
||
| 62 | * Get single container. |
||
| 63 | * |
||
| 64 | 1 | * @ApiDoc( |
|
| 65 | * resource=true, |
||
| 66 | * description="Get single container", |
||
| 67 | * statusCodes={ |
||
| 68 | * 200="Returned on success.", |
||
| 69 | * 404="Container not found" |
||
| 70 | * } |
||
| 71 | * ) |
||
| 72 | * @Route("/api/{version}/templates/containers/{id}", requirements={"id"="\d+"}, options={"expose"=true}, defaults={"version"="v1"}, name="swp_api_templates_get_container") |
||
| 73 | * @Method("GET") |
||
| 74 | * @Cache(expires="10 minutes", public=true) |
||
| 75 | */ |
||
| 76 | public function getAction($id) |
||
| 89 | |||
| 90 | 1 | /** |
|
| 91 | * Render single container and it's widgets. |
||
| 92 | * |
||
| 93 | * @ApiDoc( |
||
| 94 | 1 | * resource=true, |
|
| 95 | * description="Render single container and it's widgets.", |
||
| 96 | * statusCodes={ |
||
| 97 | * 200="Returned on success.", |
||
| 98 | * 404="Container not found" |
||
| 99 | * } |
||
| 100 | * ) |
||
| 101 | * @Route("/api/{version}/templates/containers/{id}/render", requirements={"id"="\d+"}, options={"expose"=true}, defaults={"version"="v1"}, name="swp_api_templates_render_container") |
||
| 102 | * @Method("GET") |
||
| 103 | * @Cache(expires="10 minutes", public=true) |
||
| 104 | */ |
||
| 105 | public function renderAction($id) |
||
| 121 | |||
| 122 | /** |
||
| 123 | * Update single container. |
||
| 124 | 3 | * |
|
| 125 | 3 | * @ApiDoc( |
|
| 126 | * resource=true, |
||
| 127 | * description="Update single container", |
||
| 128 | 3 | * statusCodes={ |
|
| 129 | 3 | * 201="Returned on success.", |
|
| 130 | 3 | * 404="Container not found", |
|
| 131 | 3 | * 422="Container id is not number" |
|
| 132 | * }, |
||
| 133 | 1 | * input="SWP\Bundle\TemplatesSystemBundle\Form\Type\ContainerType" |
|
| 134 | 1 | * ) |
|
| 135 | * @Route("/api/{version}/templates/containers/{id}", requirements={"id"="\d+"}, options={"expose"=true}, defaults={"version"="v1"}, name="swp_api_templates_update_container") |
||
| 136 | * @Method("PATCH") |
||
| 137 | */ |
||
| 138 | 1 | public function updateAction(Request $request, $id) |
|
| 179 | |||
| 180 | /** |
||
| 181 | * Link or Unlink resource with Container. |
||
| 182 | * |
||
| 183 | * **link or unlink widget**: |
||
| 184 | * |
||
| 185 | * header name: "link" |
||
| 186 | * header value: "</api/{version}/templates/widgets/{id}; rel="widget">" |
||
| 187 | * |
||
| 188 | * or with specific position: |
||
| 189 | * |
||
| 190 | 2 | * header name: "link" |
|
| 191 | * header value: "</api/{version}/templates/widgets/{id}; rel="widget">,<1; rel="widget-position">" |
||
| 192 | 2 | * |
|
| 193 | * @ApiDoc( |
||
| 194 | * statusCodes={ |
||
| 195 | * 201="Returned when successful", |
||
| 196 | 2 | * 404="Returned when resource not found", |
|
| 197 | 2 | * 409={ |
|
| 198 | 2 | * "Returned when the link already exists", |
|
| 199 | 2 | * } |
|
| 200 | * } |
||
| 201 | 2 | * ) |
|
| 202 | * |
||
| 203 | * @Route("/api/{version}/templates/containers/{id}", requirements={"id"="\d+"}, defaults={"version"="v1"}, name="swp_api_templates_link_container") |
||
| 204 | * |
||
| 205 | 2 | * @Method("LINK|UNLINK") |
|
| 206 | 2 | * |
|
| 207 | 2 | * @param Request $request |
|
| 208 | * @param string $id |
||
| 209 | * |
||
| 210 | * @throws NotFoundHttpException |
||
| 211 | 2 | * @throws \Exception |
|
| 212 | 2 | * |
|
| 213 | * @return \Symfony\Component\HttpFoundation\Response |
||
| 214 | */ |
||
| 215 | public function linkUnlinkToContainerAction(Request $request, $id) |
||
| 291 | |||
| 292 | /** |
||
| 293 | 2 | * @param Request $request |
|
| 294 | * |
||
| 295 | * @return array |
||
| 296 | */ |
||
| 297 | private function getNotConvertedLinks($request) |
||
| 320 | } |
||
| 321 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.