1

Here below errors shows when accessing categories within backend. Only started happening since updating to 2.3.4 yesterday. Seen similar errors however normally actually have a key specified and that theme is then missing however my error seems to be trying to pull a theme without a key.

Stack Trace:

Exception #0 (LogicException): Unable to load theme by specified key: ''
<pre>#1 Magento\Framework\View\Design\Theme\FlyweightFactory\Proxy->create('') called at [vendor/magento/module-catalog/Model/Category/Attribute/LayoutUpdateManager.php:72]
#2 Magento\Catalog\Model\Category\Attribute\LayoutUpdateManager->getLayoutProcessor() called at [vendor/magento/module-catalog/Model/Category/Attribute/LayoutUpdateManager.php:95]
#3 Magento\Catalog\Model\Category\Attribute\LayoutUpdateManager->fetchAvailableFiles(&Magento\Catalog\Model\Category\Interceptor#000000001086af1c000000002644233d#) called at [generated/code/Magento/Catalog/Model/Category/Attribute/LayoutUpdateManager/Proxy.php:95]
#4 Magento\Catalog\Model\Category\Attribute\LayoutUpdateManager\Proxy->fetchAvailableFiles(&Magento\Catalog\Model\Category\Interceptor#000000001086af1c000000002644233d#) called at [vendor/magento/module-catalog/Model/Category/Attribute/Source/LayoutUpdate.php:38]
#5 Magento\Catalog\Model\Category\Attribute\Source\LayoutUpdate->listAvailableOptions(&Magento\Catalog\Model\Category\Interceptor#000000001086af1c000000002644233d#) called at [vendor/magento/module-catalog/Model/Attribute/Source/AbstractLayoutUpdate.php:94]
#6 Magento\Catalog\Model\Attribute\Source\AbstractLayoutUpdate->getOptionsFor(&Magento\Catalog\Model\Category\Interceptor#000000001086af1c000000002644233d#) called at [vendor/magento/module-catalog/Model/Category/DataProvider.php:387]
#7 Magento\Catalog\Model\Category\DataProvider->getAttributesMeta(&Magento\Eav\Model\Entity\Type#000000001086af1d000000002644233d#) called at [vendor/magento/framework/Interception/Interceptor.php:58]
#8 Magento\Catalog\Model\Category\DataProvider\Interceptor->___callParent('getAttributesMet...', array(&Magento\Eav\Model\Entity\Type#000000001086af1d000000002644233d#)) called at [vendor/magento/framework/Interception/Interceptor.php:138]
#9 Magento\Catalog\Model\Category\DataProvider\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Eav\Model\Entity\Type#000000001086af1d000000002644233d#) called at [vendor/magento/framework/Interception/Interceptor.php:153]
#10 Magento\Catalog\Model\Category\DataProvider\Interceptor->___callPlugins('getAttributesMet...', array(&Magento\Eav\Model\Entity\Type#000000001086af1d000000002644233d#), array(array('category_ui_form...'))) called at [generated/code/Magento/Catalog/Model/Category/DataProvider/Interceptor.php:65]
#11 Magento\Catalog\Model\Category\DataProvider\Interceptor->getAttributesMeta(&Magento\Eav\Model\Entity\Type#000000001086af1d000000002644233d#) called at [vendor/magento/module-catalog/Model/Category/DataProvider.php:292]
#12 Magento\Catalog\Model\Category\DataProvider->prepareMeta(array()) called at [vendor/magento/framework/Interception/Interceptor.php:58]
#13 Magento\Catalog\Model\Category\DataProvider\Interceptor->___callParent('prepareMeta', array(array())) called at [vendor/magento/framework/Interception/Interceptor.php:138]
#14 Magento\Catalog\Model\Category\DataProvider\Interceptor->Magento\Framework\Interception\{closure}(array()) called at [vendor/magento/framework/Interception/Interceptor.php:153]
#15 Magento\Catalog\Model\Category\DataProvider\Interceptor->___callPlugins('prepareMeta', array(array()), array(array('google_optimizer...'))) called at [generated/code/Magento/Catalog/Model/Category/DataProvider/Interceptor.php:39]
#16 Magento\Catalog\Model\Category\DataProvider\Interceptor->prepareMeta(array()) called at [vendor/magento/module-catalog/Model/Category/DataProvider.php:224]
#17 Magento\Catalog\Model\Category\DataProvider->getMeta() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#18 Magento\Catalog\Model\Category\DataProvider\Interceptor->___callParent('getMeta', array()) called at [vendor/magento/framework/Interception/Interceptor.php:138]
#19 Magento\Catalog\Model\Category\DataProvider\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/smile/elasticsuite/src/module-elasticsuite-catalog/Plugin/Ui/Category/Form/DataProviderPlugin.php:96]
#20 Smile\ElasticsuiteCatalog\Plugin\Ui\Category\Form\DataProviderPlugin->aroundGetMeta(&Magento\Catalog\Model\Category\DataProvider\Interceptor#000000001086adbc000000002644233d#, &Closure#000000001086adf1000000002644233d#) called at [vendor/magento/framework/Interception/Interceptor.php:135]
#21 Magento\Catalog\Model\Category\DataProvider\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#22 Magento\Catalog\Model\Category\DataProvider\Interceptor->___callPlugins('getMeta', array(), NULL) called at [generated/code/Magento/Catalog/Model/Category/DataProvider/Interceptor.php:26]
#23 Magento\Catalog\Model\Category\DataProvider\Interceptor->getMeta() called at [vendor/magento/framework/View/Element/UiComponentFactory.php:318]
#24 Magento\Framework\View\Element\UiComponentFactory->mergeMetadata('category_form', array('category_form' => array('attributes' => array('name' => 'category_form', 'class' => 'Magento\Ui\Compo...'), 'arguments' => arr
#25 Magento\Framework\View\Element\UiComponentFactory->create('category_form', NULL, array('context' => &Magento\Framework\View\Element\UiComponent\Context#000000001086adf6000000002644233d#, 'structure' => &Magento\Framework\View\Layout\Data\Structure#000000001086a9e7000000002644233d#)) called at [vendor/magento/framework/View/Layout/Generator/UiComponent.php:140]
#26 Magento\Framework\View\Layout\Generator\UiComponent->generateComponent(&Magento\Framework\View\Layout\Data\Structure#000000001086a9e7000000002644233d#, 'category_form', array('attributes' => array('group' => '', 'component' => '', 'aclResource' => '', 'visibilityCondit...' => array())), &Magento\Framework\View\Layout\Interceptor#000000001086a99d000000002644233d#) called at [vendor/magento/framework/View/Layout/Generator/UiComponent.php:103]
#27 Magento\Framework\View\Layout\Generator\UiComponent->process(&Magento\Framework\View\Layout\Reader\Context#000000001086ac60000000002644233d#, &Magento\Framework\View\Layout\Generator\Context#000000001086ac4e000000002644233d#) called at [vendor/magento/framework/View/Layout/GeneratorPool.php:81]
#28 Magento\Framework\View\Layout\GeneratorPool->process(&Magento\Framework\View\Layout\Reader\Context#000000001086ac60000000002644233d#, &Magento\Framework\View\Layout\Generator\Context#000000001086ac4e000000002644233d#) called at [vendor/magento/framework/View/Layout.php:350]
#29 Magento\Framework\View\Layout->generateElements() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:89]
#30 Magento\Framework\View\Layout\Interceptor->generateElements() called at [vendor/magento/framework/View/Layout/Builder.php:129]
#31 Magento\Framework\View\Layout\Builder->generateLayoutBlocks() called at [vendor/magento/framework/View/Page/Builder.php:55]
#32 Magento\Framework\View\Page\Builder->generateLayoutBlocks() called at [vendor/magento/framework/View/Layout/Builder.php:65]
#33 Magento\Framework\View\Layout\Builder->build() called at [vendor/magento/framework/View/Layout.php:257]
#34 Magento\Framework\View\Layout->build() called at [vendor/magento/framework/View/Layout.php:882]
#35 Magento\Framework\View\Layout->getBlock('menu') called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:414]
#36 Magento\Framework\View\Layout\Interceptor->getBlock('menu') called at [vendor/magento/module-backend/Model/View/Result/Page.php:26]
#37 Magento\Backend\Model\View\Result\Page->setActiveMenu('Magento_Catalog:...') called at [generated/code/Magento/Backend/Model/View/Result/Page/Interceptor.php:24]
#38 Magento\Backend\Model\View\Result\Page\Interceptor->setActiveMenu('Magento_Catalog:...') called at [vendor/magento/module-catalog/Controller/Adminhtml/Category/Edit.php:113]
#39 Magento\Catalog\Controller\Adminhtml\Category\Edit->execute() called at [generated/code/Magento/Catalog/Controller/Adminhtml/Category/Edit/Interceptor.php:24]
#40 Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor->execute() called at [vendor/magento/framework/App/Action/Action.php:108]
#41 Magento\Framework\App\Action\Action->dispatch(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#) called at [vendor/magento/module-backend/App/AbstractAction.php:231]
#42 Magento\Backend\App\AbstractAction->dispatch(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#) called at [vendor/magento/framework/Interception/Interceptor.php:58]
#43 Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor->___callParent('dispatch', array(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#)) called at [vendor/magento/framework/Interception/Interceptor.php:138]
#44 Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#) called at [vendor/magento/module-backend/App/Action/Plugin/Authentication.php:143]
#45 Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch(&Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor#000000001086af35000000002644233d#, &Closure#000000001086af22000000002644233d#, &Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#) called at [vendor/magento/framework/Interception/Interceptor.php:135]
#46 Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#) called at [vendor/magento/framework/Interception/Interceptor.php:153]
#47 Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor->___callPlugins('dispatch', array(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#), NULL) called at [generated/code/Magento/Catalog/Controller/Adminhtml/Category/Edit/Interceptor.php:39]
#48 Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor->dispatch(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#) called at [vendor/magento/framework/App/FrontController.php:159]
#49 Magento\Framework\App\FrontController->processRequest(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#, &Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor#000000001086af35000000002644233d#) called at [vendor/magento/framework/App/FrontController.php:98]
#50 Magento\Framework\App\FrontController->dispatch(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#) called at [vendor/magento/framework/Interception/Interceptor.php:58]
#51 Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', array(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#)) called at [vendor/magento/framework/Interception/Interceptor.php:138]
#52 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#) called at [vendor/magento/framework/Interception/Interceptor.php:153]
#53 Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', array(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#), array(array('default_store_se...', 'page_cache_from_...', 'storeCookieValid...', 'install', 'configHash'))) called at [generated/code/Magento/Framework/App/FrontController/Interceptor.php:26]
#54 Magento\Framework\App\FrontController\Interceptor->dispatch(&Magento\Framework\App\Request\Http#000000001086aa52000000002644233d#) called at [vendor/magento/framework/App/Http.php:116]
#55 Magento\Framework\App\Http->launch() called at [vendor/magento/framework/App/Bootstrap.php:261]
#56 Magento\Framework\App\Bootstrap->run(&Magento\Framework\App\Http#000000001086aa20000000002644233d#) called at [pub/index.php:40]

