These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | namespace Spatie\QueryBuilder; |
||
4 | |||
5 | use Illuminate\Http\Request; |
||
6 | use Illuminate\Support\Collection; |
||
7 | use Illuminate\Support\Str; |
||
8 | |||
9 | class QueryBuilderRequest extends Request |
||
10 | { |
||
11 | private static $arrayValueDelimiter = ','; |
||
12 | |||
13 | public static function setArrayValueDelimiter(string $delimiter): void |
||
14 | { |
||
15 | static::$arrayValueDelimiter = $delimiter; |
||
0 ignored issues
–
show
|
|||
16 | } |
||
17 | |||
18 | public static function getArrayValueDelimiter(): string |
||
19 | { |
||
20 | return static::$arrayValueDelimiter; |
||
0 ignored issues
–
show
Since
$arrayValueDelimiter is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self , or increasing the visibility of $arrayValueDelimiter to at least protected.
Let’s assume you have a class which uses late-static binding: class YourClass
{
private static $someVariable;
public static function getSomeVariable()
{
return static::$someVariable;
}
}
The code above will run fine in your PHP runtime. However, if you now create a
sub-class and call the class YourSubClass extends YourClass { }
YourSubClass::getSomeVariable(); // Will cause an access error.
In the case above, it makes sense to update class SomeClass
{
private static $someVariable;
public static function getSomeVariable()
{
return self::$someVariable; // self works fine with private.
}
}
Loading history...
|
|||
21 | } |
||
22 | |||
23 | public static function fromRequest(Request $request): self |
||
24 | { |
||
25 | return static::createFrom($request, new self()); |
||
26 | } |
||
27 | |||
28 | public function includes(): Collection |
||
29 | { |
||
30 | $includeParameterName = config('query-builder.parameters.include'); |
||
31 | |||
32 | $includeParts = $this->query($includeParameterName); |
||
33 | |||
34 | if (! is_array($includeParts)) { |
||
35 | $includeParts = explode(static::getArrayValueDelimiter(), $this->query($includeParameterName)); |
||
36 | } |
||
37 | |||
38 | return collect($includeParts) |
||
39 | ->filter() |
||
40 | ->map([Str::class, 'camel']); |
||
41 | } |
||
42 | |||
43 | public function appends(): Collection |
||
44 | { |
||
45 | $appendParameterName = config('query-builder.parameters.append'); |
||
46 | |||
47 | $appendParts = $this->query($appendParameterName); |
||
48 | |||
49 | if (! is_array($appendParts)) { |
||
50 | $appendParts = explode(static::getArrayValueDelimiter(), strtolower($appendParts)); |
||
51 | } |
||
52 | |||
53 | return collect($appendParts)->filter(); |
||
54 | } |
||
55 | |||
56 | public function filters(): Collection |
||
57 | { |
||
58 | $filterParameterName = config('query-builder.parameters.filter'); |
||
59 | |||
60 | $filterParts = $this->query($filterParameterName, []); |
||
61 | |||
62 | if (is_string($filterParts)) { |
||
63 | return collect(); |
||
64 | } |
||
65 | |||
66 | $filters = collect($filterParts); |
||
67 | |||
68 | return $filters->map(function ($value) { |
||
69 | return $this->getFilterValue($value); |
||
70 | }); |
||
71 | } |
||
72 | |||
73 | View Code Duplication | public function fields(): Collection |
|
74 | { |
||
75 | $fieldsParameterName = config('query-builder.parameters.fields'); |
||
76 | |||
77 | $fieldsPerTable = collect($this->query($fieldsParameterName)); |
||
78 | |||
79 | if ($fieldsPerTable->isEmpty()) { |
||
80 | return collect(); |
||
81 | } |
||
82 | |||
83 | return $fieldsPerTable->map(function ($fields) { |
||
84 | return explode(static::getArrayValueDelimiter(), $fields); |
||
85 | }); |
||
86 | } |
||
87 | |||
88 | View Code Duplication | public function sorts(): Collection |
|
89 | { |
||
90 | $sortParameterName = config('query-builder.parameters.sort'); |
||
91 | |||
92 | $sortParts = $this->query($sortParameterName); |
||
93 | |||
94 | if (is_string($sortParts)) { |
||
95 | $sortParts = explode(static::getArrayValueDelimiter(), $sortParts); |
||
96 | } |
||
97 | |||
98 | return collect($sortParts)->filter(); |
||
99 | } |
||
100 | |||
101 | /** |
||
102 | * @param $value |
||
103 | * |
||
104 | * @return array|bool |
||
105 | */ |
||
106 | protected function getFilterValue($value) |
||
107 | { |
||
108 | if (is_array($value)) { |
||
109 | return collect($value)->map(function ($valueValue) { |
||
110 | return $this->getFilterValue($valueValue); |
||
111 | })->all(); |
||
112 | } |
||
113 | |||
114 | if (Str::contains($value, static::getArrayValueDelimiter())) { |
||
115 | return explode(static::getArrayValueDelimiter(), $value); |
||
116 | } |
||
117 | |||
118 | if ($value === 'true') { |
||
119 | return true; |
||
120 | } |
||
121 | |||
122 | if ($value === 'false') { |
||
123 | return false; |
||
124 | } |
||
125 | |||
126 | return $value; |
||
127 | } |
||
128 | } |
||
129 |
Let’s assume you have a class which uses late-static binding:
The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the
getSomeVariable()
on that sub-class, you will receive a runtime error:In the case above, it makes sense to update
SomeClass
to useself
instead: