1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Component\Config\Definition;
13
14use Symfony\Component\Config\Definition\Exception\InvalidTypeException;
15
16/**
17 * This node represents a scalar value in the config tree.
18 *
19 * The following values are considered scalars:
20 *   * booleans
21 *   * strings
22 *   * null
23 *   * integers
24 *   * floats
25 *
26 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
27 */
28class ScalarNode extends VariableNode
29{
30    /**
31     * {@inheritdoc}
32     */
33    protected function validateType($value)
34    {
35        if (!is_scalar($value) && null !== $value) {
36            $ex = new InvalidTypeException(sprintf('Invalid type for path "%s". Expected scalar, but got %s.', $this->getPath(), \gettype($value)));
37            if ($hint = $this->getInfo()) {
38                $ex->addHint($hint);
39            }
40            $ex->setPath($this->getPath());
41
42            throw $ex;
43        }
44    }
45
46    /**
47     * {@inheritdoc}
48     */
49    protected function isValueEmpty($value)
50    {
51        // assume environment variables are never empty (which in practice is likely to be true during runtime)
52        // not doing so breaks many configs that are valid today
53        if ($this->isHandlingPlaceholder()) {
54            return false;
55        }
56
57        return null === $value || '' === $value;
58    }
59
60    /**
61     * {@inheritdoc}
62     */
63    protected function getValidPlaceholderTypes(): array
64    {
65        return ['bool', 'int', 'float', 'string'];
66    }
67}
68