Problem/Motivation
PHP 8.2 has now deprecated the creation of dynamic properties. See the documentation page for deprecated features, as well as the deprecation warning below.
Deprecated function: Creation of dynamic property Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter::$ModuleHandler is deprecated in Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter->__construct() (line 57 of {homedir}/{webroot}/modules/contrib/tablefield/src/Plugin/Field/FieldFormatter/TablefieldFormatter.php)
#0 {homedir}/{webroot}/core/includes/bootstrap.inc(164): _drupal_error_handler_real(8192, 'Creation of dyn...', '~...', 57)
#1 {homedir}/{webroot}/modules/contrib/tablefield/src/Plugin/Field/FieldFormatter/TablefieldFormatter.php(57): _drupal_error_handler(8192, 'Creation of dyn...', '~...', 57)
#2 {homedir}/{webroot}/modules/contrib/tablefield/src/Plugin/Field/FieldFormatter/TablefieldFormatter.php(64): Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter->__construct('tablefield', Array, Object(Drupal\field\Entity\FieldConfig), Array, 'hidden', 'list', Array, Object(Drupal\Core\Session\AccountProxy), Object(Drupal\Core\Extension\ModuleHandler))
#3 {homedir}/{webroot}/core/lib/Drupal/Core/Field/FormatterPluginManager.php(64): Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter::create(Object(Drupal\Core\DependencyInjection\Container), Array, 'tablefield', Array)
#4 {homedir}/{webroot}/core/lib/Drupal/Core/Field/FormatterPluginManager.php(126): Drupal\Core\Field\FormatterPluginManager->createInstance('tablefield', Array)
#5 {homedir}/{webroot}/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php(202): Drupal\Core\Field\FormatterPluginManager->getInstance(Array)
#6 {homedir}/{webroot}/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php(238): Drupal\Core\Entity\Entity\EntityViewDisplay->getRenderer('field_pricing')
#7 {homedir}/{webroot}/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php(268): Drupal\Core\Entity\Entity\EntityViewDisplay->buildMultiple(Array)
#8 {homedir}/{webroot}/core/lib/Drupal/Core/Entity/EntityViewBuilder.php(339): Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay->buildMultiple(Array)
#9 {homedir}/{webroot}/core/modules/node/src/NodeViewBuilder.php(24): Drupal\Core\Entity\EntityViewBuilder->buildComponents(Array, Array, Array, 'list')
#10 {homedir}/{webroot}/core/lib/Drupal/Core/Entity/EntityViewBuilder.php(281): Drupal\node\NodeViewBuilder->buildComponents(Array, Array, Array, 'list')
#11 {homedir}/{webroot}/core/lib/Drupal/Core/Entity/EntityViewBuilder.php(238): Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array)
#12 [internal function]: Drupal\Core\Entity\EntityViewBuilder->build(Array)
#13 {homedir}/{webroot}/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php(111): call_user_func_array(Array, Array)
#14 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(797): Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_ren...', 'exception', 'Drupal\\Core\\Ren...')
#15 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(386): Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array)
#16 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(204): Drupal\Core\Render\Renderer->doRender(Array, false)
#17 {homedir}/{webroot}/core/lib/Drupal/Core/Template/TwigExtension.php(474): Drupal\Core\Render\Renderer->render(Array)
#18 {homedir}/vendor/twig/twig/src/Environment.php(361) : eval()'d code(69): Drupal\Core\Template\TwigExtension->escapeFilter(Object(Drupal\Core\Template\TwigEnvironment), Array, 'html', NULL, true)
#19 {homedir}/vendor/twig/twig/src/Template.php(394): __TwigTemplate_89144da0e39f85768489a67bdb116541->doDisplay(Array, Array)
#20 {homedir}/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#21 {homedir}/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
#22 {homedir}/vendor/twig/twig/src/TemplateWrapper.php(40): Twig\Template->render(Array, Array)
#23 {homedir}/{webroot}/core/themes/engines/twig/twig.engine(53): Twig\TemplateWrapper->render(Array)
#24 {homedir}/{webroot}/core/lib/Drupal/Core/Theme/ThemeManager.php(372): twig_render_template('themes/custom/v...', Array)
#25 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(445): Drupal\Core\Theme\ThemeManager->render('views_view_unfo...', Array)
#26 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(458): Drupal\Core\Render\Renderer->doRender(Array)
#27 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(204): Drupal\Core\Render\Renderer->doRender(Array, false)
#28 {homedir}/{webroot}/core/lib/Drupal/Core/Template/TwigExtension.php(474): Drupal\Core\Render\Renderer->render(Array)
#29 {homedir}/vendor/twig/twig/src/Environment.php(361) : eval()'d code(73): Drupal\Core\Template\TwigExtension->escapeFilter(Object(Drupal\Core\Template\TwigEnvironment), Array, 'html', NULL, true)
#30 {homedir}/vendor/twig/twig/src/Template.php(394): __TwigTemplate_f909c498317d64f0732548d1b47493df->doDisplay(Array, Array)
#31 {homedir}/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#32 {homedir}/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
#33 {homedir}/vendor/twig/twig/src/TemplateWrapper.php(40): Twig\Template->render(Array, Array)
#34 {homedir}/{webroot}/core/themes/engines/twig/twig.engine(53): Twig\TemplateWrapper->render(Array)
#35 {homedir}/{webroot}/core/lib/Drupal/Core/Theme/ThemeManager.php(372): twig_render_template('themes/custom/v...', Array)
#36 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(445): Drupal\Core\Theme\ThemeManager->render('views_view', Array)
#37 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(458): Drupal\Core\Render\Renderer->doRender(Array)
#38 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(204): Drupal\Core\Render\Renderer->doRender(Array, false)
#39 {homedir}/{webroot}/core/lib/Drupal/Core/Template/TwigExtension.php(474): Drupal\Core\Render\Renderer->render(Array)
#40 {homedir}/vendor/twig/twig/src/Environment.php(361) : eval()'d code(59): Drupal\Core\Template\TwigExtension->escapeFilter(Object(Drupal\Core\Template\TwigEnvironment), Array, 'html', NULL, true)
#41 {homedir}/vendor/twig/twig/src/Template.php(171): __TwigTemplate_754107f42b9ab7d01e7a70df2681a626->block_content(Array, Array)
#42 {homedir}/vendor/twig/twig/src/Environment.php(361) : eval()'d code(45): Twig\Template->displayBlock('content', Array, Array)
#43 {homedir}/vendor/twig/twig/src/Template.php(394): __TwigTemplate_754107f42b9ab7d01e7a70df2681a626->doDisplay(Array, Array)
#44 {homedir}/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#45 {homedir}/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
#46 {homedir}/vendor/twig/twig/src/TemplateWrapper.php(40): Twig\Template->render(Array, Array)
#47 {homedir}/{webroot}/core/themes/engines/twig/twig.engine(53): Twig\TemplateWrapper->render(Array)
#48 {homedir}/{webroot}/core/lib/Drupal/Core/Theme/ThemeManager.php(372): twig_render_template('themes/custom/v...', Array)
#49 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(445): Drupal\Core\Theme\ThemeManager->render('block', Array)
#50 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(458): Drupal\Core\Render\Renderer->doRender(Array)
#51 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(204): Drupal\Core\Render\Renderer->doRender(Array, false)
#52 {homedir}/{webroot}/core/lib/Drupal/Core/Template/TwigExtension.php(474): Drupal\Core\Render\Renderer->render(Array)
#53 {homedir}/vendor/twig/twig/src/Environment.php(361) : eval()'d code(52): Drupal\Core\Template\TwigExtension->escapeFilter(Object(Drupal\Core\Template\TwigEnvironment), Array, 'html', NULL, true)
#54 {homedir}/vendor/twig/twig/src/Template.php(394): __TwigTemplate_c30ada5ebc491e6da4784971163f663e->doDisplay(Array, Array)
#55 {homedir}/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#56 {homedir}/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
#57 {homedir}/vendor/twig/twig/src/TemplateWrapper.php(40): Twig\Template->render(Array, Array)
#58 {homedir}/{webroot}/core/themes/engines/twig/twig.engine(53): Twig\TemplateWrapper->render(Array)
#59 {homedir}/{webroot}/core/lib/Drupal/Core/Theme/ThemeManager.php(372): twig_render_template('themes/custom/v...', Array)
#60 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(445): Drupal\Core\Theme\ThemeManager->render('layout__onecol', Array)
#61 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(458): Drupal\Core\Render\Renderer->doRender(Array)
#62 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(458): Drupal\Core\Render\Renderer->doRender(Array)
#63 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(204): Drupal\Core\Render\Renderer->doRender(Array, false)
#64 {homedir}/{webroot}/core/lib/Drupal/Core/Template/TwigExtension.php(474): Drupal\Core\Render\Renderer->render(Array)
#65 {homedir}/vendor/twig/twig/src/Environment.php(361) : eval()'d code(63): Drupal\Core\Template\TwigExtension->escapeFilter(Object(Drupal\Core\Template\TwigEnvironment), Array, 'html', NULL, true)
#66 {homedir}/vendor/twig/twig/src/Template.php(394): __TwigTemplate_4830a3ca2ac93bcaa69ed846c8c4d244->doDisplay(Array, Array)
#67 {homedir}/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#68 {homedir}/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
#69 {homedir}/vendor/twig/twig/src/TemplateWrapper.php(40): Twig\Template->render(Array, Array)
#70 {homedir}/{webroot}/core/themes/engines/twig/twig.engine(53): Twig\TemplateWrapper->render(Array)
#71 {homedir}/{webroot}/core/lib/Drupal/Core/Theme/ThemeManager.php(372): twig_render_template('themes/custom/v...', Array)
#72 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(445): Drupal\Core\Theme\ThemeManager->render('taxonomy_term', Array)
#73 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(204): Drupal\Core\Render\Renderer->doRender(Array, false)
#74 {homedir}/{webroot}/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(238): Drupal\Core\Render\Renderer->render(Array, false)
#75 {homedir}/{webroot}/core/lib/Drupal/Core/Render/Renderer.php(592): Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}()
#76 {homedir}/{webroot}/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(231): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure))
#77 {homedir}/{webroot}/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(128): Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))
#78 {homedir}/{webroot}/core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php(90): Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))
#79 [internal function]: Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
#80 {homedir}/{webroot}/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(111): call_user_func(Array, Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
#81 {homedir}/vendor/symfony/http-kernel/HttpKernel.php(186): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view')
#82 {homedir}/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#83 {homedir}/{webroot}/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#84 {homedir}/{webroot}/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#85 {homedir}/{webroot}/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#86 {homedir}/{webroot}/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#87 {homedir}/vendor/asm89/stack-cors/src/Cors.php(53): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#88 {homedir}/{webroot}/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Asm89\Stack\Cors->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#89 {homedir}/{webroot}/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#90 {homedir}/{webroot}/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#91 {homedir}/{webroot}/core/lib/Drupal/Core/DrupalKernel.php(704): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#92 {homedir}/{webroot}/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#93 {main}
Steps to reproduce
Proposed resolution
Remaining tasks
User interface changes
API changes
Data model changes
Comments
Comment #2
dineshkumarbollu commentedProvided patch for this please review.Thanks
Comment #3
liam morlandComment #4
liam morlandComment #5
frankied3#2 fixed the deprecation warning, though another deprecation warning has arisen. Relevant lines below.
Comment #6
frankied3Comment #7
frankied3It appears that the second warning is a core issue. #3368250
Comment #8
frankied3Comment #9
stockticker commentedHmm, I think the patch provided in https://www.drupal.org/project/drupal/issues/3368250 is not a proper fix, as it also brings tons of other different warnings (even errors), if you have other contrib modules installed, which extend abstract class TypedData.
Please, see the class description (of the TypedData abstract class):
So, it's a matter Drupal\tablefield\TableValue to declare
$value.Here's a new patch, it fixes both the original report issue plus the one that appears in #5.
Comment #10
stockticker commentedComment #11
subir_ghoshI have applied #9. The error has disappeared.
I am on PHP 8.2.13, D10.2.0 and 8.x-2.4 on Tablefield.
Comment #12
Jaspreet-Kaur commentedApplied patch #9 on Drupal 9. Its not working.
Comment #13
nagy.balint commentedWorks for me as well on Drupal 10.2.2 and tablefield 2.4, php 8.2
Comment #14
albie001 commentedCan also confirm the patch is working for me.
Drupal 10.2.3
php8.2.15
Thanks
Comment #15
frankied3What else do we need to get this moving down the pipeline towards a PR?
Comment #16
kurttrowbridgeOne more confirmation that the patch in #9 is working on a site with Drupal 10.2, PHP 8.2, and the dev version of this module. Going to mark this as RTBC. Thanks!
Comment #17
almunningsPlease and thank you.
Works as expected.
Comment #18
bramdriesenI also tested this patch on our project which is using PHP 8.2. Can confirm as well this patch resolved the issue for us.
Comment #20
liam morlandI have committed the fix to the case of
moduleHandler; patch 2.The other hunk in patch 9 is fixing what is really a core bug. I am concerned that this fix may cause incompatibility if it does not match the fix they end up making to Drupal core in #3368250: Deprecated creation of dynamic property in TypedData. It might work to use
#[\AllowDynamicProperties]until it is fixed in core.Comment #21
bramdriesenThat's a good point. I do think however it's better to lay focus on the core issue rather as adding a workaround here. I think this issue can actually be set to fixed then.
Comment #22
liam morland