Điểm:2

Thiếu gói cho nút loại thực thể sau khi nâng cấp

lá cờ ph

Gần đây tôi đã nâng cấp hộp cát cục bộ lên Drupal core 9.2.4. Trong khi thử nghiệm mọi thứ, tôi gặp lỗi khi cố gắng thêm nội dung bài viết mới từ /node/add/article.

Nhật ký hiển thị thông báo sau.

Drupal\Core\Entity\EntityStorageException: Thiếu gói cho nút loại thực thể trong Drupal\Core\Entity\ContentEntityStorageBase->doCreate() (dòng 97 của /var/www/drupal9sandbox/docroot/core/lib/Drupal/Core/Entity/ ContentEntityStorageBase.php).

Thay đổi duy nhất tôi đã thực hiện trước đó là trong tệp article.routing.yml. tôi đã phải sử dụng _entity_form: 'node.default' thay vì Drupal\node\Controller\NodeController::add() vì điều đó không được dùng trong Drupal 9, như đã báo cáo trong Phương thức NodeController::add() không được dùng nữa.

Đây là toàn bộ nội dung của bài viết.routing.yml tập tin.

Ngoài sự thay đổi nhỏ đối với _entity_form: 'node.default', tôi đã không chạm vào bất cứ điều gì khác.

custom_articles.add_content:
  đường dẫn: '/ nút/thêm/bài viết'
  mặc định:
    _entity_form: 'node.default'
    _title_callback: '\Drupal\node\Controller\NodeController::addPageTitle'
    node_type: 'bài viết'
  yêu cầu:
    _node_add_access: 'nút:bài viết'
  tùy chọn:
    _node_operation_route: ĐÚNG
    thông số:
      nút_type:
        with_config_overrides: ĐÚNG

Tôi không chắc loại gói sẽ được xác định ở đâu, nhưng loại nội dung này hoạt động tốt trên Drupal 8.9.16.

apaderno avatar
lá cờ us
Như lưu ý phụ, nếu *Bài báo* là một loại nội dung được xác định trên trang web, thì bạn không cần xác định tuyến đường cho nó: Mô-đun Node sẽ đảm nhận việc đó. Trên thực tế, nó có một lộ trình cho */node/add/{node_type}*, hợp lệ cho mọi loại nội dung mà trang web có.
lá cờ cn
Có lý do nào khiến bạn khai báo lại một tuyến đường hiện có không? Điều gì xảy ra nếu bạn xóa tuyến đường tùy chỉnh đó và xóa bộ nhớ cache?
apaderno avatar
lá cờ us
Để xác nhận nhận xét @Clive, cấu hình cài đặt *Chuẩn* được sử dụng từ Drupal 9 (cũng như các phiên bản Drupal trước đó) đã thêm loại nội dung *Bài viết*. Nếu Drupal được cài đặt bằng một cấu hình cài đặt khác, thì *Bài viết* không thể là loại nội dung được xác định trước, nhưng vẫn không cần thêm tuyến tùy chỉnh khi mô-đun Node sẽ xử lý nó.
lá cờ ph
@Clive, tuyến đường đã có trước đó. Thay đổi duy nhất tôi thực hiện là theo mặc định. Thay vì `_entity_form: 'node.default'`, nó đang sử dụng `controller:'Drupal\node\Controller\NodeController::add()'`. Tuy nhiên, điều đó đã không được chấp nhận trong Drupal 9.
lá cờ cn
Trừ khi bạn có lý do thực sự chính đáng để tạo tuyến đường tùy chỉnh cho một đường dẫn đã tồn tại và được kiểm soát bởi hệ thống, bạn nên xóa mã đó. Nếu không, bạn sẽ phải tiếp tục duy trì nội tuyến với các bản cập nhật cốt lõi mà không có lợi ích gì. Bất cứ điều gì bạn có thể làm trong lộ trình được khai báo lại, bạn có thể thực hiện "đúng cách" thông qua phương thức khác
lá cờ ph
@Clive, tôi vừa xóa nó và nó đã hoạt động! Theo [changelog](https://www.drupal.org/node/3084856) này, bộ điều khiển Add() đã bị xóa khỏi Drupal 9 và hiện được xử lý bởi `_entity_form. Nó không chỉ định cái gì sẽ sử dụng thay thế, vì vậy tôi đoán họ muốn ngụ ý chỉ cần xóa bộ điều khiển Add() nếu bạn đang sử dụng nó.
lá cờ cn
Trong trường hợp đây không phải là ý của bạn, bạn nên xóa toàn bộ khai báo tuyến đường IMO. Điều đó là không cần thiết và có thể khiến bạn đau đầu hơn trong tương lai. Ai đã viết điều đó có lẽ đã nắm rất rõ về API Symfony, nhưng có lẽ ít nắm bắt hơn về API Drupal
lá cờ ph
Điều này đã được xây dựng từ rất sớm khi chúng tôi chuyển sang Drupal. Vì vậy, tôi đoán họ đã viết nó dựa trên mẫu soạn sẵn có sẵn cho họ trước đó. Tất cả các loại nội dung thành công đã được tạo không có tất cả điều này. vì vậy giải pháp là xóa khối thêm đó trong tệp định tuyến.yml. Làm thế nào để tôi chấp nhận câu trả lời của bạn?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.