Tôi đang cố gắng viết một lệnh drush để lưu lại tất cả các nút trên trang web của mình.
Tôi đã tìm kiếm một mô-đun và tìm thấy Lưu lại tất cả các nút mô-đun, nhưng lệnh drush của nó chưa sẵn sàng. Vì vậy, tôi quyết định thử tự viết nó.
Tuy nhiên, tôi không thể lưu lại các nút của mình với $entity->save()
, và tôi không hiểu tại sao.
<?php
không gian tên Drupal\resave_all_nodes\Commands;
sử dụng Drupal\Core\Entity\EntityTypeManagerInterface;
sử dụng Drupal\node\Entity\Node;
sử dụng Drush\Commands\DrushCommands;
/**
* Một lớp lệnh Drush để chuyển đổi mô-đun Resave All Nodes.
*/
lớp ResaveAllNodesCommands mở rộng DrushCommands
{
/**
* Trình quản lý kiểu thực thể.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
$entityTypeManager riêng tư;
/**
* Xây dựng một đối tượng ResaveAllNodesCommands.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* Trình quản lý kiểu thực thể.
*/
chức năng công cộng __construct(EntityTypeManagerInterface $entity_type_manager)
{
$this->entityTypeManager = $entity_type_manager;
cha mẹ::__construct();
}
/**
* Lưu lại tất cả các nút.
*
* @command resave-all-nodes:resave
*
* @usage drush resave-all-nodes:resave
* Lưu lại tất cả các nút trên trang web.
*
* @aliases chạy
*/
chức năng công cộng resaveAllNodes()
{
$my_node = Nút::load(1);
$my_node->save();
\Drupal::logger('resave_all_nodes')->notice("đã lưu nút 1!");
}
}
Khi tôi chạy lệnh, nhật ký hiển thị các thông báo của trình ghi nhật ký:
- Tôi thấy "nút 1 đã được lưu!" trong nhật ký
- Tôi có một thông điệp tường trình khác trong
hook_entity_presave()
, cũng xuất hiện
Nhưng, khi tôi đi đến /admin/nội dung
, "ngày cập nhật" cho nút 1 không thay đổi. Ngoài ra, nội dung của nút không được lưu lại.
nếu tôi đi đến nút/1/chỉnh sửa
và lưu lại theo cách thủ công, nút được lưu lại như tôi mong đợi (ngày cập nhật được cập nhật và giá trị trường được cập nhật).
Vì vậy, tại sao nút-> lưu()
âm thầm thất bại (ngày cập nhật và giá trị trường vẫn giữ nguyên), khi lưu thủ công hoạt động?
Tôi có một vài mô-đun tùy chỉnh và tôi đã vô hiệu hóa chúng cũng như xây dựng lại bộ đệm, nhưng vấn đề vẫn còn.