Điểm:-2

Sau khi cập nhật lên PHP 8, mô-đun không còn hoạt động

lá cờ sg

Tôi đã cập nhật Drupal của mình từ 8 lên 9 và sử dụng PHP 7.4. Bây giờ tôi đã chọn thời gian để cập nhật lên PHP 8. Mọi thứ chạy cho đến nay, chỉ với một mô-đun tự xây dựng, tôi nhận được thông báo Lỗi:

Trang web này gặp phải một lỗi không mong muốn. Vui lòng thử lại sau.
Lỗi: Cố gán "định dạng" thuộc tính thành null trong copy_fields_from_model_contract_node_edit_node_prepare_form() (dòng 57 của mô-đun/tùy chỉnh/copy_fields_from_model_contract_node_edit/copy_fields_from_model_contract_node_edit.module).

Điều này liên quan chính xác đến dòng này:

$node->body->format = 'full_html';

Mã của mô-đun của tôi không thanh lịch, nhưng nó đã hoạt động như mong muốn. Về cơ bản, tôi sao chép từ một nút khác nội dung của trường nội dung vào trường nội dung của một nút khác. Mã của toàn bộ mô-đun trông như thế này:

<?php

sử dụng Drupal\node\NodeInterface;
sử dụng Drupal\Core\Form\FormStateInterface;


/**
* Triển khai hook_ENTITY_TYPE_prepare_form() cho các thực thể nút.
*/
chức năng copy_fields_from_model_contract_node_edit_node_prepare_form(NodeInterface $node, $operation, FormStateInterface $form_state)
{

// TODO Xây dựng NID dưới dạng mảng và đi qua vòng lặp

  $arr_vertraege = mảng(6766, 6769, 6768, 6775, 6767, 6776, 6777, 6778, 6779, 6780, 6781, 6782);

  foreach ($arr_vertraege as $mustervertraege) {

    $nid = $mustervertraege;
    $node_storage = \Drupal::entityTypeManager()->getStorage('node');
    $node = $node_storage->load($nid);

    if ($nid == $mustervertraege) {


      $getcontract = $node->field_vertragsinhalt->value;
    }

  //TODO Hoạt động mà không cần ($operation == 'default')

  nếu ($thao tác == 'chỉnh sửa') {
    /*dpm("Mô-đun chỉnh sửa");*/
    // TODO Sẽ luôn kéo nút hiện tại và nid. Nhưng chưa hoạt động với việc tạo nút. Lỗi: Gọi hàm thành viên id() trên null trong

    $node = \Drupal::routeMatch()->getParameter('node');
    $nid = $node->id();
    $node_storage = \Drupal::entityTypeManager()->getStorage('node');
    $node = $node_storage->load($nid);

    if ($node->getType() == 'buch_anlegen') {
      if ($node->field_vertrag_updaten->value == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nút);

        nếu ($mustervertraege == $arr_vertraege[0]) {
          $node->field_vertragsinhalt->value = $getcontract;
          $node->body->format = 'full_html';
          // chưa lưu nút, nó sẽ được lưu sau khi gửi
        }
      }
      if ($node->field_vertrag_updaten_2->value == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nút);

        nếu ($mustervertraege == $arr_vertraege[1]) {
          $node->field_vertragsinhalt_2->value = $getcontract;
          $node->body->format = 'full_html';
          // chưa lưu nút, nó sẽ được lưu sau khi gửi
        }
      }
      if ($node->field_vertrag_updaten_3->value == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nút);

        if ($mustervertraege == $arr_vertraege[2]) {
          $node->field_vertragsinhalt_3->value = $getcontract;
          $node->body->format = 'full_html';
          // chưa lưu nút, nó sẽ được lưu sau khi gửi
        }
      }
      if ($node->field_vertrag_updaten_4->value == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nút);

        nếu ($mustervertraege == $arr_vertraege[3]) {
          $node->field_vertragsinhalt_4->value = $getcontract;
          $node->body->format = 'full_html';
          // chưa lưu nút, nó sẽ được lưu sau khi gửi
        }
      }
      if ($node->field_vertrag_updaten_5->value == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nút);

        nếu ($mustervertraege == $arr_vertraege[4]) {
          $node->field_vertragsinhalt_5->value = $getcontract;
          $node->body->format = 'full_html';
          // chưa lưu nút, nó sẽ được lưu sau khi gửi
        }
      }
      if ($node->field_vertrag_updaten_6->value == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nút);

        nếu ($mustervertraege == $arr_vertraege[5]) {
          $node->field_vertragsinhalt_6->value = $getcontract;
          $node->body->format = 'full_html';
          // chưa lưu nút, nó sẽ được lưu sau khi gửi
        }
      }
      if ($node->field_vertrag_updaten_7->value == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nút);

        nếu ($mustervertraege == $arr_vertraege[6]) {
          $node->field_vertragsinhalt_7->value = $getcontract;
          $node->body->format = 'full_html';
          // chưa lưu nút, nó sẽ được lưu sau khi gửi
        }
      }
      if ($node->field_vertrag_updaten_8->value == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nút);

        nếu ($mustervertraege == $arr_vertraege[7]) {
          $node->field_vertragsinhalt_8->value = $getcontract;
          $node->body->format = 'full_html';
          // chưa lưu nút, nó sẽ được lưu sau khi gửi
        }
      }
      if ($node->field_vertrag_updaten_9->value == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nút);

        nếu ($mustervertraege == $arr_vertraege[8]) {
          $node->field_vertragsinhalt_9->value = $getcontract;
          $node->body->format = 'full_html';
          // chưa lưu nút, nó sẽ được lưu sau khi gửi
        }
      }
      if ($node->field_vertrag_updaten_10->value == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nút);

        nếu ($mustervertraege == $arr_vertraege[9]) {
          $node->field_vertragsinhalt_10->value = $getcontract;
          $node->body->format = 'full_html';
          // chưa lưu nút, nó sẽ được lưu sau khi gửi
        }
      }
      if ($node->field_vertrag_updaten_11->value == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nút);

        if ($mustervertraege == $arr_vertraege[10]) {
          $node->field_vertragsinhalt_11->value = $getcontract;
          $node->body->format = 'full_html';
          // chưa lưu nút, nó sẽ được lưu sau khi gửi
        }
      }
      if ($node->field_vertrag_updaten_12->value == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nút);

        if ($mustervertraege == $arr_vertraege[11]) {
          $node->field_vertragsinhalt_12->value = $getcontract;
          $node->body->format = 'full_html';
          // chưa lưu nút, nó sẽ được lưu sau khi gửi
        }
      }
    }
  }
  }
}

