Puncte:-2

După actualizarea la PHP 8, modulul nu mai funcționează

drapel sg

Mi-am actualizat Drupal de la 8 la 9 și am folosit PHP 7.4. Acum am ales momentul actualizării la PHP 8. Totul rulează până acum, doar cu un modul auto-construit primesc acum un mesaj de eroare:

Site-ul web a întâmpinat o eroare neașteptată. Vă rugăm să încercați din nou mai târziu.
Eroare: Încercați să atribuiți proprietatea „format” pe null în copy_fields_from_model_contract_node_edit_node_prepare_form() (linia 57 din modules/custom/copy_fields_from_model_contract_node_edit/copy_fields_from_model_contract_node_edit.module).

Aceasta se referă exact la această linie:

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

Codul modulului meu nu este elegant, dar și-a făcut treaba după dorință. Practic, copiez dintr-un alt nod conținutul câmpului de corp într-un câmp de corp al altui nod. Codul întregului modul arată astfel:

<?php

utilizați Drupal\node\NodeInterface;
utilizați Drupal\Core\Form\FormStateInterface;


/**
* Implementează hook_ENTITY_TYPE_prepare_form() pentru entitățile nod.
*/
funcția copy_fields_from_model_contract_node_edit_node_prepare_form(NodeInterface $nod, $operație, FormStateInterface $form_state)
{

//TODO Construiește NID ca matrice și continuă cu bucla

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

  foreach ($arr_vertraege ca $mustervertraege) {

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

    if ($nid == $mustervertraege) {


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

  //TODO Funcționează fără ($operațiune == „implicit”)

  if ($operație == 'editare') {
    /*dpm("Modulează și editează");*/
    //TODO Va trage întotdeauna nodul curent și nid. Dar nu funcționează încă cu crearea nodului. Eroare: Apel la o funcție membru id() pe null in

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

    if ($node->getType() == 'buch_anlegen') {
      if ($node->field_vertrag_updaten->valoare == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nod);

        if ($mustervertraege == $arr_vertraege[0]) {
          $nod->field_vertragsinhalt->valoare = $getcontract;
          $node->body->format = 'full_html';
          // nu salvați încă nodul, acesta va fi salvat după trimitere
        }
      }
      if ($node->field_vertrag_updaten_2->valoare == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nod);

        if ($mustervertraege == $arr_vertraege[1]) {
          $nod->field_vertragsinhalt_2->valoare = $getcontract;
          $node->body->format = 'full_html';
          // nu salvați încă nodul, acesta va fi salvat după trimitere
        }
      }
      if ($node->field_vertrag_updaten_3->valoare == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nod);

        if ($mustervertraege == $arr_vertraege[2]) {
          $nod->field_vertragsinhalt_3->valoare = $getcontract;
          $node->body->format = 'full_html';
          // nu salvați încă nodul, acesta va fi salvat după trimitere
        }
      }
      if ($node->field_vertrag_updaten_4->valoare == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nod);

        if ($mustervertraege == $arr_vertraege[3]) {
          $nod->field_vertragsinhalt_4->valoare = $getcontract;
          $node->body->format = 'full_html';
          // nu salvați încă nodul, acesta va fi salvat după trimitere
        }
      }
      if ($node->field_vertrag_updaten_5->valoare == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nod);

        if ($mustervertraege == $arr_vertraege[4]) {
          $nod->field_vertragsinhalt_5->valoare = $getcontract;
          $node->body->format = 'full_html';
          // nu salvați încă nodul, acesta va fi salvat după trimitere
        }
      }
      if ($node->field_vertrag_updaten_6->valoare == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nod);

        if ($mustervertraege == $arr_vertraege[5]) {
          $nod->field_vertragsinhalt_6->valoare = $getcontract;
          $node->body->format = 'full_html';
          // nu salvați încă nodul, acesta va fi salvat după trimitere
        }
      }
      if ($node->field_vertrag_updaten_7->valoare == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nod);

        if ($mustervertraege == $arr_vertraege[6]) {
          $nod->field_vertragsinhalt_7->valoare = $getcontract;
          $node->body->format = 'full_html';
          // nu salvați încă nodul, acesta va fi salvat după trimitere
        }
      }
      if ($node->field_vertrag_updaten_8->valoare == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nod);

        if ($mustervertraege == $arr_vertraege[7]) {
          $nod->field_vertragsinhalt_8->valoare = $getcontract;
          $node->body->format = 'full_html';
          // nu salvați încă nodul, acesta va fi salvat după trimitere
        }
      }
      if ($node->field_vertrag_updaten_9->valoare == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nod);

        if ($mustervertraege == $arr_vertraege[8]) {
          $nod->field_vertragsinhalt_9->valoare = $getcontract;
          $node->body->format = 'full_html';
          // nu salvați încă nodul, acesta va fi salvat după trimitere
        }
      }
      if ($node->field_vertrag_updaten_10->valoare == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nod);

        if ($mustervertraege == $arr_vertraege[9]) {
          $nod->field_vertragsinhalt_10->valoare = $getcontract;
          $node->body->format = 'full_html';
          // nu salvați încă nodul, acesta va fi salvat după trimitere
        }
      }
      if ($node->field_vertrag_updaten_11->valoare == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nod);

        if ($mustervertraege == $arr_vertraege[10]) {
          $node->field_vertragsinhalt_11->valoare = $getcontract;
          $node->body->format = 'full_html';
          // nu salvați încă nodul, acesta va fi salvat după trimitere
        }
      }
      if ($node->field_vertrag_updaten_12->valoare == '1') {
        // dpm($node->field_vertrag_updaten->value);
        //var_dump($nod);

        if ($mustervertraege == $arr_vertraege[11]) {
          $nod->field_vertragsinhalt_12->valoare = $getcontract;
          $node->body->format = 'full_html';
          // nu salvați încă nodul, acesta va fi salvat după trimitere
        }
      }
    }
  }
  }
}

