1 | <?php |
||
29 | abstract class AbstractEnumType extends Type |
||
30 | { |
||
31 | /** |
||
32 | * @var string |
||
33 | */ |
||
34 | protected $name = ''; |
||
35 | |||
36 | /** |
||
37 | * @var array Array of ENUM Values, where ENUM values are keys and their readable versions are values |
||
38 | * @static |
||
39 | */ |
||
40 | protected static $choices = []; |
||
41 | |||
42 | /** |
||
43 | * {@inheritdoc} |
||
44 | */ |
||
45 | public function convertToDatabaseValue($value, AbstractPlatform $platform) |
||
46 | { |
||
47 | if (null === $value) { |
||
48 | return; |
||
49 | } |
||
50 | |||
51 | if (!isset(static::$choices[$value])) { |
||
52 | throw new \InvalidArgumentException(sprintf('Invalid value "%s" for ENUM "%s".', $value, $this->getName())); |
||
53 | } |
||
54 | |||
55 | return $value; |
||
56 | } |
||
57 | |||
58 | /** |
||
59 | * {@inheritdoc} |
||
60 | */ |
||
61 | public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform) |
||
62 | { |
||
63 | $values = implode( |
||
64 | ', ', |
||
65 | array_map( |
||
66 | function ($value) { |
||
67 | return "'{$value}'"; |
||
68 | }, |
||
69 | static::getValues() |
||
70 | ) |
||
71 | ); |
||
72 | |||
73 | if ($platform instanceof SqlitePlatform) { |
||
74 | return sprintf('TEXT CHECK(%s IN (%s))', $fieldDeclaration['name'], $values); |
||
75 | } |
||
76 | |||
77 | if ($platform instanceof PostgreSqlPlatform || $platform instanceof SQLServerPlatform) { |
||
78 | return sprintf('VARCHAR(255) CHECK(%s IN (%s))', $fieldDeclaration['name'], $values); |
||
79 | } |
||
80 | |||
81 | return sprintf('ENUM(%s)', $values); |
||
82 | } |
||
83 | |||
84 | /** |
||
85 | * {@inheritdoc} |
||
86 | */ |
||
87 | public function requiresSQLCommentHint(AbstractPlatform $platform) |
||
91 | |||
92 | /** |
||
93 | * {@inheritdoc} |
||
94 | */ |
||
95 | public function getName() |
||
99 | |||
100 | /** |
||
101 | * Get readable choices for the ENUM field. |
||
102 | * |
||
103 | * @static |
||
104 | * |
||
105 | * @return array Values for the ENUM field |
||
106 | */ |
||
107 | public static function getChoices() |
||
111 | |||
112 | /** |
||
113 | * Get values for the ENUM field. |
||
114 | * |
||
115 | * @static |
||
116 | * |
||
117 | * @return array Values for the ENUM field |
||
118 | */ |
||
119 | public static function getValues() |
||
123 | |||
124 | /** |
||
125 | * Get array of ENUM Values, where ENUM values are keys and their readable versions are values. |
||
126 | * |
||
127 | * @static |
||
128 | * |
||
129 | * @return array Array of values with readable format |
||
130 | */ |
||
131 | public static function getReadableValues() |
||
135 | |||
136 | /** |
||
137 | * Get value in readable format. |
||
138 | * |
||
139 | * @param string $value ENUM value |
||
140 | * |
||
141 | * @static |
||
142 | * |
||
143 | * @return string|null $value Value in readable format |
||
144 | * |
||
145 | * @throws \InvalidArgumentException |
||
146 | */ |
||
147 | public static function getReadableValue($value) |
||
155 | |||
156 | /** |
||
157 | * Check if some string value exists in the array of ENUM values. |
||
158 | * |
||
159 | * @param string $value ENUM value |
||
160 | * |
||
161 | * @static |
||
162 | * |
||
163 | * @return bool |
||
164 | */ |
||
165 | public static function isValueExist($value) |
||
169 | |||
170 | /** |
||
171 | * Gets an array of database types that map to this Doctrine type. |
||
172 | * |
||
173 | * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform |
||
174 | * |
||
175 | * @return array |
||
176 | */ |
||
177 | public function getMappedDatabaseTypes(AbstractPlatform $platform) |
||
190 | } |
||
191 |
The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.
The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.
To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.