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

FrankieD3 created an issue. See original summary.

dineshkumarbollu’s picture

StatusFileSize
new1.29 KB

Provided patch for this please review.Thanks

liam morland’s picture

Version: 8.x-2.4 » 8.x-2.x-dev
Status: Active » Closed (outdated)
liam morland’s picture

Status: Closed (outdated) » Needs review
frankied3’s picture

#2 fixed the deprecation warning, though another deprecation warning has arisen. Relevant lines below.

Deprecated function: Creation of dynamic property Drupal\tablefield\TableValue::$value is deprecated in Drupal\Core\TypedData\TypedData->setValue() (line 102 of {homedir}/{webroot}/core/lib/Drupal/Core/TypedData/TypedData.php)

#0 {homedir}/{webroot}/core/includes/bootstrap.inc(164): _drupal_error_handler_real(8192, 'Creation of dyn...', '{homedir}/{webroot}...', 102)
#1 {homedir}/{webroot}/core/lib/Drupal/Core/TypedData/TypedData.php(102): _drupal_error_handler(8192, 'Creation of dyn...', '{homedir}/{webroot}...', 102)
#2 {homedir}/{webroot}/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php(87): Drupal\Core\TypedData\TypedData->setValue(NULL, false)
#3 {homedir}/{webroot}/core/lib/Drupal/Core/Field/FieldItemBase.php(125): Drupal\Core\TypedData\Plugin\DataType\Map->setValue(Array, false)
#4 {homedir}/{webroot}/modules/contrib/tablefield/src/Plugin/Field/FieldType/TablefieldItem.php(206): Drupal\Core\Field\FieldItemBase->setValue(Array, false)
#5 {homedir}/{webroot}/core/lib/Drupal/Core/TypedData/TypedDataManager.php(208): Drupal\tablefield\Plugin\Field\FieldType\TablefieldItem->setValue(Array, false)
frankied3’s picture

Status: Needs review » Needs work
frankied3’s picture

It appears that the second warning is a core issue. #3368250

frankied3’s picture

Status: Needs work » Reviewed & tested by the community
stockticker’s picture

Hmm, 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):

 * Classes deriving from this base class have to declare $value
 * or override getValue() or setValue().

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.

stockticker’s picture

Status: Reviewed & tested by the community » Needs review
subir_ghosh’s picture

I have applied #9. The error has disappeared.

I am on PHP 8.2.13, D10.2.0 and 8.x-2.4 on Tablefield.

Jaspreet-Kaur’s picture

Applied patch #9 on Drupal 9. Its not working.

nagy.balint’s picture

Works for me as well on Drupal 10.2.2 and tablefield 2.4, php 8.2

albie001’s picture

Can also confirm the patch is working for me.

Drupal 10.2.3
php8.2.15

Thanks

frankied3’s picture

What else do we need to get this moving down the pipeline towards a PR?

kurttrowbridge’s picture

Status: Needs review » Reviewed & tested by the community

One 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!

almunnings’s picture

Please and thank you.
Works as expected.

bramdriesen’s picture

I also tested this patch on our project which is using PHP 8.2. Can confirm as well this patch resolved the issue for us.

  • Liam Morland committed edaa3d57 on 8.x-2.x
    Issue #3397688 by dineshkumarbollu: Correct case of TablefieldFormatter...
liam morland’s picture

Status: Reviewed & tested by the community » Active
Related issues: +#3368250: Deprecated creation of dynamic property in TypedData

I 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.

bramdriesen’s picture

That'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.

liam morland’s picture

Status: Active » Fixed

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.