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 |
||
| 15 | class File extends AbstractField |
||
| 16 | { |
||
| 17 | use Storage; |
||
| 18 | use Nullable; |
||
| 19 | use Placeholder; |
||
| 20 | use Filename; |
||
| 21 | |||
| 22 | public static $repeaterAdapterClass = RepeaterFile::class; |
||
| 23 | |||
| 24 | 45 | public function __construct() |
|
| 25 | { |
||
| 26 | 45 | $this->disk = config('filesystems.default'); |
|
| 27 | 45 | } |
|
| 28 | |||
| 29 | 2 | public function shouldSkip(Request $request) |
|
| 30 | { |
||
| 31 | 2 | $files = $request->file($this->name()); |
|
| 32 | |||
| 33 | 2 | return !$files; |
|
| 34 | } |
||
| 35 | |||
| 36 | public function value(Request $request) |
||
| 37 | { |
||
| 38 | $data = $request->get($this->name()); |
||
| 39 | $paths = Arr::get($data, 'paths', []); |
||
| 40 | $files = Arr::get($data, 'files', []); |
||
| 41 | |||
| 42 | if (!$this->isMultiple()) { |
||
| 43 | $files = [$files]; |
||
| 44 | } |
||
| 45 | $files = array_filter($files); |
||
| 46 | |||
| 47 | /** @var UploadedFile $file */ |
||
| 48 | foreach ($files as $file) { |
||
| 49 | $filename = $this->generateFilename($request, $file); |
||
| 50 | $paths[] = $this->storeFile($file, $filename, $request); |
||
| 51 | } |
||
| 52 | |||
| 53 | if ($this->isMultiple()) { |
||
| 54 | return $paths; |
||
| 55 | } |
||
| 56 | return array_filter($paths) ? array_pop($paths) : null; |
||
| 57 | } |
||
| 58 | |||
| 59 | 1 | public function getListView($model) |
|
| 66 | |||
| 67 | 1 | public function getEditFormView($model) |
|
| 68 | { |
||
| 69 | 1 | $template = $this->isReadonly() ? 'readonly' : 'edit'; |
|
| 76 | |||
| 77 | 1 | public function getCreateFormView() |
|
| 83 | |||
| 84 | View Code Duplication | public function getPaths($model): array |
|
| 97 | |||
| 98 | public function formUrl(string $path) |
||
| 104 | |||
| 105 | /** |
||
| 106 | * @param Request $request |
||
| 107 | * @param UploadedFile $file |
||
| 108 | * @return string |
||
| 109 | */ |
||
| 110 | private function generateFilename(Request $request, UploadedFile $file): string |
||
| 121 | } |
||
| 122 |
Our type inference engine in quite powerful, but sometimes the code does not provide enough clues to go by. In these cases we request you to add a
@returnannotation as described here.