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

Field::initialize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

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

191
            self::$factories[$name] = new FieldFactory(/** @scrutinizer ignore-type */ ...self::$configs[$name]);
Loading history...
192
        }
193
194 20
        return self::$factories[$name];
195
    }
196
}
197