Initial Drupal 11 with DDEV setup
This commit is contained in:
@ -0,0 +1,14 @@
|
||||
{{ machine_name }}.{{ entity_type_id }}.*:
|
||||
type: config_entity
|
||||
label: {{ entity_type_label }}
|
||||
mapping:
|
||||
id:
|
||||
type: string
|
||||
label: ID
|
||||
label:
|
||||
type: label
|
||||
label: Label
|
||||
uuid:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
@ -0,0 +1,5 @@
|
||||
entity.{{ entity_type_id }}.add_form:
|
||||
route_name: 'entity.{{ entity_type_id }}.add_form'
|
||||
title: 'Add {{ entity_type_label|lower }}'
|
||||
appears_on:
|
||||
- entity.{{ entity_type_id }}.collection
|
||||
@ -0,0 +1,5 @@
|
||||
entity.{{ entity_type_id }}.overview:
|
||||
title: {{ entity_type_label|pluralize }}
|
||||
parent: system.admin_structure
|
||||
description: 'List of {{ entity_type_label|lower|pluralize }} to extend site functionality.'
|
||||
route_name: entity.{{ entity_type_id }}.collection
|
||||
@ -0,0 +1,2 @@
|
||||
administer {{ entity_type_id }}:
|
||||
title: 'Administer {{ entity_type_label|lower }}'
|
||||
@ -0,0 +1,31 @@
|
||||
entity.{{ entity_type_id }}.collection:
|
||||
path: '/admin/structure/{{ entity_type_id|u2h }}'
|
||||
defaults:
|
||||
_entity_list: '{{ entity_type_id }}'
|
||||
_title: '{{ entity_type_label }} configuration'
|
||||
requirements:
|
||||
_permission: 'administer {{ entity_type_id }}'
|
||||
|
||||
entity.{{ entity_type_id }}.add_form:
|
||||
path: '/admin/structure/{{ entity_type_id }}/add'
|
||||
defaults:
|
||||
_entity_form: '{{ entity_type_id }}.add'
|
||||
_title: 'Add {{ entity_type_label|article|lower }}'
|
||||
requirements:
|
||||
_permission: 'administer {{ entity_type_id }}'
|
||||
|
||||
entity.{{ entity_type_id }}.edit_form:
|
||||
path: '/admin/structure/{{ entity_type_id|u2h }}/{{ '{' }}{{ entity_type_id }}{{ '}' }}'
|
||||
defaults:
|
||||
_entity_form: '{{ entity_type_id }}.edit'
|
||||
_title: 'Edit {{ entity_type_label|article|lower }}'
|
||||
requirements:
|
||||
_permission: 'administer {{ entity_type_id }}'
|
||||
|
||||
entity.{{ entity_type_id }}.delete_form:
|
||||
path: '/admin/structure/{{ entity_type_id|u2h }}/{{ '{' }}{{ entity_type_id }}{{ '}' }}/delete'
|
||||
defaults:
|
||||
_entity_form: '{{ entity_type_id }}.delete'
|
||||
_title: 'Delete {{ entity_type_label|article|lower }}'
|
||||
requirements:
|
||||
_permission: 'administer {{ entity_type_id }}'
|
||||
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Drupal\{{ machine_name }}\Entity;
|
||||
|
||||
{% apply sort_namespaces %}
|
||||
use Drupal\Core\Config\Entity\ConfigEntityBase;
|
||||
use Drupal\Core\Entity\Attribute\ConfigEntityType;
|
||||
use Drupal\Core\Entity\EntityDeleteForm;
|
||||
use Drupal\Core\StringTranslation\TranslatableMarkup;
|
||||
use Drupal\{{ machine_name }}\{{ class_prefix }}Interface;
|
||||
use Drupal\{{ machine_name }}\{{ class_prefix }}ListBuilder;
|
||||
use Drupal\{{ machine_name }}\Form\{{ class_prefix }}Form;
|
||||
{% endapply %}
|
||||
|
||||
/**
|
||||
* Defines the {{ entity_type_label|lower }} entity type.
|
||||
*/
|
||||
#[ConfigEntityType(
|
||||
id: '{{ entity_type_id }}',
|
||||
label: new TranslatableMarkup('{{ entity_type_label }}'),
|
||||
label_collection: new TranslatableMarkup('{{ entity_type_label|pluralize }}'),
|
||||
label_singular: new TranslatableMarkup('{{ entity_type_label|lower }}'),
|
||||
label_plural: new TranslatableMarkup('{{ entity_type_label|pluralize|lower }}'),
|
||||
config_prefix: '{{ entity_type_id }}',
|
||||
entity_keys: [
|
||||
'id' => 'id',
|
||||
'label' => 'label',
|
||||
'uuid' => 'uuid',
|
||||
],
|
||||
handlers: [
|
||||
'list_builder' => {{ class_prefix }}ListBuilder::class,
|
||||
'form' => [
|
||||
'add' => {{ class_prefix }}Form::class,
|
||||
'edit' => {{ class_prefix }}Form::class,
|
||||
'delete' => EntityDeleteForm::class,
|
||||
],
|
||||
],
|
||||
links: [
|
||||
'collection' => '/admin/structure/{{ entity_type_id|u2h }}',
|
||||
'add-form' => '/admin/structure/{{ entity_type_id|u2h }}/add',
|
||||
'edit-form' => '/admin/structure/{{ entity_type_id|u2h }}/{{ '{' }}{{ entity_type_id }}{{ '}' }}',
|
||||
'delete-form' => '/admin/structure/{{ entity_type_id|u2h }}/{{ '{' }}{{ entity_type_id }}{{ '}' }}/delete',
|
||||
],
|
||||
admin_permission: 'administer {{ entity_type_id }}',
|
||||
label_count: [
|
||||
'singular' => '@count {{ entity_type_label|lower }}',
|
||||
'plural' => '@count {{ entity_type_label|pluralize|lower }}',
|
||||
],
|
||||
config_export: [
|
||||
'id',
|
||||
'label',
|
||||
'description',
|
||||
],
|
||||
)]
|
||||
final class {{ class_prefix }} extends ConfigEntityBase implements {{ class_prefix }}Interface {
|
||||
|
||||
/**
|
||||
* The example ID.
|
||||
*/
|
||||
protected string $id;
|
||||
|
||||
/**
|
||||
* The example label.
|
||||
*/
|
||||
protected string $label;
|
||||
|
||||
/**
|
||||
* The example description.
|
||||
*/
|
||||
protected string $description;
|
||||
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Drupal\{{ machine_name }};
|
||||
|
||||
use Drupal\Core\Config\Entity\ConfigEntityInterface;
|
||||
|
||||
/**
|
||||
* Provides an interface defining {{ entity_type_label|article|lower }} entity type.
|
||||
*/
|
||||
interface {{ class_prefix }}Interface extends ConfigEntityInterface {
|
||||
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Drupal\{{ machine_name }};
|
||||
|
||||
use Drupal\Core\Config\Entity\ConfigEntityListBuilder;
|
||||
use Drupal\Core\Entity\EntityInterface;
|
||||
|
||||
/**
|
||||
* Provides a listing of {{ entity_type_label|lower|pluralize }}.
|
||||
*/
|
||||
final class {{ class_prefix }}ListBuilder extends ConfigEntityListBuilder {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildHeader(): array {
|
||||
$header['label'] = $this->t('Label');
|
||||
$header['id'] = $this->t('Machine name');
|
||||
$header['status'] = $this->t('Status');
|
||||
return $header + parent::buildHeader();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildRow(EntityInterface $entity): array {
|
||||
/** @var \Drupal\{{ machine_name }}\{{ class_prefix }}Interface $entity */
|
||||
$row['label'] = $entity->label();
|
||||
$row['id'] = $entity->id();
|
||||
$row['status'] = $entity->status() ? $this->t('Enabled') : $this->t('Disabled');
|
||||
return $row + parent::buildRow($entity);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Drupal\{{ machine_name }}\Form;
|
||||
|
||||
use Drupal\Core\Entity\EntityForm;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\{{ machine_name }}\Entity\{{ class_prefix }};
|
||||
|
||||
/**
|
||||
* {{ entity_type_label }} form.
|
||||
*/
|
||||
final class {{ class_prefix }}Form extends EntityForm {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function form(array $form, FormStateInterface $form_state): array {
|
||||
|
||||
$form = parent::form($form, $form_state);
|
||||
|
||||
$form['label'] = [
|
||||
'#type' => 'textfield',
|
||||
'#title' => $this->t('Label'),
|
||||
'#maxlength' => 255,
|
||||
'#default_value' => $this->entity->label(),
|
||||
'#required' => TRUE,
|
||||
];
|
||||
|
||||
$form['id'] = [
|
||||
'#type' => 'machine_name',
|
||||
'#default_value' => $this->entity->id(),
|
||||
'#machine_name' => [
|
||||
'exists' => [{{ class_prefix }}::class, 'load'],
|
||||
],
|
||||
'#disabled' => !$this->entity->isNew(),
|
||||
];
|
||||
|
||||
$form['status'] = [
|
||||
'#type' => 'checkbox',
|
||||
'#title' => $this->t('Enabled'),
|
||||
'#default_value' => $this->entity->status(),
|
||||
];
|
||||
|
||||
$form['description'] = [
|
||||
'#type' => 'textarea',
|
||||
'#title' => $this->t('Description'),
|
||||
'#default_value' => $this->entity->get('description'),
|
||||
];
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function save(array $form, FormStateInterface $form_state): int {
|
||||
$result = parent::save($form, $form_state);
|
||||
$message_args = ['%label' => $this->entity->label()];
|
||||
$this->messenger()->addStatus(
|
||||
match($result) {
|
||||
\SAVED_NEW => $this->t('Created new example %label.', $message_args),
|
||||
\SAVED_UPDATED => $this->t('Updated example %label.', $message_args),
|
||||
}
|
||||
);
|
||||
$form_state->setRedirectUrl($this->entity->toUrl('collection'));
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user