Cómo crear una entidad personalizada en Drupal 8 [cerrado]

10

Tengo un gran proyecto personal basado en Drupal 7 que tiene muchas entidades personalizadas. Quiero comenzar a actualizar el proyecto a Drupal 8, pero el núcleo completamente reescrito de Drupal 8 es demasiado grande para que pueda entenderlo sin ninguna documentación (+ Symfony es totalmente desconocido para mí, solo soy un chico simple de Drupal) .

Traté de crear una entidad personalizada simplemente mirando algunos de los códigos de los módulos principales pero sin ningún éxito.

¿Me puede indicar algunos artículos sobre entidades personalizadas en Drupal 8 (no he podido encontrar uno solo) o darme una guía básica paso a paso?

Gracias.


fuente
1
¿Podrías editar la pregunta para agregar un poco sobre cuán lejos has llegado y exactamente dónde estás luchando? Ver el código específico con el que está teniendo problemas sería ideal. Crear una entidad personalizada no es una tarea pequeña, probablemente sea una pregunta demasiado amplia, tanto para el formato del sitio como para sus posibilidades de obtener una buena respuesta. Tenga en cuenta que las solicitudes de enlaces / tutoriales están específicamente fuera de tema aquí solo por esa razón. Es mejor dividirlo pieza por pieza y hacer preguntas sobre esas pequeñas piezas. Gracias
Clive
Además, si no conoce Symfony, probablemente le resulte difícil aplicar sus conocimientos de D7 a D8. Las cosas han cambiado bastante (como estoy seguro de que ya lo sabes). Recomiendo leer tanto libro de Symfony como puedas antes de embarcarte en tu viaje; Tener ese tipo de conexión a tierra hará que la transición sea mucho más fácil, confía en mí. Como otro lado, encontré que las entidades de Categoría y Mensaje en el módulo de Contacto principal son muy buenos puntos de partida para el aprendizaje
Clive
@Clive Además de la API de validación, la API de entidad en Drupal 8 no tiene casi nada que ver con Symfony, así que no creo que sea tan relevante. De lo contrario, estoy de acuerdo con que la pregunta es demasiado amplia, pero traté de dar una visión general, las preguntas más específicas se pueden responder con más detalle. Y ayuda tener un punto de partida, ya que eso no es demasiado obvio si no conoce D8.
Berdir el
@Berdir quise decir D7 -> D8 en general, no para entidades específicamente. Conocer el enrutamiento y los servicios de Symfony, por ejemplo, hace que la comprensión del código central sea mucho más fácil en general. Gran redacción, por cierto, no hay razón para pensar en cerrar esta pregunta ahora OMI, es un recurso valioso (incluso si es un poco amplio)
Clive

Respuestas:

13

Estoy trabajando en la documentación de la API de la entidad aquí: https://drupal.org/developing/api/entity .

La pregunta es demasiado grande para responder en detalle, y depende de si necesita contenido o entidades de configuración. Suponiendo que desea entidades de contenido (almacenadas en la base de datos, pueden ser enviables / revisables / ..., detalles en el enlace anterior), debe hacer algo como esto, la documentación vinculada anteriormente eventualmente cubrirá cada paso, incluidos los tutoriales, en este momento , solo cubre los primeros pasos.

  1. Proporcione una clase de entidad y agregue las anotaciones necesarias para exponerla como una entidad.
  2. Proporcione las tablas necesarias, no tiene que cambiar mucho si ya tiene su esquema 7.x, pero desea agregar una columna uuid y posiblemente langcode si su entidad puede tener un idioma / ser traducible. Vea el ejemplo de nodo vinculado en el paso si desea que algunos campos base (propiedades) sean traducibles o revisables, actualmente necesita proporcionar las tablas necesarias usted mismo.
  3. Proporcione las definiciones de campo base en su método baseFieldDefinitions (). . Tenga en cuenta que la forma en que esto funciona cambiará en https://drupal.org/node/2047229 (de matrices a clases).
  4. Implemente los métodos necesarios antes / después de Guardar / cargar / Eliminar si tiene una lógica personalizada que debe suceder, por ejemplo, antes de guardar una entidad (como actualizar la marca de tiempo modificada).
  5. Implemente un controlador de acceso si tiene una lógica de acceso no trivial y anule los métodos checkAccess () y checkCreateAccess () o especifique admin_permission en su anotación si solo tiene un permiso único que permite el acceso completo.
  6. Se recomienda, aunque no es técnicamente necesario, proporcionar una interfaz para su clase de entidad (por ejemplo, NodeInterface for Node) que incluya métodos útiles (generalmente get / set / isSomething ()) para sus campos base, de modo que pueda escribir sugerencia en la interfaz y obtener autocompletar para esos métodos.

Dependiendo de lo que necesite, también habrá otros pasos, como definir los formularios necesarios, posiblemente un controlador de renderizado, etc., pero probablemente deberían ser preguntas separadas si necesita más información.

Notas:

  • Las entidades de configuración son básicamente similares, excepto que necesita usar el controlador de almacenamiento de configuración ( https://drupal.org/node/2119905 lo hará más fácil), no necesita definir esquemas de tabla (obviamente) pero necesita proporcionar un archivo de esquema de configuración, consulte, por ejemplo, los de vocabularios de taxonomía o tipos de nodos.
  • Las entidades de contenido no tienen sus campos base definidos como propiedades públicas o protegidas, sino que se administran automáticamente en los valores y propiedades de los campos. Acceda a ellos a través de get () / set () o los métodos mágicos correspondientes. ($ nodo-> título es igual a $ nodo-> get ('título')).
  • Ayuda en la documentación allí sería muy bienvenida. He creado un esquema básico para el contenido / estructura que me gustaría tener, así que solo cree una nueva página y comience, por ejemplo, también estoy interesado en tener tutoriales simplificados, para entidades de configuración, ya hay uno aquí que pasará a la documentación de la entidad cuando esté listo: https://drupal.org/node/1809494
  • Core tiene una gran cantidad de implementaciones de entidades de contenido, si desea ver ejemplos de trabajo: Nodo, Usuario, Término, Comentario, CustomBlock, ... como explica el artículo vinculado en el paso 1, siempre puede encontrar los tipos de entidad proporcionados por un módulo en el espacio de nombres de la entidad.
  • @fago acaba de dar una presentación sobre Entity API en el DrupalCamp Vienna este fin de semana, cubre mucho de lo que escribí aquí y más.
Berdir
fuente
1
el generador de código drupal es bastante útil - >> github.com/Chi-teck/drupal-code-generator
rémy
1
drupalconsole.com - también un buen ayudante (Una herramienta para generar código repetitivo, interactuar y depurar Drupal.)
milkovsky