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 |
||
| 6 | class ControllerBase extends Controller |
||
|
|
|||
| 7 | { |
||
| 8 | |||
| 9 | protected $model; |
||
| 10 | protected $title; |
||
| 11 | protected $controller; |
||
| 12 | protected $messageTimerInterval = 3000; |
||
| 13 | |||
| 14 | public function afterExecuteRoute($dispatcher) |
||
| 21 | |||
| 22 | public function indexAction($message = NULL) |
||
| 37 | |||
| 38 | public function frmAction($id = NULL) |
||
| 42 | |||
| 43 | public function getInstance($id = NULL) |
||
| 53 | |||
| 54 | public function readAction($id = NULL) |
||
| 62 | |||
| 63 | protected function setValuesToObject(&$object) |
||
| 67 | |||
| 68 | |||
| 69 | public function updateAction() |
||
| 93 | |||
| 94 | //PErmet l'édition d'un seul champ à la fois |
||
| 95 | View Code Duplication | public function soloUpdateAction() |
|
| 96 | { |
||
| 97 | $name = $this->request->getPost('name', 'string'); |
||
| 98 | //Créer la fonction variable 'set' en fonction du name en POST |
||
| 99 | $func = 'set' . ucfirst($name); |
||
| 100 | $projet = call_user_func($this->model . '::findFirst', $_POST['pk']); |
||
| 101 | $projet->$func($_POST['value']); |
||
| 102 | $projet->save(); |
||
| 103 | |||
| 104 | } |
||
| 105 | |||
| 106 | |||
| 107 | public function deleteAction($id = null) |
||
| 113 | |||
| 114 | public function asAdminAction() |
||
| 120 | |||
| 121 | public function asUserAction() |
||
| 127 | |||
| 128 | public function logoutAction() |
||
| 133 | |||
| 134 | |||
| 135 | /** |
||
| 136 | * Affiche un message Alert bootstrap |
||
| 137 | * @param DisplayedMessage $message |
||
| 138 | */ |
||
| 139 | public function _showDisplayedMessage($message) |
||
| 143 | |||
| 144 | /** |
||
| 145 | * Affiche un message Alert bootstrap |
||
| 146 | * @param string $message texte du message |
||
| 147 | * @param string $type type du message (info, success, warning ou danger) |
||
| 148 | * @param number $timerInterval durée en millisecondes d'affichage du message (0 pour que le message reste affiché) |
||
| 149 | * @param string $dismissable si vrai, l'alert dispose d'une croix de fermeture |
||
| 150 | */ |
||
| 151 | public function _showMessage($message, $type = "success", $timerInterval = 0, $dismissable = true, $visible = true) |
||
| 156 | |||
| 157 | |||
| 158 | public function messageSuccess($message, $timerInterval = 0, $dismissable = true) |
||
| 162 | |||
| 163 | /** |
||
| 164 | * Affiche un message Alert bootstrap de type warning |
||
| 165 | * @param string $message texte du message |
||
| 166 | * @param number $timerInterval durée en millisecondes d'affichage du message (0 pour que le message reste affiché) |
||
| 167 | * @param string $dismissable si vrai, l'alert dispose d'une croix de fermeture |
||
| 168 | */ |
||
| 169 | public function messageWarning($message, $timerInterval = 0, $dismissable = true) |
||
| 173 | |||
| 174 | /** |
||
| 175 | * Affiche un message Alert bootstrap de type danger |
||
| 176 | * @param string $message texte du message |
||
| 177 | * @param number $timerInterval durée en millisecondes d'affichage du message (0 pour que le message reste affiché) |
||
| 178 | * @param string $dismissable si vrai, l'alert dispose d'une croix de fermeture |
||
| 179 | */ |
||
| 180 | public function messageDanger($message, $timerInterval = 0, $dismissable = true) |
||
| 184 | |||
| 185 | /** |
||
| 186 | * Affiche un message Alert bootstrap de type info |
||
| 187 | * @param string $message texte du message |
||
| 188 | * @param number $timerInterval durée en millisecondes d'affichage du message (0 pour que le message reste affiché) |
||
| 189 | * @param string $dismissable si vrai, l'alert dispose d'une croix de fermeture |
||
| 190 | */ |
||
| 191 | public function messageInfo($message, $timerInterval = 0, $dismissable = true) |
||
| 195 | |||
| 196 | |||
| 197 | } |
||
| 198 |
You can fix this by adding a namespace to your class:
When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.