PHP code example of droath / console-form

1. Go to this page and download the library: Download droath/console-form library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

droath / console-form example snippets




$application = new \Symfony\Component\Console\Application('Project-Demo', '0.0.1');

$application->getHelperSet()
    ->set(new \Droath\ConsoleForm\FormHelper());
...


...

$formDiscovery = (new \Droath\ConsoleForm\FormDiscovery())
    ->discover(__DIR__ . '/Form', '\Droath\Project\Form');

$application->getHelperSet()
    ->set(new \Droath\ConsoleForm\FormHelper($formDiscovery));
...



namespace Droath\Project\Form;

use Droath\ConsoleForm\Field\BooleanField;
use Droath\ConsoleForm\Field\SelectField;
use Droath\ConsoleForm\Field\TextField;
use Droath\ConsoleForm\Form;
use Droath\ConsoleForm\FormInterface;

/**
 * Define project setup form.
 */
class ProjectSetup implements FormInterface
{
    /**
     * {@inheritdoc}
     */
    public function getName()
    {
        return 'project.form.setup';
    }

    /**
     * {@inheritdoc}
     */
    public function buildForm()
    {
        return (new Form())
            ->addField(new TextField('name', 'What is your name?'))
            ->addField((new SelectField('gender', 'What is your gender?'))
                ->setOptions(['male', 'female', 'other']))
            ->addField(new BooleanField('send_newletter', 'Email me the weekly newsletter'));
    }
}



namespace Droath\Project\Command;

use Droath\ConsoleForm\Field\BooleanField;
use Droath\ConsoleForm\Field\SelectField;
use Droath\ConsoleForm\Field\TextField;
use Droath\ConsoleForm\Form;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class Initialize extends Command
{
    /**
     * {@inheritdoc}
     */
    public function configure()
    {
        $this
            ->setName('init')
            ->setDescription('Initialize project config.');
    }

    /**
     * {@inheritdoc}
     */
    public function execute(InputInterface $input, OutputInterface $output)
    {
        $form = $this->getHelper('form')
            ->getForm($input, $output);

        $form->addFields([
            (new TextField('project', 'Project name'))
                ->setDefault('Demo Project'),
            (new SelectField('version', 'Project Version'))
                ->setOptions(['7.x', '8.x'])
                ->setDefault('8.x'),
        ]);

        $results = $form
            ->process()
            ->getResults();

        var_dump($results)
    }
    ...



namespace Droath\Project\Command;

use Droath\ConsoleForm\Field\BooleanField;
use Droath\ConsoleForm\Field\SelectField;
use Droath\ConsoleForm\Field\TextField;
use Droath\ConsoleForm\Form;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class Initialize extends Command
{
    /**
     * {@inheritdoc}
     */
    public function configure()
    {
        $this
            ->setName('init')
            ->setDescription('Initialize project config.');
    }

    /**
     * {@inheritdoc}
     */
    public function execute(InputInterface $input, OutputInterface $output)
    {
        $form = $this->getHelper('form')
            ->getFormByName('project.form.setup', $input, $output);

        $results = $form
            ->process()
            ->getResults();

        var_dump($results)
    }

    ...



...
    $form
        ->addFields([
            (new TextField('project', 'Project name'))
                ->setDefault('Demo Project'),
            (new SelectField('version', 'Project Version'))
                ->setOptions(['7.x', '8.x'])
                ->setDefault('8.x'),
        ])
        ->save(function($results) {
            // Save results to filesystem or remote source.
            // Don't need to call process() as it's done inside the save method.
        });


...

    $form->addFields([
        (new TextField('name', 'Project Name')),
        (new FieldGroup('environments'))
            ->addFields([
                (new TextField('ssh_label', 'SSH Label'))
                    ->setRequired(false),
                (new TextField('ssh_host', 'SSH Host'))
                    ->setRequired(false),
                (new Textfield('ssh_uri', 'SSH URI'))
                    ->setRequired(false)
            ])
            ->setLoopUntil(function($result) {
                if (!isset($result['ssh_label'])) {
                    return false;
                }
                return true;
            })
    ]);

    $results = $form
        ->process()
        ->getResults();


...
    $form
        ->addFields([
            (new TextField('project', 'Project name'))
                ->setDefault('Demo Project'),
            (new SelectField('version', 'Project Version'))
                ->setOptions(['7.x', '8.x'])
                ->setDefault('8.x'),
            (new TextField('another_option', 'More options for 7.x version'))
                ->setCondition('version', '7.x'),
        ]);

    $results = $form
        ->process()
        ->getResults();


...

    $form
        ->addFields([
            (new TextField('name', 'Project Name')),
            (new SelectField('version', 'Project Version'))
                ->setFieldCallback(function ($field, $results) {
                    if ($results['name'] === 'My Project') {
                        $field->setOptions([
                            '7' => '7x',
                            '8' => '8x'
                        ]);
                    } else {
                        $field->setOptions([
                            '11' => '11x',
                            '12' => '12x'
                        ]);
                    }
                }),
        ]);



...

    $form
        ->addFields([
            (new BooleanField('questions', 'Ask questions?'))
                ->setSubform(function ($subform, $value) {
                    if ($value === true) {
                        $subform->addFields([
                            (new TextField('how_old', 'How old are you?')),
                            (new TextField('location', 'Where do you live?')),
                        ]);
                    }
                }),
        ]);

        $results = $form
            ->process()
            ->getResults();