First commit with working command entity question bundle
This commit is contained in:
commit
1e74905cb5
22
.gitignore
vendored
Normal file
22
.gitignore
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
###> symfony/framework-bundle ###
|
||||||
|
/.env.local
|
||||||
|
/.env.local.php
|
||||||
|
/.env.*.local
|
||||||
|
/config/secrets/prod/prod.decrypt.private.php
|
||||||
|
/public/bundles/
|
||||||
|
/var/
|
||||||
|
/vendor/
|
||||||
|
###< symfony/framework-bundle ###
|
||||||
|
|
||||||
|
###> phpunit/phpunit ###
|
||||||
|
/phpunit.xml
|
||||||
|
.phpunit.result.cache
|
||||||
|
###< phpunit/phpunit ###
|
||||||
|
|
||||||
|
###> symfony/phpunit-bridge ###
|
||||||
|
.phpunit.result.cache
|
||||||
|
/phpunit.xml
|
||||||
|
###< symfony/phpunit-bridge ###
|
||||||
|
|
||||||
|
/temp
|
15
composer.json
Normal file
15
composer.json
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "ardent/util-bundle",
|
||||||
|
"description": "Some utilities usefull for multiple projects",
|
||||||
|
"type": "symfony-bundle",
|
||||||
|
"license": "GPL-3.0-only",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Ardent\\UtilBundle\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"symfony/http-kernel": "^6.1",
|
||||||
|
"symfony/console": "^6.1"
|
||||||
|
}
|
||||||
|
}
|
1341
composer.lock
generated
Normal file
1341
composer.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
10
src/ArdentUtilBundle.php
Normal file
10
src/ArdentUtilBundle.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Ardent\UtilBundle;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpKernel\Bundle\AbstractBundle;
|
||||||
|
|
||||||
|
class ArdentUtilBundle extends AbstractBundle
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
30
src/Command/AbstractEntityCommand.php
Normal file
30
src/Command/AbstractEntityCommand.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Ardent\UtilBundle\Command;
|
||||||
|
|
||||||
|
use Ardent\UtilBundle\EntityBuilder\Builder;
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
|
abstract class AbstractEntityCommand extends Command
|
||||||
|
{
|
||||||
|
abstract function getConfig(): Builder;
|
||||||
|
|
||||||
|
protected function configure(): void
|
||||||
|
{
|
||||||
|
$this
|
||||||
|
->addOption('create', 'c', InputOption::VALUE_NONE, 'Create entity')
|
||||||
|
->addOption('edit', 'e', InputOption::VALUE_NONE, 'Edit entity')
|
||||||
|
->addOption('delete', 'd', InputOption::VALUE_NONE, 'Delete entity')
|
||||||
|
->addOption('show', 's', InputOption::VALUE_NONE, 'Show entity');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
return Command::SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
41
src/EntityBuilder/Builder.php
Normal file
41
src/EntityBuilder/Builder.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Ardent\UtilBundle\EntityBuilder;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||||
|
|
||||||
|
class Builder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var SimpleElement[]
|
||||||
|
*/
|
||||||
|
private array $elements = [];
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
private readonly SymfonyStyle $io,
|
||||||
|
)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function add(SimpleElement|string $element): self
|
||||||
|
{
|
||||||
|
if (is_string($element)) {
|
||||||
|
$element = new SimpleElement($element);
|
||||||
|
}
|
||||||
|
$this->elements[] = $element;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setObject(mixed $object): void
|
||||||
|
{
|
||||||
|
foreach ($this->elements as $element) {
|
||||||
|
$setter = sprintf('set%s', ucfirst($element->getProperty()));
|
||||||
|
if (!method_exists($object, $setter)) {
|
||||||
|
throw new Exception(sprintf('Object does not have setter "%s"', $setter));
|
||||||
|
}
|
||||||
|
$object->$setter($this->io->askQuestion($element->getQuestion()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
26
src/EntityBuilder/SimpleElement.php
Normal file
26
src/EntityBuilder/SimpleElement.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Ardent\UtilBundle\EntityBuilder;
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Question\Question;
|
||||||
|
|
||||||
|
class SimpleElement
|
||||||
|
{
|
||||||
|
public function getQuestion(): Question
|
||||||
|
{
|
||||||
|
$name = ucfirst(strtolower(implode(' ', preg_split('/(?=[A-Z])/', $this->getProperty()))));
|
||||||
|
return new Question($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
private readonly string $property,
|
||||||
|
private readonly array $config = [],
|
||||||
|
)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getProperty(): string
|
||||||
|
{
|
||||||
|
return $this->property;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user