aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/symfony/options-resolver/Symfony/Component/OptionsResolver/OptionsResolverInterface.php
blob: 8474c4bcd793d6303aca905e36d37f6af4cd6942 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\OptionsResolver;

/**
 * @author Bernhard Schussek <bschussek@gmail.com>
 */
interface OptionsResolverInterface
{
    /**
     * Sets default option values.
     *
     * The options can either be values of any types or closures that
     * evaluate the option value lazily. These closures must have one
     * of the following signatures:
     *
     * <code>
     * function (Options $options)
     * function (Options $options, $value)
     * </code>
     *
     * The second parameter passed to the closure is the previously
     * set default value, in case you are overwriting an existing
     * default value.
     *
     * The closures should return the lazily created option value.
     *
     * @param array $defaultValues A list of option names as keys and default
     *                             values or closures as values.
     *
     * @return OptionsResolverInterface The resolver instance.
     */
    public function setDefaults(array $defaultValues);

    /**
     * Replaces default option values.
     *
     * Old defaults are erased, which means that closures passed here cannot
     * access the previous default value. This may be useful to improve
     * performance if the previous default value is calculated by an expensive
     * closure.
     *
     * @param array $defaultValues A list of option names as keys and default
     *                             values or closures as values.
     *
     * @return OptionsResolverInterface The resolver instance.
     */
    public function replaceDefaults(array $defaultValues);

    /**
     * Sets optional options.
     *
     * This method declares valid option names without setting default values for them.
     * If these options are not passed to {@link resolve()} and no default has been set
     * for them, they will be missing in the final options array. This can be helpful
     * if you want to determine whether an option has been set or not because otherwise
     * {@link resolve()} would trigger an exception for unknown options.
     *
     * @param array $optionNames A list of option names.
     *
     * @return OptionsResolverInterface The resolver instance.
     *
     * @throws Exception\OptionDefinitionException When trying to pass default values.
     */
    public function setOptional(array $optionNames);

    /**
     * Sets required options.
     *
     * If these options are not passed to {@link resolve()} and no default has been set for
     * them, an exception will be thrown.
     *
     * @param array $optionNames A list of option names.
     *
     * @return OptionsResolverInterface The resolver instance.
     *
     * @throws Exception\OptionDefinitionException When trying to pass default values.
     */
    public function setRequired(array $optionNames);

    /**
     * Sets allowed values for a list of options.
     *
     * @param array $allowedValues A list of option names as keys and arrays
     *                             with values acceptable for that option as
     *                             values.
     *
     * @return OptionsResolverInterface The resolver instance.
     *
     * @throws Exception\InvalidOptionsException If an option has not been defined
     *                                 (see {@link isKnown()}) for which
     *                                 an allowed value is set.
     */
    public function setAllowedValues(array $allowedValues);

    /**
     * Adds allowed values for a list of options.
     *
     * The values are merged with the allowed values defined previously.
     *
     * @param array $allowedValues A list of option names as keys and arrays
     *                             with values acceptable for that option as
     *                             values.
     *
     * @return OptionsResolverInterface The resolver instance.
     *
     * @throws Exception\InvalidOptionsException If an option has not been defined
     *                                 (see {@link isKnown()}) for which
     *                                 an allowed value is set.
     */
    public function addAllowedValues(array $allowedValues);

    /**
     * Sets allowed types for a list of options.
     *
     * @param array $allowedTypes A list of option names as keys and type
     *                            names passed as string or array as values.
     *
     * @return OptionsResolverInterface The resolver instance.
     *
     * @throws Exception\InvalidOptionsException If an option has not been defined for
     *                                           which an allowed type is set.
     */
    public function setAllowedTypes(array $allowedTypes);

    /**
     * Adds allowed types for a list of options.
     *
     * The types are merged with the allowed types defined previously.
     *
     * @param array $allowedTypes A list of option names as keys and type
     *                            names passed as string or array as values.
     *
     * @return OptionsResolverInterface The resolver instance.
     *
     * @throws Exception\InvalidOptionsException If an option has not been defined for
     *                                           which an allowed type is set.
     */
    public function addAllowedTypes(array $allowedTypes);

    /**
     * Sets normalizers that are applied on resolved options.
     *
     * The normalizers should be closures with the following signature:
     *
     * <code>
     * function (Options $options, $value)
     * </code>
     *
     * The second parameter passed to the closure is the value of
     * the option.
     *
     * The closure should return the normalized value.
     *
     * @param array $normalizers An array of closures.
     *
     * @return OptionsResolverInterface The resolver instance.
     */
    public function setNormalizers(array $normalizers);

    /**
     * Returns whether an option is known.
     *
     * An option is known if it has been passed to either {@link setDefaults()},
     * {@link setRequired()} or {@link setOptional()} before.
     *
     * @param string $option The name of the option.
     *
     * @return Boolean Whether the option is known.
     */
    public function isKnown($option);

    /**
     * Returns whether an option is required.
     *
     * An option is required if it has been passed to {@link setRequired()},
     * but not to {@link setDefaults()}. That is, the option has been declared
     * as required and no default value has been set.
     *
     * @param string $option The name of the option.
     *
     * @return Boolean Whether the option is required.
     */
    public function isRequired($option);

    /**
     * Returns the combination of the default and the passed options.
     *
     * @param array $options The custom option values.
     *
     * @return array A list of options and their values.
     *
     * @throws Exception\InvalidOptionsException   If any of the passed options has not
     *                                             been defined or does not contain an
     *                                             allowed value.
     * @throws Exception\MissingOptionsException   If a required option is missing.
     * @throws Exception\OptionDefinitionException If a cyclic dependency is detected
     *                                             between two lazy options.
     */
    public function resolve(array $options = array());
}