Are cineva un pont pentru mine? Aș fi foarte recunoscător.

Greetz Bavra

P.S.: Mesaj de eroare complet din jurnalele:

Eroare de mesaj: Încercarea de a atribui proprietatea „format” pe null în copy_fields_from_model_contract_node_edit_node_prepare_form() (linia 57 din /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/modules/custom/copy_model_modules_confrom_contract_model_modules_confromcoedit_model_modules_confromco_edit_model
#0 [funcție internă]: copy_fields_from_model_contract_node_edit_node_prepare_form(Object(Drupal\node\Entity\Node), „edit”, 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...', Object(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 [funcție internă]: 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...', Object(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), obiect(Drupal\Core\Form\FormState))
#9 [funcție internă]: 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\{closure}()
#12 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(ObRenderContext (Drupal\Core\Render\RenderContext), Object(Closure))
#13 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingSubscriberControllerRenderingSubscriberWrapperControllerWrapper(97) , Matrice)
#14 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/vendor/symfony/http-kernel/HttpKernel.php(158): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Subscriber\{Evental\Coscriber\ închidere}()
#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\Request), 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) \Component\HttpFoundation\Request), 1, adevărat)
#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) \Component\HttpFoundation\Request), 1, adevărat)
#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, adevărat)
#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, adevărat)
#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, adevărat)
#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) \Component\HttpFoundation\Request), 1, adevărat)
#22 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\ban\BanMiddleware->handle(Object(Symfony) \Component\HttpFoundation\Request), 1, adevărat)
#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, adevărat)
#24 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony) \Component\HttpFoundation\Request), 1, adevărat)
#25 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/core/lib/Drupal/Core/DrupalKernel.php(708): Stack\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation) \Solicitare), 1, adevărat)
#26 /home/bavramor/data/Webdesign/Webseiten/landwehrcie-backup-drupal9/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#27 {principal}
drapel us
Se pare că câmpul „corp” nu există în tipul de conținut.
drapel ru
Sunt surprins că acel cod a funcționat vreodată. Primiți un obiect `$node` în hook (un obiect ca parametru de funcție înseamnă "prin referință" în PHP) și apoi îl reatribuiți de trei ori cu... lucruri diferite. Mă îndoiesc foarte mult că upgrade-ul PHP este cauza acestei erori, iar operatorul null-safe din răspunsul de mai jos ar putea evita WSOD, dar nu va remedia cu adevărat codul.
Puncte:0
drapel fr

Cel mai probabil există noduri care nu au un set de corp, deci $node->corp se intoarce nul.

Din moment ce utilizați PHP8, puteți încerca operator sigur nul pur și simplu făcând:

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

( acordați mare atenție la ?-> operator care înseamnă „dacă nul, doar anulați lanțul” )

Dacă nodul care prezintă problema are un corp, vă rugăm să actualizați întrebarea.

Editați | ×: Poziția corectată a operatorului de siguranță nul conform comentariilor.

drapel cn
Asta va produce aceeași eroare - poate v-ați referit la `$node?->body?->format` sau `$node->body?->format`?
apaderno avatar
drapel us
@Nick Eroarea este *Încercarea de a atribui proprietatea „format” pe null*. Aceasta înseamnă că `$node?->body->format` nu va funcționa. `$node?->body?->format` ar fi o alegere mai bună. Oricum, asta nu va repara restul codului afișat în întrebare.
drapel fr
@Clive @apaderno din perspectiva PHP, ai dreptate; totuși, dacă corpul este setat și este corpul Drupal (nu un alt câmp cu același nume), acesta are întotdeauna proprietatea `format` -- aceasta nu este niciodată (din cunoștințele mele) `null`. De aici omisiunea mea.Vă rog să mă corectați dacă există cazuri în care cele de mai sus nu se aplică.
drapel cn
_Dacă corpul este setat_ - dar răspunsul tău este pentru atunci când corpul nu este setat, de aceea testezi null pentru lucrul greșit. Null-safe testează elementul din stânga operatorului, nu din dreapta, așa că pentru a testa dacă corpul este nul, trebuie să fie `body?->format`. De asemenea, puteți testa nodul pentru null și în aceeași suflare, și asta are sens, dar nu puteți testa nul pe corp testând nul pe nod
drapel fr
@Clive a înțeles, mulțumesc -- a modificat răspunsul în consecință.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.