Có ai có một mẹo cho tôi? Tôi sẽ rất biết ơn.

Chào Bavra

P.S.: Hoàn thành thông báo lỗi từ nhật ký:

Lỗi Thông báo: Cố gán "định dạng" thuộc tính trên null trong copy_fields_from_model_contract_node_edit_node_prepare_form() (dòng 57 của /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/modules/custom/copy_fields_from_model_contract_node_edit/copy_fields_from_model_backup-node_edit.module)
#0 [hàm nội bộ]: copy_fields_from_model_contract_node_edit_node_prepare_form(Object(Drupal\node\Entity\Node), 'chỉnh sửa', Object(Drupal\Core\Form\FormState))
#1 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/Entity/EntityForm.php(397): call_user_func_array('copy_fields_fro...', Array)
#2 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/Entity/EntityForm.php(129): Drupal\Core\Entity\EntityForm->prepareInvokeAll(' node_prepare_fo...', Đối tượng (Drupal\Core\Form\FormState))
#3 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/Entity/ContentEntityForm.php(287): Drupal\Core\Entity\EntityForm->init(Object (Drupal\Core\Form\FormState))
#4 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/Entity/EntityForm.php(96): Drupal\Core\Entity\ContentEntityForm->init(Object (Drupal\Core\Form\FormState))
#5 [chức năng nội bộ]: Drupal\Core\Entity\EntityForm->buildForm(Array, Object(Drupal\Core\Form\FormState))
#6 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/Form/FormBuilder.php(531): call_user_func_array(Array, Array)
#7 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/Form/FormBuilder.php(278): Drupal\Core\Form\FormBuilder->retrieveForm(' node_buch_anleg...', Đối tượng (Drupal\Core\Form\FormState))
#8 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/Controller/FormController.php(73): Drupal\Core\Form\FormBuilder->buildForm(Object (Drupal\node\NodeForm), Đối tượng(Drupal\Core\Form\FormState))
#9 [chức năng nội bộ]: Drupal\Core\Controller\FormController->getContentResult(Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\RouteMatch))
#10 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array)
#11 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/Render/Renderer.php(564): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core \EventSubscriber\{đóng}()
#12 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object (Drupal\Core\Render\RenderContext), Đối tượng (Đóng cửa))
#13 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array , Mảng)
#14 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/vendor/symfony/http-kernel/HttpKernel.php(158): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{ Khép kín}()
#15 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/vendor/symfony/http-kernel/HttpKernel.php(80): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component \HttpFoundation\Yêu cầu), 1)
#16 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/modules/contrib/redirect_after_login/src/RedirectMiddleware.php(46): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony \Thành phần\HttpFoundation\Yêu cầu), 1, đúng)
#17 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Drupal\redirect_after_login\RedirectMiddleware->handle(Object(Symfony) \Thành phần\HttpFoundation\Yêu cầu), 1, đúng)
#18 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object (Symfony\Component\HttpFoundation\Request), 1, đúng)
#19 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object (Symfony\Component\HttpFoundation\Request), 1, đúng)
#20 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object (Symfony\Component\HttpFoundation\Request), 1, đúng)
#21 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/modules/ban/src/BanMiddleware.php(50): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony \Thành phần\HttpFoundation\Yêu cầu), 1, đúng)
#22 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\ban\BanMiddleware->handle(Object(Symfony \Thành phần\HttpFoundation\Yêu cầu), 1, đúng)
#23 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object (Symfony\Component\HttpFoundation\Request), 1, đúng)
#24 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony \Thành phần\HttpFoundation\Yêu cầu), 1, đúng)
#25 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/DrupalKernel.php(708): Stack\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation \Yêu cầu), 1, đúng)
#26 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#27 {chính}
lá cờ us
Có vẻ như trường `body` không tồn tại trong loại nội dung.
lá cờ ru
Tôi ngạc nhiên rằng mã đã từng hoạt động. Bạn nhận một đối tượng `$node` trong hook (một đối tượng dưới dạng tham số chức năng có nghĩa là "theo tham chiếu" trong PHP) và sau đó gán lại nó ba lần với ... những thứ khác nhau. Tôi rất nghi ngờ việc nâng cấp PHP là nguyên nhân gây ra lỗi này và toán tử an toàn null từ câu trả lời bên dưới có thể tránh được WSOD, nhưng không thực sự sửa được mã của bạn.
Điểm:0
lá cờ fr

