diff --git a/src/Drupal/Commands/core/FieldBaseInfoCommands.php b/src/Drupal/Commands/core/FieldBaseInfoCommands.php new file mode 100644 index 0000000000..19017008da --- /dev/null +++ b/src/Drupal/Commands/core/FieldBaseInfoCommands.php @@ -0,0 +1,82 @@ +entityTypeManager = $entityTypeManager; + $this->entityTypeBundleInfo = $entityTypeBundleInfo; + $this->entityFieldManager = $entityFieldManager; + } + + /** + * List all base fields of an entity type + * + * @command field:base-info + * @aliases field-base-info,fbi + * + * @param string $entityType + * The machine name of the entity type + * + * @option show-machine-names + * Show machine names instead of labels in option lists. + * + * @default-fields field_name,required,field_type,cardinality + * @field-labels + * label: Label + * description: Description + * field_name: Field name + * field_type: Field type + * required: Required + * translatable: Translatable + * cardinality: Cardinality + * default_value: Default value + * default_value_callback: Default value callback + * allowed_values: Allowed values + * allowed_values_function: Allowed values function + * handler: Selection handler + * target_bundles: Target bundles + * @filter-default-field field_name + * @table-style default + * + * @usage drush field:base-info taxonomy_term + * List all base fields. + * @usage drush field:base-info + * List all base fields and fill in the remaining information through prompts. + * + * @version 11.0 + */ + public function info(?string $entityType = null, array $options = [ + 'format' => 'table', + ]): RowsOfFields + { + $this->input->setArgument('entityType', $entityType = $entityType ?? $this->askEntityType()); + $this->validateEntityType($entityType); + + $fieldDefinitions = $this->entityFieldManager->getBaseFieldDefinitions($entityType); + + return $this->getRowsOfFieldsByFieldDefinitions($fieldDefinitions); + } +} diff --git a/src/Drupal/Commands/core/FieldInfoCommands.php b/src/Drupal/Commands/core/FieldInfoCommands.php index 5560ffcea7..68c6770b71 100644 --- a/src/Drupal/Commands/core/FieldInfoCommands.php +++ b/src/Drupal/Commands/core/FieldInfoCommands.php @@ -2,9 +2,8 @@ namespace Drush\Drupal\Commands\core; -use Consolidation\OutputFormatters\Options\FormatterOptions; use Consolidation\OutputFormatters\StructuredData\RowsOfFields; -use Drupal\Core\Entity\EntityTypeBundleInfo; +use Drupal\Core\Entity\EntityTypeBundleInfoInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drush\Commands\DrushCommands; @@ -16,12 +15,12 @@ class FieldInfoCommands extends DrushCommands /** @var EntityTypeManagerInterface */ protected $entityTypeManager; - /** @var EntityTypeBundleInfo */ + /** @var EntityTypeBundleInfoInterface */ protected $entityTypeBundleInfo; public function __construct( EntityTypeManagerInterface $entityTypeManager, - EntityTypeBundleInfo $entityTypeBundleInfo + EntityTypeBundleInfoInterface $entityTypeBundleInfo ) { $this->entityTypeManager = $entityTypeManager; $this->entityTypeBundleInfo = $entityTypeBundleInfo; diff --git a/src/Drupal/Commands/core/drush.services.yml b/src/Drupal/Commands/core/drush.services.yml index 2aaac6c711..a5d6faf5e9 100644 --- a/src/Drupal/Commands/core/drush.services.yml +++ b/src/Drupal/Commands/core/drush.services.yml @@ -49,6 +49,14 @@ services: - '@entity_type.bundle.info' tags: - { name: drush.command } + field.base-info.commands: + class: \Drush\Drupal\Commands\core\FieldBaseInfoCommands + arguments: + - '@entity_type.manager' + - '@entity_type.bundle.info' + - '@entity_field.manager' + tags: + - { name: drush.command } link.hooks: class: \Drush\Drupal\Commands\core\LinkHooks arguments: diff --git a/tests/functional/FieldTest.php b/tests/functional/FieldTest.php index 3524ac3d35..0a4d4488ea 100644 --- a/tests/functional/FieldTest.php +++ b/tests/functional/FieldTest.php @@ -92,4 +92,12 @@ public function testFieldDelete() $this->drush('field:delete', ['unish_article', 'alpha'], ['field-name' => 'field_test5']); $this->assertStringContainsString(" The field Test has been deleted from the Alpha bundle.", $this->getErrorOutputRaw()); } + + public function testFieldBaseInfo() + { + $this->drush('field:base-info', ['user'], ['format' => 'json', 'fields' => '*']); + $json = $this->getOutputFromJSON(); + $this->assertArrayHasKey('name', $json); + $this->assertSame('Name', $json['name']['label']); + } }