Como criar uma entidade personalizada no Drupal 8 [fechado]

10

Eu tenho um grande projeto pessoal desenvolvido no Drupal 7 que possui muitas entidades personalizadas. Quero começar a atualizar o projeto para o Drupal 8, mas o núcleo do Drupal 8, totalmente reescrito, é muito grande para que eu possa entender sem documentação (o Symfony é totalmente desconhecido para mim, sou apenas um cara apenas do Drupal) .

Tentei criar uma entidade personalizada apenas olhando para alguns dos códigos dos módulos principais, mas sem sucesso.

Você pode me indicar alguns artigos sobre entidades personalizadas no Drupal 8 (não consegui encontrar uma única) ou fornecer um guia passo a passo básico?

Obrigado.


fonte
1
Você poderia editar a pergunta para adicionar um pouco sobre o quão longe você chegou e exatamente onde está lutando? Ver o código específico com o qual você está tendo problemas seria o ideal. Construir uma entidade personalizada não é uma tarefa pequena - provavelmente é uma pergunta muito ampla, tanto para o formato do site quanto para as suas chances de obter uma boa resposta. Lembre-se de que as solicitações de links / tutoriais são especificamente off-topic aqui por esse motivo. É melhor dividi-lo peça por peça e fazer perguntas sobre esses pequenos pedaços. Obrigado
Clive
Como um aparte, se você não conhece nenhum Symfony, provavelmente encontrará dificuldades para aplicar seu conhecimento em D7 ao D8. As coisas mudaram bastante (como eu já sei). Eu recomendo fortemente que você leia o máximo possível do livro Symfony antes de iniciar sua jornada; ter esse tipo de aterramento tornará a transição muito mais suave, confie em mim. Como outro aparte, eu achei as entidades de Categoria e Mensagem no módulo de Contato principal como muito bons pontos de partida para aprender
Clive
@Clive Além da validação, a API de entidade no Drupal 8 não tem quase nada a ver com o Symfony, então não acho que seja relevante. Caso contrário, concordo com a pergunta ser muito ampla, mas tentei fornecer uma visão geral. Perguntas mais específicas podem ser respondidas com mais detalhes. E isso ajuda a ter um ponto de partida, pois isso não é muito óbvio se você não conhece o D8.
Berdir
@Berdir, eu quis dizer D7 -> D8 em geral, não para entidades especificamente. Saber sobre o roteamento e os serviços do Symfony, por exemplo, facilita a compreensão do código principal em geral. Ótima redação, aliás, não há razão para sequer pensar em encerrar esta questão agora. IMO, é um recurso valioso (mesmo que seja um pouco amplo)
Clive

Respostas:

13

Estou trabalhando na documentação da API da entidade aqui: https://drupal.org/developing/api/entity .

A pergunta é grande demais para responder em detalhes e depende se você precisa de conteúdo ou de entidades de configuração. Supondo que você queira entidades de conteúdo (armazenadas no banco de dados, que possam ser colocadas em campo / revisáveis ​​/ ..., detalhes no link acima), é necessário fazer algo assim: a documentação vinculada acima acabará por cobrir cada etapa, incluindo tutoriais, agora , abrange apenas os primeiros passos.

  1. Forneça uma classe de entidade e adicione as anotações necessárias para expô-la como uma entidade.
  2. Forneça a (s) tabela (s) necessária (s), você não precisará alterar muito se já possui o esquema 7.x, mas deseja adicionar uma coluna de uuid e possivelmente langcode se sua entidade puder ter um idioma / ser traduzível. Consulte o exemplo do nó vinculado na etapa se você deseja tornar alguns campos base (propriedades) traduzíveis ou revisáveis, atualmente você precisa fornecer as tabelas necessárias.
  3. Forneça as definições de campo base no seu método baseFieldDefinitions (). . Observe que a maneira como isso funciona mudará em https://drupal.org/node/2047229 (de matrizes para classes).
  4. Implemente os métodos pré / pós Save / load / Delete necessários, se você tiver uma lógica personalizada que precise ocorrer, por exemplo, antes de salvar uma entidade (como atualizar o carimbo de data / hora alterado).
  5. Implemente um controlador de acesso se você tiver uma lógica de acesso não trivial e substitua os métodos checkAccess () e checkCreateAccess () ou especifique o admin_permission na sua anotação se você tiver apenas uma permissão que permita acesso total.
  6. É recomendável, embora não seja tecnicamente necessário, fornecer uma interface para sua classe de entidade (por exemplo, NodeInterface for Node) que inclua métodos úteis (geralmente get / set / isSomething ()) para seus campos base, para que você possa digitar dicas na interface e obtenha o preenchimento automático para esses métodos.

Dependendo do que você precisa, também haverá outras etapas, como definir os formulários necessários, possivelmente um controlador de renderização e assim por diante, mas essas provavelmente devem ser perguntas separadas se você precisar de mais informações.

Notas:

  • As entidades de configuração são basicamente semelhantes, exceto que você precisa usar o controlador de armazenamento de configuração ( https://drupal.org/node/2119905 facilitará isso), não é necessário definir esquemas de tabela (obviamente), mas é necessário fornecer um arquivo de esquema de configuração, consulte, por exemplo, os vocabulários de taxonomia ou os tipos de nós.
  • As entidades de conteúdo não têm seus campos base definidos como propriedades públicas ou protegidas; eles são gerenciados automaticamente nas propriedades de valores e campos. Acesse-os através de get () / set () ou dos métodos mágicos correspondentes. ($ node-> title é igual a $ node-> get ('title')).
  • Ajuda na documentação seria muito bem vinda. Eu criei um esboço básico para o conteúdo / estrutura que eu gostaria de ter, então apenas crie uma nova página e comece por exemplo. Também estou interessado em ter tutoriais simplificados, para entidades de configuração, já existe um aqui que eu passará para a documentação da entidade quando estiver pronto: https://drupal.org/node/1809494
  • O Core possui um número bastante grande de implementações de entidade de conteúdo, se você quiser ver exemplos de trabalho: Nó, Usuário, Termo, Comentário, CustomBlock, ... como o artigo vinculado na etapa 1 explica, você sempre pode encontrar os tipos de entidade fornecidos por um módulo no namespace da entidade.
  • O @fago acabou de fazer uma apresentação sobre a Entity API no DrupalCamp Vienna neste fim de semana, abrange muito do que escrevi aqui e muito mais.
Berdir
fonte
1
o gerador de código Drupal é bastante útil - >> github.com/Chi-teck/drupal-code-generator
rémy
1
drupalconsole.com - (. Uma ferramenta para gerar código clichê, interagir com e depurar Drupal) também é um bom ajudante
milkovsky