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 |
||
| 21 | class Controller |
||
| 22 | { |
||
| 23 | use NameWorksTrait; |
||
| 24 | use ConfigAwareTrait; |
||
| 25 | use DispatcherAwareTrait; |
||
| 26 | use ResponseAwareTrait; |
||
| 27 | |||
| 28 | protected $fullName = null; |
||
| 29 | |||
| 30 | protected $name = null; |
||
| 31 | |||
| 32 | protected $action = null; |
||
| 33 | |||
| 34 | /** |
||
| 35 | * @var Request |
||
| 36 | */ |
||
| 37 | protected $request; |
||
| 38 | |||
| 39 | /** |
||
| 40 | * @var Helpers\AbstractHelper[] |
||
| 41 | */ |
||
| 42 | protected $helpers = []; |
||
| 43 | |||
| 44 | /** |
||
| 45 | * Controller constructor. |
||
| 46 | */ |
||
| 47 | 2 | public function __construct() |
|
| 52 | |||
| 53 | /** |
||
| 54 | * @param $name |
||
| 55 | * @param $arguments |
||
| 56 | * @return bool|mixed |
||
| 57 | */ |
||
| 58 | 1 | View Code Duplication | public function __call($name, $arguments) |
| 66 | |||
| 67 | /** |
||
| 68 | * @param $name |
||
| 69 | * @return Helpers\AbstractHelper |
||
| 70 | */ |
||
| 71 | 2 | public function getHelper($name) |
|
| 75 | |||
| 76 | /** |
||
| 77 | * @return string |
||
| 78 | */ |
||
| 79 | public function getClassName() |
||
| 83 | |||
| 84 | /** |
||
| 85 | * @param null|Request $request |
||
| 86 | * @return Response |
||
| 87 | */ |
||
| 88 | public function dispatch($request = null) |
||
| 95 | |||
| 96 | /** |
||
| 97 | * Returns the request Object |
||
| 98 | * @return Request |
||
| 99 | */ |
||
| 100 | public function getRequest() |
||
| 108 | |||
| 109 | /** |
||
| 110 | * @param Request $request |
||
| 111 | * @return self |
||
| 112 | */ |
||
| 113 | public function setRequest(Request $request) |
||
| 119 | |||
| 120 | /** |
||
| 121 | * @param Request $request |
||
| 122 | */ |
||
| 123 | public function populateFromRequest(Request $request) |
||
| 128 | |||
| 129 | /** |
||
| 130 | * @param bool $action |
||
| 131 | * @return Response |
||
| 132 | */ |
||
| 133 | public function dispatchAction($action = false) |
||
| 156 | |||
| 157 | /** |
||
| 158 | * @param $action |
||
| 159 | * @return bool |
||
| 160 | */ |
||
| 161 | protected function validAction($action) |
||
| 165 | |||
| 166 | /** |
||
| 167 | * Called before action |
||
| 168 | */ |
||
| 169 | protected function parseRequest() |
||
| 173 | |||
| 174 | /** |
||
| 175 | * Called before $this->action |
||
| 176 | */ |
||
| 177 | protected function beforeAction() |
||
| 181 | |||
| 182 | /** |
||
| 183 | * Called after $this->action |
||
| 184 | */ |
||
| 185 | protected function afterAction() |
||
| 189 | |||
| 190 | /** |
||
| 191 | * @param bool $action |
||
| 192 | * @param bool $controller |
||
| 193 | * @param bool $module |
||
| 194 | * @param array $params |
||
| 195 | * @return mixed |
||
| 196 | */ |
||
| 197 | public function call($action = false, $controller = false, $module = false, $params = []) |
||
| 206 | |||
| 207 | /** |
||
| 208 | * @param self $controller |
||
| 209 | * @param Request $newRequest |
||
| 210 | * @return Controller |
||
| 211 | */ |
||
| 212 | protected function prepareCallController($controller, $newRequest) |
||
| 219 | |||
| 220 | /** |
||
| 221 | * @return string |
||
| 222 | */ |
||
| 223 | public function getAction() |
||
| 227 | |||
| 228 | /** |
||
| 229 | * @param string $action |
||
| 230 | * @return self |
||
| 231 | */ |
||
| 232 | public function setAction($action) |
||
| 238 | |||
| 239 | /** |
||
| 240 | * @return string |
||
| 241 | */ |
||
| 242 | public function getRootNamespace() |
||
| 246 | |||
| 247 | /** |
||
| 248 | * @return Application |
||
| 249 | */ |
||
| 250 | public function getApplication() |
||
| 254 | |||
| 255 | /** |
||
| 256 | * @param bool $action |
||
| 257 | * @param bool $controller |
||
| 258 | * @param bool $module |
||
| 259 | * @param array $params |
||
| 260 | */ |
||
| 261 | protected function forward($action = false, $controller = false, $module = false, $params = []) |
||
| 265 | |||
| 266 | /** |
||
| 267 | * @param $message |
||
| 268 | * @param $url |
||
| 269 | * @param string $type |
||
| 270 | * @param bool $name |
||
| 271 | */ |
||
| 272 | protected function flashRedirect($message, $url, $type = 'success', $name = false) |
||
| 278 | |||
| 279 | /** |
||
| 280 | * @return string |
||
| 281 | */ |
||
| 282 | public function getName() |
||
| 290 | |||
| 291 | /** |
||
| 292 | * @param string $name |
||
| 293 | */ |
||
| 294 | public function setName($name) |
||
| 298 | |||
| 299 | public function initName() |
||
| 303 | |||
| 304 | /** |
||
| 305 | * @return string |
||
| 306 | */ |
||
| 307 | public function getFullName() |
||
| 315 | |||
| 316 | /** |
||
| 317 | * @param $url |
||
| 318 | * @param null $code |
||
| 319 | */ |
||
| 320 | protected function redirect($url, $code = null) |
||
| 330 | } |
||
| 331 |
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.