找不到自定义 ViewModel
Custom ViewModel is not found
每当我尝试使用自己的自定义 ViewModel 时,模块就会停止工作。错误:main.CRITICAL: Class Lith\Contacts\ViewModel\AdditionalInfo does not exist [] []
文件结构简单:
- code
- Lith
- Contacts
- etc
- view
- frontend
- layout
- templates
- web
- ViewModel
我在 view\frontend\layout
中创建了一个文件 contact_index_index.xml
,我在 referenceContainer
中定义了一个带有静态消息的新 block
- 工作正常。但是,当我添加一个参数以传入 ViewModel 时,它会停止使用我的自定义 ViewModel 工作(静态消息不会出现)。如果我传递现有的 Magento ViewModel,注意工作正常。
参数:
<arguments>
<argument name="view_model" xsi:type="object">Lith\Contacts\ViewModel\AdditionalInfo</argument>
</arguments>
ViewModel class 在 ViewModel
文件夹中创建并称为 AdditionalInfo.php
。它的代码:
<?php
namespace Lith\Contacts\ViewModel;
use Magento\Framework\View\Element\Block\ArgumentInterface;
class AdditionalInfo implements ArgumentInterface
{
public function getMessage(): string
{
return 'Addition info text test - from a ViewModel';
}
}
模板本身不使用 ViewModel - 它只是一个带有字符串文本的静态 div
,因此它并不重要。
加载网站时这一切都不起作用。它没有找到 ViewModel。
但每当我将 argument
从上面的更改为:
<arguments>
<argument
name="view_model"
xsi:type="object"
>Magento\Contact\ViewModel\UserDataProvider</argument>
</arguments>
然后它工作正常。
如果我删除 <argument name="view_model" xsi:type="object">Lith\Contacts\ViewModel\AdditionalInfo</argument>
,因为现在不使用模板中的 ViewModel,它在呈现文本时也能正常工作。
为什么找不到我的自定义 ViewModel?我做错了什么?
编辑:如果需要任何其他信息,这里是文件的 public 存储库 https://bitbucket.org/Edvbar/magento2/src/master/
您在 Bitbucket 上的 Lith_Contacts 模块已添加到文件夹 app/design/code/Lith/Contacts
。但是这个不应该放在design文件夹里。
请将模块移动到app/code/Lith/Contacts
。然后 运行 php bin/magento setup:upgrade
从命令行启用模块。
每当我尝试使用自己的自定义 ViewModel 时,模块就会停止工作。错误:main.CRITICAL: Class Lith\Contacts\ViewModel\AdditionalInfo does not exist [] []
文件结构简单:
- code
- Lith
- Contacts
- etc
- view
- frontend
- layout
- templates
- web
- ViewModel
我在 view\frontend\layout
中创建了一个文件 contact_index_index.xml
,我在 referenceContainer
中定义了一个带有静态消息的新 block
- 工作正常。但是,当我添加一个参数以传入 ViewModel 时,它会停止使用我的自定义 ViewModel 工作(静态消息不会出现)。如果我传递现有的 Magento ViewModel,注意工作正常。
参数:
<arguments>
<argument name="view_model" xsi:type="object">Lith\Contacts\ViewModel\AdditionalInfo</argument>
</arguments>
ViewModel class 在 ViewModel
文件夹中创建并称为 AdditionalInfo.php
。它的代码:
<?php
namespace Lith\Contacts\ViewModel;
use Magento\Framework\View\Element\Block\ArgumentInterface;
class AdditionalInfo implements ArgumentInterface
{
public function getMessage(): string
{
return 'Addition info text test - from a ViewModel';
}
}
模板本身不使用 ViewModel - 它只是一个带有字符串文本的静态 div
,因此它并不重要。
加载网站时这一切都不起作用。它没有找到 ViewModel。
但每当我将 argument
从上面的更改为:
<arguments>
<argument
name="view_model"
xsi:type="object"
>Magento\Contact\ViewModel\UserDataProvider</argument>
</arguments>
然后它工作正常。
如果我删除 <argument name="view_model" xsi:type="object">Lith\Contacts\ViewModel\AdditionalInfo</argument>
,因为现在不使用模板中的 ViewModel,它在呈现文本时也能正常工作。
为什么找不到我的自定义 ViewModel?我做错了什么?
编辑:如果需要任何其他信息,这里是文件的 public 存储库 https://bitbucket.org/Edvbar/magento2/src/master/
您在 Bitbucket 上的 Lith_Contacts 模块已添加到文件夹 app/design/code/Lith/Contacts
。但是这个不应该放在design文件夹里。
请将模块移动到app/code/Lith/Contacts
。然后 运行 php bin/magento setup:upgrade
从命令行启用模块。