Respostas:
hook_schema()
ainda é usado nos módulos Drupal 8 para criar tabelas de banco de dados personalizadas usadas a partir do módulo. Mesmo o usuário e os módulos Node implementá-lo, embora user_schema()
e node_schema()
não definir o esquema para as respectivas entidades, que são criados de uma maneira diferente.
O esquema de configuração não é usado para criar tabelas de banco de dados personalizadas que um módulo usa, mas descreve a estrutura dos arquivos de configuração. O arquivo PDF encontrado na documentação que vinculei deixa clara a relação entre um arquivo de configuração e seu esquema.
As entidades de conteúdo não usam hook_schema()
; Drupal cria a tabela de banco de dados para eles com base nos campos básicos que a classe da entidade de conteúdo define.
Qual método usar depende do que o módulo define. Cabe ao módulo definir uma entidade de conteúdo, uma entidade de configuração ou apenas usar uma tabela personalizada. Um módulo pode até usar todos eles.
Você pode usar a instalação por gancho para criar suas próprias tabelas, se você realmente quiser, embora o Drupal tenha muitas outras soluções prontas para uso. Mas se você quiser criar o seu próprio, existe um módulo de exemplo, chamado dbtng_example, no módulo de exemplos: https://www.drupal.org/project/examples , completo com o roteamento para adicionar e remover as entradas personalizadas do banco de dados.
Eu recomendo instalá-lo e testá-lo, para que você possa usá-lo como base para criar sua própria tabela de banco de dados no Drupal 8.
Outra abordagem a considerar é criar uma entidade de configuração ou uma entidade de conteúdo.
Se você usar a ferramenta de linha de comando drupal, existe até um comando para gerar esses "drupal generate: entity: config" e "drupal generate: entity: content".
Também no módulo de exemplos, há config_entity_example e content_entity_example.
Em https://www.previousnext.com.au/blog/understanding-drupal-8s-config-entities : "A principal diferença entre o conteúdo e as entidades de configuração é como elas são armazenadas e (no momento) as entidades de configuração não podem ser colocadas em campo "
Existem outras soluções prontas para uso, como o módulo config_pages, que permite que você facilmente localize locais para armazenar dados em seu site: https://www.drupal.org/project/config_pages
Recentemente, os usamos para páginas de destino únicas, criando um controlador e uma rota. Isso tem uma enorme vantagem sobre uma tabela personalizada, pois você pode adicionar novos campos facilmente e usar tipos de dados como imagens e referências de entidades com facilidade, também pode definir formatadores de campos e carregar os dados formatados usando o construtor de exibição de entidade config_pages.
hook_schema
ainda é o caminho para criar tabelas personalizadas no Drupal 8 que não são descritas por entidades ou campos de conteúdo . Se sua tabela personalizada é algo que você consideraria "conteúdo", eu usaria entidades, mas se precisar ser mais rápido e tiver uma quantidade limitada de linhas e você não estiver fazendo nenhum cache no front-end, uma tabela personalizada está bem. Você também deve considerar se esta tabela é "configuração"; nesse caso, uma entidade ou um objeto de configuração é o caminho a seguir.