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

173
            self::$factories[$name] = new FieldFactory(/** @scrutinizer ignore-type */ ...self::$configs[$name]);
Loading history...
174
        }
175
176 17
        return self::$factories[$name];
177
    }
178
}
179