根据文件,,https://docs.akeneo.com/4.0/manipulate_pim_data/product/save.html,我应该能够调用$saver=$this-
<?php
namespace XXX\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class ExportController extends Controller
{
public function exportProduct($id): Response
{
$saver = $this->get('pim_catalog.saver.product');
$saver->save($id);
return new Response(
'<html><body>foo</body></html>'
);
}
}
但是我得到这个错误:
[2020-11-05 13:44:58]request.CRITICAL:未捕获的PHP异常Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException:“pim_catalog.saver.product”“在编译容器时,服务或别名已被删除或内联。您应该将其公开,或者停止直接使用容器,改用依赖注入。“at/var/www/html/pim/vendor/symfony/dependency injection/container.php第275行{“exception”:“[object](symfony\Component\dependency injection\exception\ServiceNotFoundException(代码:0):“pim\u catalog.saver.product”在编译容器时,服务或别名已被删除或内联。您应该将其公开,或者停止直接使用容器,改用依赖项注入。at/var/www/html/pim/vendor/symfony/dependency injection/container.php:275)“}[]
所以我想通过添加一个
服务来覆盖这个服务的声明。YML
文件到我的bundle的配置目录(mybundle/Resources/config/service.YML
):
services:
pim_catalog.saver.product:
public: true
priority: 999
然而,它仍然不起作用。
根据symfony4的文档,我可能应该创建一个扩展类。它应该和Akénéo的名字相同,但我找不到后者。
我该怎么办?
您在错误消息中有一些提示。
编译容器时,“pim_catalog.saver.product”服务或别名已被删除或内联。您应该将其公开,或者停止直接使用容器,改用依赖项注入
作为最佳实践,我不鼓励将其公开,因为您不是服务提供商,并且有更好更简单的方法来解决您的问题。因此,我的拙见是,剩下的第二个选择就是走这条路。
我不知道Akeneo的具体情况,但我知道Symfony和依赖注入。因此,我建议在控制器方法中使用参数typehint。
1.检查要用于服务“pim_catalog.saver.product”的自动布线类/接口
列出所有已定义的自动布线,并查找提及“pim_catalog.saver.product”的自动布线
console debug:autowiring
或者只是检查名称中带有akeneo的所有自动生成的类/接口(这很可能)
console debug:autowiring akeneo
2.更新控制器代码以添加类型提示参数
如下所示的某物
<?php
namespace XXX\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
// I just picked that interface after looking it up in Akeneo documentation
// But there is another one that can be used if you want to save multiple
// products, so beware.
use Akeneo\Tool\Component\StorageUtils\Saver\SaverInterface;
class ExportController extends Controller
{
public function exportProduct($id, SaverInterface $saver): Response
{
$saver->save($id);
return new Response(
'<html><body>foo</body></html>'
);
}
}
这里记录了该过程https://symfony.com/doc/4.4/controller.html#fetching-services
3.(希望)享受工作代码!
;-)
我正在将我的spring-java项目转移到OSGi。 我有一些依赖项,这些依赖项在spring ebr repo或maven repo中不能作为包提供。处理它们的最佳方法是什么? null
我编写了一个定制的NiFi处理器,它使用一些Hadoop类,处理流文件,并在Avro之间序列化流文件。 处理器的pom.xml文件如下所示: 因为我已经将标记为,所以它不会绑定在生成的NAR文件中。现在,我可以做一个快速修复,完全删除作用域并创建NAR,但NiFi会抱怨next class not found错误。 我想知道:
服务 控制器
问题内容: 我正在使用socket.io在我的应用中启用聊天功能,并且正在使用一项服务来执行所有套接字操作。当出现消息时,我想从服务中触发控制器的功能以在UI中进行一些更改。所以我想知道如何从服务访问控制器的功能。样例代码: 这是服务的示例代码。 现在控制器的代码 问题答案: 您可以通过使用角度事件或来实现此目的。 在您的情况下会有所帮助,您需要广播事件,以便具有相同事件名称的所有子作用域都可以监
我有与SQLite数据库工作的应用程序。我把它打包成一个包,我可以看到服务组合上的服务。当我发送请求到发布或获取服务我收到这个错误: JAVAlang.ClassNotFoundException:org。sqlite。未找到JDBC 我在servicemix上安装了SQLite JDBC驱动程序,但仍然出错。 这是我的POM: 我试图把这个组织。旱生。sqlite jdbc仅作为导出包和导入包,
我将symfony 3迁移到symfony 4.3,并且我的自定义包移动到:src/Bundles/FooBundle。 structure FooBundle:-依赖注入-配置。php-FooExtension。php-Event-Model-Resources-config-services。yml-Service-Twig-Exception-FooBundle。php 和文件bundle/