Magento2:自定义模块开发和DI


Magento2: Custom module development and DI

我开始在Magento2中实现新模块,从那时起,我的问题多于答案。

我成功地创建了自己的模块,它似乎正在工作,但不是真的。我正在使用自己的控制器,并希望使用一些外部(非本地)JS/CSS 文件实现自己的布局。

我首先坚持的是向页面添加一些外部 JS/CSS。事情并没有我想象的那么容易。我读过很多关于如何做到这一点的文章,但没有一篇对我有用。我不想更改任何主题,我只想使用我的自定义页面(可能根本没有主题)。

此外,我在模块app/code/MyModule/Product/Controller/Api/Index.php中创建了另一个操作(HelloWorld示例相同),该操作扩展了正确的类等,但同样 - 不起作用。我收到的是下一个错误:

可恢复的错误:传递给 ...''Api''AbstractApiAction::__construct() 的参数 1 必须是 Magento''Framework''App''Action''Context 的实例,给定的 Magento''Framework''ObjectManager''ObjectManager 的实例,在第 97 行 vendor/magento/framework/ObjectManager/Factory/AbstractFactory 中调用.php并在 app/code/.../Api/AbstractApiAction 中定义.php在第 24 行

当我发现除非我使用 bin/magento setup:di:compile 重新编译我的 DI 容器,否则它将无法工作时,我感到惊讶。我认为不值得说这个过程需要一点时间。当我创造新的行动时,我应该去做setup:di:compile,以便能够进一步发展。

我在管理区域完全禁用了缓存。


现在我想澄清几个问题:

  1. 如何将外部 JS/CSS 文件添加到我的自定义页面(自定义控制器)。
  2. 有没有办法在不不断重新编译 DI 容器的情况下开发 smth?还是我错过了。
  3. 根据上面的问题,Magento2中真正Developer mode是什么意思,我记得它禁用缓存等,但是代码库不是自动重新生成的,还是我缺少smth。

至于 di 编译,在开发人员模式下不需要运行此命令。如果有var/di目录magento将从中读取配置,但您可以安全地删除它,它将正常工作,只是速度稍慢,因为所有di首选项都需要从文件中读取。您看到的错误是由于 magento 生成拦截器类以允许使用插件。这些类是在 var/generation 中创建的,包含自动加载器的 di 构造函数信息。当您更改在上一个请求中生成的类的构造函数时,它将中断。如果您将来看到此类错误,只需删除 var/cache、var/generation 和 var/di(如果存在)并刷新页面。