错误消息是什么:
未传递必需的参数“ theme_dir”
与Magento 2有关吗?以及如何解决这个问题?
错误消息是什么:
未传递必需的参数“ theme_dir”
与Magento 2有关吗?以及如何解决这个问题?
Answers:
万一您直接删除主题(以Magento方式),以防万一。
然后按照下列步骤。
从中删除内容app/design/frontend/<Vendor>
(确保先备份)。
删除文件夹var/view_preprocessed
&的所有内容pub/static/frontend
。
转到theme
表并删除您创建的主题的条目。
之后...
转到core_config_data
表并搜索theme
,您将获得路径记录,例如design/theme/theme_id
替换其中的默认主题ID。
刷新缓存 php bin/magento cache:flush
此后,如果您仍然遇到任何问题,请告诉我。
theme
-table,但是忘记了该core_config_data
值。
setup:static-content:deploy
admin之后返回到UI。
pub/static/.htaccess
不在那儿。谢谢
此错误消息表示您配置了一个主题,该主题在文件系统上不存在(不再存在)。
可以通过选择有效的主题来轻松修复它。转到内容->配置,选择范围(全局,网站,store_view)并更改主题。完成之后,还应该将其从Content-> Themes中删除。
确保theme
表条目和magento\app\design\frontend\<Vendor>
条目将相同。
如果不是,则会导致此问题。
通过Admin-> Content-> Design-> Themes删除不必要的主题。删除它。因此,它也会删除数据库条目。
如果您仅删除文件夹,则将无法使用
当您处于仿真状态(例如,在CLI命令中)时,也会发生此问题。我遇到无法在CLI中发送电子邮件的情况,因为包装命令以仿真状态运行:
$this->appState->emulateAreaCode(AppArea::AREA_GLOBAL, function() {
// In this section the email was sent
});
在上面的示例中,当电子邮件尝试确定其模板目录时,它将映射到global/Magento/backend
不存在的。要解决此问题,我必须在构造函数中手动添加它:
/** @var \Magento\Framework\Component\ComponentRegistrarInterface $componentRegistrar */
// Make the admin theme global accessible for sending e-mails:
\Magento\Framework\Component\ComponentRegistrar::register(
'theme',
'global/Magento/backend',
$componentRegistrar->getPath('theme', 'adminhtml/Magento/backend')
);
修复此问题后,问题已解决,我可以发送电子邮件。
更新:
使用CLI发送邮件时,更合适的方法是使用仿真。例如:
/** @var Magento\Framework\App\State $state */
$state->emulateAreaCode(
'frontend',
[$this->accountManagement, 'initiatePasswordReset'],
[
$customer->getEmail(),
AccountManagement::EMAIL_REMINDER,
$customer->getWebsiteId()
]
);
这样,您就不必再面对肮脏的小技巧了。
@hakre是正确的。我有同样的错误Required parameter 'theme_dir' was not passed
。下面我解释了导致错误的原因:
我在app / design / frontend / MyVendorTheme2 / myThemeName2目录中创建一个主题,然后通过在Magento 2管理浏览器中选择主题“ MyVendorTheme2-myThemeName2 ”进行配置(商店>配置>主题设置>常规>设计>设计主题) 。但是,然后我决定将“ myThemeName2 ”目录(包含我的新主题)移动到其他(现有)供应商文件夹“ MyVendorTheme1 ” 应用程序/ design / frontend / MyVendorTheme1 / myThemeName2下,并将其从“ MyVendorTheme2 ”文件夹中删除以前。我开始编译资产(即grunt clean
,grunt exec:myThemeName2
,grunt less:myThemeName2
),然后在主题子域(即http:// myvirtualhostdomain:myport / myvendortheme1_mythemename2_magento2_quickstart /)中打开浏览器。
最初我遇到了一个未指定的错误:
There has been an error processing your request
Exception printing is disabled by default for security reasons.
Error log record number:
我通过重命名pub/errors/local.xml.sample
为来启用错误报告local.xml
,并刷新了页面。然后出现错误Required parameter 'theme_dir' was not passed
。
我通过返回到Magento 2管理员浏览器(商店>配置>主题设置>一般>设计>设计主题)解决了该错误,该浏览器选择了我以前的并且现在无效的设计主题,因此我选择了正确的设计主题。
1-使用以下命令在管理面板中标识主题。
n98-magerun2 dev:theme:list
2-运行命令以标识已安装的主题:
ls -lha app/design/frontend/MyThemePackage/
3-在下面运行以下命令以创建不存在的主题:
n98-magerun2 deploy:mode:set developer
n98-magerun2 dev:console
make:theme frontend MyThemePackage MyThemeName
您可以通过执行以下查询,直接从数据库中删除未使用的主题:
delete from theme where theme_path in ('unusedtheme');
当未使用的主题是未使用的主题时,您将缓存缓存之后
在某些情况下,您将以不正确的方式删除自定义主题,那么您还将遇到此错误。在这种情况下:
1) you have to delete that entry/row from 'theme' table.
2) set value 1 (1 for blank theme 2 for Luma what ever you want to set) against 'design/theme/theme_id'
刷新页面错误消失了。
我解决了这个问题。就我而言,问题不是Magento2,而是我之前做的一个错误操作,如下所示:我创建了一个主题,在app / design / frontend / MyFolder / MyTheme中创建了相对路径,并按照Magento 2联机文档中的说明进行了注册。然后,我决定取消主题,而是使用适当的命令:bin / magento theme:uninstall frontend / MyFolder / MyTheme我直接删除了文件夹。这不是一个好的操作,因为数据库未使用适当的信息进行更新。解决方案:使用名为phpmyadmin的数据库编辑器,删除表“ Theme”中与已删除文件夹相对应的记录。我希望这个能帮上忙!
我知道这个问题已经很老了,但是自从我今天遇到这个问题并迅速发现我的问题后,我决定发布我的答案,以提醒所有像我一样使用PhpStorm与Magento一起工作的人:切记在切换分支时签出文件。
就我而言,我正在处理的分支没有所需的主题文件(当我从主题分支更改为master分支时,它们被PhpStorm藏匿了),因为它们尚未被合并,因此错误。
希望这可以帮助某人。