Passed
Pull Request — master (#192)
by Sergei
02:45
created

Field   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 154
Duplicated Lines 0 %

Test Coverage

Coverage 82.35%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 33
dl 0
loc 154
ccs 42
cts 51
cp 0.8235
rs 10
c 2
b 0
f 0
wmc 24

22 Methods

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

179
            self::$factories[$name] = new FieldFactory(/** @scrutinizer ignore-type */ ...self::$configs[$name]);
Loading history...
180
        }
181
182 18
        return self::$factories[$name];
183
    }
184
}
185