Cách tạo thực thể tùy chỉnh trong Drupal 8 [đã đóng]


10

Tôi có một dự án cá nhân lớn được xây dựng trên Drupal 7 có nhiều thực thể tùy chỉnh. Tôi muốn bắt đầu nâng cấp dự án lên Drupal 8 nhưng lõi Drupal 8 được viết lại hoàn toàn quá lớn để tôi có thể quay đầu mà không cần bất kỳ tài liệu nào (+ Symfony hoàn toàn không biết đối với tôi .

Tôi đã cố gắng tạo một thực thể tùy chỉnh chỉ bằng cách xem xét một số mã mô-đun cốt lõi nhưng không thành công.

Bạn có thể chỉ cho tôi một số bài viết về các thực thể tùy chỉnh trong Drupal 8 (tôi chưa thể tìm thấy một đơn) hoặc cho tôi một số hướng dẫn từng bước cơ bản?

Cảm ơn.

entities  8 

1
Bạn có thể chỉnh sửa câu hỏi để thêm một chút về khoảng cách bạn đã đi được không, và chính xác nơi bạn đang vật lộn? Xem mã cụ thể mà bạn gặp vấn đề sẽ là lý tưởng. Xây dựng một thực thể tùy chỉnh không phải là một nhiệm vụ nhỏ - đó có thể là một câu hỏi quá rộng, cả về định dạng trang web và cho cơ hội nhận được câu trả lời tốt. Xin lưu ý rằng các yêu cầu cho các liên kết / hướng dẫn cụ thể ngoài chủ đề ở đây chỉ vì lý do đó. Tốt hơn là chia nó ra từng mảnh, và đặt câu hỏi về những mảnh nhỏ đó. Cảm ơn
Clive

Bên cạnh đó, nếu bạn không biết bất kỳ Symfony nào, có lẽ bạn sẽ gặp khó khăn khi áp dụng kiến ​​thức D7 của mình cho D8. Mọi thứ đã thay đổi khá nhiều (như tôi chắc chắn bạn đã biết). Tôi thực sự khuyên bạn nên đọc càng nhiều sách Symfony càng tốt trước khi bắt đầu cuộc hành trình của bạn; có loại nền tảng đó sẽ làm cho quá trình chuyển đổi suôn sẻ hơn nhiều , hãy tin tôi. Mặt khác, tôi thấy các thực thể Danh mục và Thông báo trong mô-đun Liên hệ cốt lõi là điểm khởi đầu rất tốt cho việc học
Clive

@Clive Ngoài API xác thực có API thực thể trong Drupal 8 hầu như không liên quan gì đến Symfony, vì vậy tôi không nghĩ nó có liên quan. Mặt khác, đồng ý với câu hỏi quá rộng, nhưng tôi đã cố gắng đưa ra một cái nhìn tổng quan, những câu hỏi cụ thể hơn sau đó có thể được trả lời chi tiết hơn. Và nó giúp có một điểm khởi đầu, vì điều đó không quá rõ ràng nếu bạn không biết D8.
Berdir

@Berdir Ý tôi là D7 -> D8 nói chung, không dành cho các thực thể cụ thể. Biết về định tuyến và dịch vụ Symfony, ví dụ, làm cho việc hiểu mã lõi dễ dàng hơn rất nhiều nói chung. Nhân tiện, viết thư tuyệt vời, không có lý do gì để nghĩ đến việc đóng câu hỏi này ngay bây giờ IMO, đó là một tài nguyên quý giá (ngay cả khi nó là một phần nhỏ)
Clive

Câu trả lời:


13

Tôi đang làm việc trên tài liệu API thực thể tại đây: https://drupal.org/developing/api/entity .

Câu hỏi quá lớn để trả lời chi tiết và nó phụ thuộc vào việc bạn cần các thực thể cấu hình hay cấu hình. Giả sử bạn muốn các thực thể nội dung (được lưu trữ trong cơ sở dữ liệu, có thể thực hiện được / có thể sửa đổi / ..., chi tiết trong liên kết ở trên), bạn cần phải làm một cái gì đó như thế này, tài liệu được liên kết ở trên cuối cùng sẽ bao gồm từng bước, bao gồm cả hướng dẫn, ngay bây giờ , nó chỉ bao gồm các bước đầu tiên.

  1. Cung cấp một lớp thực thể và thêm các chú thích cần thiết để hiển thị nó dưới dạng một thực thể.
  2. Cung cấp (các) bảng cần thiết, bạn không phải thay đổi nhiều nếu bạn đã có lược đồ 7.x của mình, nhưng bạn muốn thêm một cột uuid và có thể là langcode nếu thực thể của bạn có thể có ngôn ngữ / có thể dịch được. Xem ví dụ nút được liên kết trong bước nếu bạn muốn làm cho một số trường cơ sở (thuộc tính) có thể dịch hoặc sửa đổi được, hiện tại bạn cần phải tự cung cấp các bảng cần thiết.
  3. Cung cấp các định nghĩa trường cơ sở trong phương thức baseFieldDefDefs () của bạn. . Lưu ý rằng cách thức hoạt động này sẽ thay đổi trong https://drupal.org/node/2047229 (từ mảng sang lớp).
  4. Thực hiện các phương thức Lưu / tải / Xóa cần thiết trước nếu bạn có logic tùy chỉnh cần xảy ra, ví dụ trước khi lưu một thực thể (như cập nhật dấu thời gian đã thay đổi).
  5. Triển khai bộ điều khiển truy cập nếu bạn có logic truy cập không tầm thường và ghi đè các phương thức checkAccess () và checkCreateAccess () hoặc chỉ định admin_ allow trong chú thích của bạn nếu bạn chỉ có một quyền cho phép truy cập đầy đủ.
  6. Mặc dù không được yêu cầu về mặt kỹ thuật để cung cấp giao diện cho lớp thực thể của bạn (ví dụ: NodeInterface cho Node) bao gồm các phương thức hữu ích (thường là get / set / isS Something ()) cho các trường cơ sở của bạn, để bạn có thể nhập gợi ý trên giao diện và được tự động hoàn thành cho các phương pháp đó.

Tùy thuộc vào những gì bạn cần, cũng sẽ có các bước tiếp theo, như xác định các biểu mẫu cần thiết, có thể là bộ điều khiển kết xuất, v.v., nhưng chúng có thể là những câu hỏi riêng biệt nếu bạn cần thêm thông tin.

Ghi chú:

  • Các thực thể cấu hình về cơ bản là tương tự nhau, ngoại trừ bạn cần sử dụng bộ điều khiển lưu trữ cấu hình ( https://drupal.org/node/2119905 sẽ giúp việc này dễ dàng hơn), bạn không cần xác định lược đồ bảng (rõ ràng) nhưng bạn cần cung cấp một tệp lược đồ cấu hình, xem ví dụ: các tệp cho các từ vựng phân loại hoặc các loại nút.
  • Các thực thể nội dung không có các trường cơ sở được xác định là thuộc tính công khai hoặc được bảo vệ, thay vào đó, chúng được tự động quản lý trong các thuộc tính giá trị và trường. Truy cập chúng thông qua get () / set () hoặc các phương thức ma thuật tương ứng. ($ nút-> tiêu đề bằng $ nút-> get ('title')).
  • Trợ giúp về các tài liệu sẽ được chào đón. Tôi đã tạo một phác thảo cơ bản cho nội dung / cấu trúc mà tôi muốn có, vì vậy chỉ cần tạo một trang mới và bắt đầu, ví dụ: Tôi cũng quan tâm đến việc có các hướng dẫn đơn giản hóa, đối với các thực thể cấu hình, đã có một sẽ chuyển sang tài liệu thực thể khi sẵn sàng: https://drupal.org/node/1809494
  • Core có số lượng triển khai thực thể nội dung khá lớn, nếu bạn muốn xem các ví dụ hoạt động: Node, Người dùng, Thuật ngữ, Nhận xét, CustomBlock, ... như bài viết được liên kết trong bước 1 giải thích, bạn luôn có thể tìm thấy các loại thực thể được cung cấp bởi một mô-đun trong bảng tên thực thể.
  • @fago vừa trình bày về Entity API tại DrupalCamp Vienna vào cuối tuần này, bao gồm rất nhiều những gì tôi đã viết ở đây và hơn thế nữa.

1
trình tạo mã drupal khá hữu ích - >> github.com/Chi-teck/drupal-code-generator
rémy

1
drupalconsole.com - cũng là một người trợ giúp tốt (Một công cụ để tạo mã soạn sẵn, tương tác và gỡ lỗi Drupal.)
milkovsky
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.