Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 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
 
12
namespace Symfony\Component\Console\Question;
13
 
14
/**
15
 * Represents a yes/no question.
16
 *
17
 * @author Fabien Potencier <fabien@symfony.com>
18
 */
19
class ConfirmationQuestion extends Question
20
{
21
    private string $trueAnswerRegex;
22
 
23
    /**
24
     * @param string $question        The question to ask to the user
25
     * @param bool   $default         The default answer to return, true or false
26
     * @param string $trueAnswerRegex A regex to match the "yes" answer
27
     */
28
    public function __construct(string $question, bool $default = true, string $trueAnswerRegex = '/^y/i')
29
    {
30
        parent::__construct($question, $default);
31
 
32
        $this->trueAnswerRegex = $trueAnswerRegex;
33
        $this->setNormalizer($this->getDefaultNormalizer());
34
    }
35
 
36
    /**
37
     * Returns the default answer normalizer.
38
     */
39
    private function getDefaultNormalizer(): callable
40
    {
41
        $default = $this->getDefault();
42
        $regex = $this->trueAnswerRegex;
43
 
44
        return function ($answer) use ($default, $regex) {
45
            if (\is_bool($answer)) {
46
                return $answer;
47
            }
48
 
49
            $answerIsTrue = (bool) preg_match($regex, $answer);
50
            if (false === $default) {
51
                return $answer && $answerIsTrue;
52
            }
53
 
54
            return '' === $answer || $answerIsTrue;
55
        };
56
    }
57
}