Passed
Pull Request — master (#192)
by Sergei
03:30
created

Field::date()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 3
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Form;
6
7
use RuntimeException;
8
use Yiisoft\Form\Field\Button;
9
use Yiisoft\Form\Field\ButtonGroup;
10
use Yiisoft\Form\Field\Checkbox;
11
use Yiisoft\Form\Field\CheckboxList;
12
use Yiisoft\Form\Field\Date;
13
use Yiisoft\Form\Field\DateTime;
14
use Yiisoft\Form\Field\DateTimeLocal;
15
use Yiisoft\Form\Field\Email;
16
use Yiisoft\Form\Field\Fieldset;
17
use Yiisoft\Form\Field\Hidden;
18
use Yiisoft\Form\Field\Image;
19
use Yiisoft\Form\Field\Number;
20
use Yiisoft\Form\Field\Part\Error;
21
use Yiisoft\Form\Field\Part\Hint;
22
use Yiisoft\Form\Field\Part\Label;
23
use Yiisoft\Form\Field\Password;
24
use Yiisoft\Form\Field\RadioList;
25
use Yiisoft\Form\Field\Range;
26
use Yiisoft\Form\Field\ResetButton;
27
use Yiisoft\Form\Field\Select;
28
use Yiisoft\Form\Field\SubmitButton;
29
use Yiisoft\Form\Field\Telephone;
30
use Yiisoft\Form\Field\Text;
31
use Yiisoft\Form\Field\Textarea;
32
use Yiisoft\Form\Field\Url;
33
34
use function array_key_exists;
35
36
final class Field
37
{
38
    /**
39
     * @psalm-var array<string,array>
40
     */
41
    private static array $configs = [
42
        'default' => [],
43
    ];
44
45
    private static string $defaultConfigName = 'default';
46
47
    /**
48
     * @psalm-var array<string,FieldFactory>
49
     */
50
    private static array $factories = [];
51
52
    /**
53
     * @psalm-param array<string,array> $configs
54
     */
55
    public static function initialize(array $configs = [], string $defaultConfigName = 'default'): void
56
    {
57
        self::$configs = array_merge(self::$configs, $configs);
58
        self::$defaultConfigName = $defaultConfigName;
59
    }
60
61 1
    public static function button(array $config = []): Button
62
    {
63 1
        return self::getFactory()->button($config);
64
    }
65
66 1
    public static function buttonGroup(array $config = []): ButtonGroup
67
    {
68 1
        return self::getFactory()->buttonGroup($config);
69
    }
70
71 1
    public static function checkbox(FormModelInterface $formModel, string $attribute, array $config = []): Checkbox
72
    {
73 1
        return self::getFactory()->checkbox($formModel, $attribute, $config);
74
    }
75
76 1
    public static function checkboxList(
77
        FormModelInterface $formModel,
78
        string $attribute,
79
        array $config = []
80
    ): CheckboxList {
81 1
        return self::getFactory()->checkboxList($formModel, $attribute, $config);
82
    }
83
84 1
    public static function date(FormModelInterface $formModel, string $attribute, array $config = []): Date
85
    {
86 1
        return self::getFactory()->date($formModel, $attribute, $config);
87
    }
88
89 1
    public static function dateTime(FormModelInterface $formModel, string $attribute, array $config = []): DateTime
90
    {
91 1
        return self::getFactory()->dateTime($formModel, $attribute, $config);
92
    }
93
94 1
    public static function dateTimeLocal(
95
        FormModelInterface $formModel,
96
        string $attribute,
97
        array $config = []
98
    ): DateTimeLocal {
99 1
        return self::getFactory()->dateTimeLocal($formModel, $attribute, $config);
100
    }
101
102 1
    public static function email(FormModelInterface $formModel, string $attribute, array $config = []): Email
103
    {
104 1
        return self::getFactory()->email($formModel, $attribute, $config);
105
    }
106
107 1
    public static function fieldset(array $config = []): Fieldset
108
    {
109 1
        return self::getFactory()->fieldset($config);
110
    }
111
112 1
    public static function hidden(FormModelInterface $formModel, string $attribute, array $config = []): Hidden
113
    {
114 1
        return self::getFactory()->hidden($formModel, $attribute, $config);
115
    }
116
117 1
    public static function image(array $config = []): Image
118
    {
119 1
        return self::getFactory()->image($config);
120
    }
121
122 1
    public static function number(FormModelInterface $formModel, string $attribute, array $config = []): Number
123
    {
124 1
        return self::getFactory()->number($formModel, $attribute, $config);
125
    }
126
127 1
    public static function password(FormModelInterface $formModel, string $attribute, array $config = []): Password
128
    {
129 1
        return self::getFactory()->password($formModel, $attribute, $config);
130
    }
131
132 1
    public static function radioList(FormModelInterface $formModel, string $attribute, array $config = []): RadioList
133
    {
134 1
        return self::getFactory()->radioList($formModel, $attribute, $config);
135
    }
136
137 1
    public static function range(FormModelInterface $formModel, string $attribute, array $config = []): Range
138
    {
139 1
        return self::getFactory()->range($formModel, $attribute, $config);
140
    }
141
142 1
    public static function resetButton(array $config = []): ResetButton
143
    {
144 1
        return self::getFactory()->resetButton($config);
145
    }
146
147 1
    public static function select(FormModelInterface $formModel, string $attribute, array $config = []): Select
148
    {
149 1
        return self::getFactory()->select($formModel, $attribute, $config);
150
    }
151
152 1
    public static function submitButton(array $config = []): SubmitButton
153
    {
154 1
        return self::getFactory()->submitButton($config);
155
    }
156
157 1
    public static function telephone(FormModelInterface $formModel, string $attribute, array $config = []): Telephone
158
    {
159 1
        return self::getFactory()->telephone($formModel, $attribute, $config);
160
    }
161
162 3
    public static function text(FormModelInterface $formModel, string $attribute, array $config = []): Text
163
    {
164 3
        return self::getFactory()->text($formModel, $attribute, $config);
165
    }
166
167 1
    public static function textarea(FormModelInterface $formModel, string $attribute, array $config = []): Textarea
168
    {
169 1
        return self::getFactory()->textarea($formModel, $attribute, $config);
170
    }
171
172 1
    public static function url(FormModelInterface $formModel, string $attribute, array $config = []): Url
173
    {
174 1
        return self::getFactory()->url($formModel, $attribute, $config);
175
    }
176
177 1
    public static function label(FormModelInterface $formModel, string $attribute, array $config = []): Label
178
    {
179 1
        return self::getFactory()->label($formModel, $attribute, $config);
180
    }
181
182 1
    public static function hint(FormModelInterface $formModel, string $attribute, array $config = []): Hint
183
    {
184 1
        return self::getFactory()->hint($formModel, $attribute, $config);
185
    }
186
187 1
    public static function error(FormModelInterface $formModel, string $attribute, array $config = []): Error
188
    {
189 1
        return self::getFactory()->error($formModel, $attribute, $config);
190
    }
191
192
    /**
193
     * @psalm-template T
194
     * @psalm-param class-string<T> $class
195
     * @psalm-return T
196
     */
197
    public function input(string $class, FormModelInterface $formModel, string $attribute, array $config = []): object
198
    {
199
        return self::getFactory()->input($class, $formModel, $attribute, $config);
200
    }
201
202
    /**
203
     * @psalm-template T
204
     * @psalm-param class-string<T> $class
205
     * @psalm-return T
206
     */
207
    public function field(string $class, array $config = []): object
208
    {
209
        return self::getFactory()->field($class, $config);
210
    }
211
212 27
    public static function getFactory(?string $name = null): FieldFactory
213
    {
214 27
        $name = $name ?? self::$defaultConfigName;
215
216 27
        if (!array_key_exists($name, self::$factories)) {
217 1
            if (!array_key_exists($name, self::$configs)) {
218
                throw new RuntimeException(
219
                    sprintf('Configuration with name "%s" not found.', $name)
220
                );
221
            }
222
223
            /** @psalm-suppress MixedArgument */
224 1
            self::$factories[$name] = new FieldFactory(...self::$configs[$name]);
0 ignored issues
show
Bug introduced by
self::configs[$name] is expanded, but the parameter $containerTag of Yiisoft\Form\FieldFactory::__construct() does not expect variable arguments. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

224
            self::$factories[$name] = new FieldFactory(/** @scrutinizer ignore-type */ ...self::$configs[$name]);
Loading history...
225
        }
226
227 27
        return self::$factories[$name];
228
    }
229
}
230