Passed
Push — master ( 4c4f3f...4700f4 )
by Sergei
02:48
created

Field::checkboxList()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 3
dl 0
loc 6
ccs 2
cts 2
cp 1
crap 1
rs 10
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\ErrorSummary;
17
use Yiisoft\Form\Field\Fieldset;
18
use Yiisoft\Form\Field\File;
19
use Yiisoft\Form\Field\Hidden;
20
use Yiisoft\Form\Field\Image;
21
use Yiisoft\Form\Field\Number;
22
use Yiisoft\Form\Field\Part\Error;
23
use Yiisoft\Form\Field\Part\Hint;
24
use Yiisoft\Form\Field\Part\Label;
25
use Yiisoft\Form\Field\Password;
26
use Yiisoft\Form\Field\RadioList;
27
use Yiisoft\Form\Field\Range;
28
use Yiisoft\Form\Field\ResetButton;
29
use Yiisoft\Form\Field\Select;
30
use Yiisoft\Form\Field\SubmitButton;
31
use Yiisoft\Form\Field\Telephone;
32
use Yiisoft\Form\Field\Text;
33
use Yiisoft\Form\Field\Textarea;
34
use Yiisoft\Form\Field\Url;
35
36
use function array_key_exists;
37
38
final class Field
39
{
40
    /**
41
     * @psalm-var array<string,array>
42
     */
43
    private static array $configs = [
44
        'default' => [],
45
    ];
46
47
    private static string $defaultConfigName = 'default';
48
49
    /**
50
     * @psalm-var array<string,FieldFactory>
51
     */
52
    private static array $factories = [];
53
54
    /**
55
     * @param array<string,array> $configs Array of configurations with {@see FieldFactory::__construct()}
56
     * arguments indexed by name. For example:
57
     * ```php
58
     * [
59
     *     'default' => [
60
     *         'containerClass' => 'formField',
61
     *     ],
62
     *     'bulma' => [
63
     *         'containerClass' => 'field',
64
     *         'inputClass' => 'input',
65
     *         'invalidClass' => 'has-background-danger',
66
     *         'validClass' => 'has-background-success',
67
     *         'template' => "{label}<div class=\"control\">\n{input}</div>\n{hint}\n{error}",
68
     *         'labelClass' => 'label',
69
     *         'errorClass' => 'has-text-danger is-italic',
70
     *         'hintClass' => 'help',
71
     *     ],
72
     *     'bootstrap5' => [
73
     *         'containerClass' => 'mb-3',
74
     *         'invalidClass' => 'is-invalid',
75
     *         'errorClass' => 'text-danger fst-italic',
76
     *         'hintClass' => 'form-text',
77
     *         'inputClass' => 'form-control',
78
     *         'labelClass' => 'form-label',
79
     *         'validClass' => 'is-valid',
80
     *     ],
81
     * ]
82
     * ```
83
     * @param string $defaultConfigName Configuration name that will be used for create fields by default. If value is
84
     * not "default", then `$configs` must contain configuration with this name.
85
     */
86 32
    public static function initialize(array $configs = [], string $defaultConfigName = 'default'): void
87
    {
88 32
        self::$configs = array_merge(self::$configs, $configs);
89 32
        self::$defaultConfigName = $defaultConfigName;
90
    }
91
92 1
    public static function button(array $config = []): Button
93
    {
94 1
        return self::getFactory()->button($config);
95
    }
96
97 1
    public static function buttonGroup(array $config = []): ButtonGroup
98
    {
99 1
        return self::getFactory()->buttonGroup($config);
100
    }
101
102 1
    public static function checkbox(FormModelInterface $formModel, string $attribute, array $config = []): Checkbox
103
    {
104 1
        return self::getFactory()->checkbox($formModel, $attribute, $config);
105
    }
106
107 1
    public static function checkboxList(
108
        FormModelInterface $formModel,
109
        string $attribute,
110
        array $config = []
111
    ): CheckboxList {
112 1
        return self::getFactory()->checkboxList($formModel, $attribute, $config);
113
    }
114
115 1
    public static function date(FormModelInterface $formModel, string $attribute, array $config = []): Date
116
    {
117 1
        return self::getFactory()->date($formModel, $attribute, $config);
118
    }
119
120 1
    public static function dateTime(FormModelInterface $formModel, string $attribute, array $config = []): DateTime
121
    {
122 1
        return self::getFactory()->dateTime($formModel, $attribute, $config);
123
    }
124
125 1
    public static function dateTimeLocal(
126
        FormModelInterface $formModel,
127
        string $attribute,
128
        array $config = []
129
    ): DateTimeLocal {
130 1
        return self::getFactory()->dateTimeLocal($formModel, $attribute, $config);
131
    }
132
133 1
    public static function email(FormModelInterface $formModel, string $attribute, array $config = []): Email
134
    {
135 1
        return self::getFactory()->email($formModel, $attribute, $config);
136
    }
137
138 1
    public static function errorSummary(FormModelInterface $formModel, array $config = []): ErrorSummary
139
    {
140 1
        return self::getFactory()->errorSummary($formModel, $config);
141
    }
142
143 2
    public static function fieldset(array $config = []): Fieldset
144
    {
145 2
        return self::getFactory()->fieldset($config);
146
    }
147
148 1
    public static function file(FormModelInterface $formModel, string $attribute, array $config = []): File
149
    {
150 1
        return self::getFactory()->file($formModel, $attribute, $config);
151
    }
152
153 2
    public static function hidden(FormModelInterface $formModel, string $attribute, array $config = []): Hidden
154
    {
155 2
        return self::getFactory()->hidden($formModel, $attribute, $config);
156
    }
157
158 1
    public static function image(array $config = []): Image
159
    {
160 1
        return self::getFactory()->image($config);
161
    }
162
163 1
    public static function number(FormModelInterface $formModel, string $attribute, array $config = []): Number
164
    {
165 1
        return self::getFactory()->number($formModel, $attribute, $config);
166
    }
167
168 1
    public static function password(FormModelInterface $formModel, string $attribute, array $config = []): Password
169
    {
170 1
        return self::getFactory()->password($formModel, $attribute, $config);
171
    }
172
173 1
    public static function radioList(FormModelInterface $formModel, string $attribute, array $config = []): RadioList
174
    {
175 1
        return self::getFactory()->radioList($formModel, $attribute, $config);
176
    }
177
178 1
    public static function range(FormModelInterface $formModel, string $attribute, array $config = []): Range
179
    {
180 1
        return self::getFactory()->range($formModel, $attribute, $config);
181
    }
182
183 1
    public static function resetButton(array $config = []): ResetButton
184
    {
185 1
        return self::getFactory()->resetButton($config);
186
    }
187
188 1
    public static function select(FormModelInterface $formModel, string $attribute, array $config = []): Select
189
    {
190 1
        return self::getFactory()->select($formModel, $attribute, $config);
191
    }
192
193 1
    public static function submitButton(array $config = []): SubmitButton
194
    {
195 1
        return self::getFactory()->submitButton($config);
196
    }
197
198 1
    public static function telephone(FormModelInterface $formModel, string $attribute, array $config = []): Telephone
199
    {
200 1
        return self::getFactory()->telephone($formModel, $attribute, $config);
201
    }
202
203 3
    public static function text(FormModelInterface $formModel, string $attribute, array $config = []): Text
204
    {
205 3
        return self::getFactory()->text($formModel, $attribute, $config);
206
    }
207
208 1
    public static function textarea(FormModelInterface $formModel, string $attribute, array $config = []): Textarea
209
    {
210 1
        return self::getFactory()->textarea($formModel, $attribute, $config);
211
    }
212
213 1
    public static function url(FormModelInterface $formModel, string $attribute, array $config = []): Url
214
    {
215 1
        return self::getFactory()->url($formModel, $attribute, $config);
216
    }
217
218 1
    public static function label(FormModelInterface $formModel, string $attribute, array $config = []): Label
219
    {
220 1
        return self::getFactory()->label($formModel, $attribute, $config);
221
    }
222
223 1
    public static function hint(FormModelInterface $formModel, string $attribute, array $config = []): Hint
224
    {
225 1
        return self::getFactory()->hint($formModel, $attribute, $config);
226
    }
227
228 1
    public static function error(FormModelInterface $formModel, string $attribute, array $config = []): Error
229
    {
230 1
        return self::getFactory()->error($formModel, $attribute, $config);
231
    }
232
233
    /**
234
     * @psalm-template T
235
     * @psalm-param class-string<T> $class
236
     * @psalm-return T
237
     */
238 1
    public static function input(string $class, FormModelInterface $formModel, string $attribute, array $config = []): object
239
    {
240 1
        return self::getFactory()->input($class, $formModel, $attribute, $config);
241
    }
242
243
    /**
244
     * @psalm-template T
245
     * @psalm-param class-string<T> $class
246
     * @psalm-return T
247
     */
248 1
    public static function field(string $class, array $config = []): object
249
    {
250 1
        return self::getFactory()->field($class, $config);
251
    }
252
253 34
    public static function getFactory(?string $name = null): FieldFactory
254
    {
255 34
        $name = $name ?? self::$defaultConfigName;
256
257 34
        if (!array_key_exists($name, self::$factories)) {
258 3
            if (!array_key_exists($name, self::$configs)) {
259 1
                throw new RuntimeException(
260 1
                    sprintf('Configuration with name "%s" not found.', $name)
261
                );
262
            }
263
264
            /** @psalm-suppress MixedArgument */
265 2
            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

265
            self::$factories[$name] = new FieldFactory(/** @scrutinizer ignore-type */ ...self::$configs[$name]);
Loading history...
266
        }
267
268 33
        return self::$factories[$name];
269
    }
270
}
271