| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | <?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\Console\Helper;use Symfony\Component\Console\Descriptor\DescriptorInterface;use Symfony\Component\Console\Descriptor\JsonDescriptor;use Symfony\Component\Console\Descriptor\MarkdownDescriptor;use Symfony\Component\Console\Descriptor\TextDescriptor;use Symfony\Component\Console\Descriptor\XmlDescriptor;use Symfony\Component\Console\Exception\InvalidArgumentException;use Symfony\Component\Console\Output\OutputInterface;/** * This class adds helper method to describe objects in various formats. * * @author Jean-François Simon <contact@jfsimon.fr> */class DescriptorHelper extends Helper{    /**     * @var DescriptorInterface[]     */    private $descriptors = [];    public function __construct()    {        $this            ->register('txt', new TextDescriptor())            ->register('xml', new XmlDescriptor())            ->register('json', new JsonDescriptor())            ->register('md', new MarkdownDescriptor())        ;    }    /**     * Describes an object if supported.     *     * Available options are:     * * format: string, the output format name     * * raw_text: boolean, sets output type as raw     *     * @throws InvalidArgumentException when the given format is not supported     */    public function describe(OutputInterface $output, ?object $object, array $options = [])    {        $options = array_merge([            'raw_text' => false,            'format' => 'txt',        ], $options);        if (!isset($this->descriptors[$options['format']])) {            throw new InvalidArgumentException(sprintf('Unsupported format "%s".', $options['format']));        }        $descriptor = $this->descriptors[$options['format']];        $descriptor->describe($output, $object, $options);    }    /**     * Registers a descriptor.     *     * @return $this     */    public function register(string $format, DescriptorInterface $descriptor)    {        $this->descriptors[$format] = $descriptor;        return $this;    }    /**     * {@inheritdoc}     */    public function getName()    {        return 'descriptor';    }    public function getFormats(): array    {        return array_keys($this->descriptors);    }}
 |