Rất có thể có các nút không có bộ cơ thể, do đó $node->body lợi nhuận vô giá trị.

Kể từ khi sử dụng PHP8, bạn có thể thử nhà điều hành an toàn null bằng cách đơn giản làm:

$node->body?->format = 'full_html';

(chú ý kỹ các ?-> toán tử có nghĩa là "nếu null chỉ hủy bỏ chuỗi")

Nếu nút thể hiện sự cố có phần thân, vui lòng cập nhật câu hỏi.

Chỉnh sửa: Đã sửa vị trí của toán tử an toàn null theo nhận xét.

lá cờ cn
Điều đó sẽ tạo ra lỗi tương tự - có lẽ ý bạn là `$node?->body?->format` hoặc `$node->body?->format`?
apaderno avatar
lá cờ us
@Nick Lỗi là * Cố gắng gán "định dạng" thuộc tính trên null *. Điều này có nghĩa là `$node?->body->format` sẽ không hoạt động. `$node?->body?->format` sẽ là lựa chọn tốt hơn. Dù sao thì điều đó sẽ không sửa phần còn lại của mã được hiển thị trong câu hỏi.
lá cờ fr
@Clive @apaderno từ góc độ PHP, bạn nói đúng; tuy nhiên, nếu nội dung được đặt và đó là nội dung Drupal (không phải một số trường khác có cùng tên), thì nó luôn có thuộc tính `format` -- điều đó không bao giờ (theo hiểu biết của tôi) `null`. Do đó thiếu sót của tôi.Vui lòng sửa cho tôi nếu có trường hợp những điều trên không được áp dụng.
lá cờ cn
_Nếu phần thân được đặt_ - nhưng câu trả lời của bạn là khi phần thân không được đặt, đó là lý do tại sao bạn đang kiểm tra null cho điều sai. Null-safe kiểm tra mục ở bên trái của toán tử, không phải bên phải, vì vậy để kiểm tra xem phần thân có phải là null hay không, phần đó cần phải là `body?->format`. Bạn cũng có thể kiểm tra nút để tìm giá trị rỗng trong cùng một nhịp thở, điều đó cũng có ý nghĩa, nhưng bạn không thể kiểm tra giá trị rỗng trên phần thân bằng cách kiểm tra giá trị rỗng trên nút
lá cờ fr
@Clive đã hiểu, cảm ơn - đã sửa đổi câu trả lời cho phù hợp.

Đă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.