I have removed modules and have third party extensions however compilation runs fine and not much other than smile elastic suite seems to be getting involved here.

UPDATE

So that theme creation seems to be running 10 times over, first time correctly then every time after incorrectly. Commenting out the throw Exception loads the page seemingly fine. The second time and each run after it runs is where the problem starts and seemingly this shouldn't be running from backend with Area::AREA_FRONTEND:

Magento\Catalog\Model\Category\Attribute\LayoutUpdateManager

                'theme' => $this->themeFactory->create(
                    $this->design->getConfigurationDesignTheme(Area::AREA_FRONTEND)

I have removed the smile plugin and issue still occurs with only Magento core showing in the trace. Disabling an extremely simple admin theme that just adds a logo however seems to fix it.

Another workaround that seems to work for me is adding a frontend theme within the adminhtml di.xml for initialising the admin theme:

Vendor/ModuleAdminTheme/etc/edminhtml/di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<!-- Admin theme. Start -->
<type name="Magento\Theme\Model\View\Design">
    <arguments>
         <argument name="themes" xsi:type="array">
             <item name="adminhtml" xsi:type="string">Buzz/BuzzLumaAdmin</item> <!-- Example: "Magento/backend" -->
             <item name="frontend" xsi:type="string">Buzz/BuzzLuma</item> <!-- Example: "Magento/backend" -->
         </argument>
     </arguments> 
</type>
<!-- Admin theme. End -->
</config>

Therefore allowing atleast a theme to be found in this case where that LayoutUpdateManager looks for a frontend theme whilst in the backend. I'm guessing this if (!$this->layoutProcessor) should fail return false and therefore not create a theme but in case of a custom theme no layoutProcessor is found for some reason.

I am interested to see if a vanilla instance with a basic custom theme as per https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/themes/admin_theme_apply.html even works anymore and weather to submit as a bug however have little time at present.

2
  • which key return in log? Commented Jan 30, 2020 at 8:49
  • Its just empty: [2020-01-30 09:01:38] main.ERROR: Unable to load theme by specified key: '' [] []
    – harri
    Commented Jan 30, 2020 at 8:51

3 Answers 3

4

you add wrong path for di.xml

Before

Vendor/ModuleAdminTheme/etc/edminhtml/di.xml

After

Vendor/ModuleAdminTheme/etc/di.xml
4
  • Ah will give this a go, that is how the dev docs specify however: You need to specify the admin theme to be used in the <your_module_dir>/etc/adminhtml/di.xml file. Add it, if the file does not yet exist in your module.
    – harri
    Commented Jan 31, 2020 at 12:10
  • i think it'will work with your case. Give it a try
    – mrtuvn
    Commented Jan 31, 2020 at 12:22
  • github.com/magento/magento2/blob/2.4-develop/app/code/Magento/… See this as reference
    – mrtuvn
    Commented Jan 31, 2020 at 12:24
  • Yeah sure that worked too, still confused as to if that should be the case as worked previously and devdocs sais to put it elsewhere. Either way thanks seems similar to my workaround but opposite way around.
    – harri
    Commented Jan 31, 2020 at 16:37
4

I had the exact same issue yesterday with a custom frontend theme after updating from 2.3.1 to 2.3.4. I fixed the issue by changing the settings in Content/Design/Configuration. I only had the last line "Default Store View" pointing the custom theme. The first lines "Global" and "Main Website" were blank, with no theme selected. Assigning themes to the 3 options fixed the issue.

Content/Design/Configuration Magento Backend

2
  • Working for me.
    – Rik Patel
    Commented Mar 25, 2020 at 6:50
  • Weird. Did the trick for me after setting up my di.xml the same way OP did originally.
    – addMitt
    Commented Jul 31, 2020 at 20:36
3

I had the same issue when upgrading from 2.3.3 to 2.3.4. Moving my custom admin theme from:

app/code/VENDOR/MODULE/etc/adminhtml/di.xml

to:

app/code/VENDOR/MODULE/etc/di.xml 

resolved the issue.

Here are the relevant lines in the dev docs that say to use the adminhtml. https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/themes/admin_theme_apply.html#specify_di

This seems like a bug was introduced. DI for the admin should be able to get the theme from the admin specific di.xml file. I will submit an issue to github: https://github.com/magento/magento2/issues/26718

1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.