Test Failed
Pull Request — master (#238)
by
unknown
02:27
created

Field::image()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

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

271
            self::$factories[$name] = new FieldFactory(/** @scrutinizer ignore-type */ ...self::$configs[$name]);
Loading history...
272
        }
273
274
        return self::$factories[$name];
275
    }
276
}
277