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
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Setup\Option;
/**
* Select option in deployment config tool
*/
class SelectConfigOption extends AbstractConfigOption
{
/**#@+
* Frontend input types
*/
const FRONTEND_WIZARD_RADIO = 'radio';
const FRONTEND_WIZARD_SELECT = 'select';
/**#@- */
/**#@- */
private $selectOptions;
/**
* Constructor
*
* @param string $name
* @param string $frontendType
* @param array $selectOptions
* @param string $configPath
* @param string $description
* @param string|null $defaultValue
* @param string|array|null $shortCut
* @throws \InvalidArgumentException
*/
public function __construct(
$name,
$frontendType,
array $selectOptions,
$configPath,
$description = '',
$defaultValue = null,
$shortCut = null
) {
if ($frontendType != self::FRONTEND_WIZARD_SELECT && $frontendType != self::FRONTEND_WIZARD_RADIO) {
throw new \InvalidArgumentException("Frontend input type has to be 'select' or 'radio'.");
}
if (!$selectOptions) {
throw new \InvalidArgumentException('Select options can\'t be empty.');
}
$this->selectOptions = $selectOptions;
parent::__construct(
$name,
$frontendType,
self::VALUE_REQUIRED,
$configPath,
$description,
$defaultValue,
$shortCut
);
}
/**
* Get available options
*
* @return array
*/
public function getSelectOptions()
{
return $this->selectOptions;
}
/**
* Validates input data
*
* @param mixed $data
* @return void
* @throws \InvalidArgumentException
*/
public function validate($data)
{
if (!in_array($data, $this->getSelectOptions())) {
throw new \InvalidArgumentException("Value specified for '{$this->getName()}' is not supported: '{$data}'");
}
parent::validate($data);
}
}