Symfony Ak和xE9;né;o服务pim#U catalog.saver.product是私有的,可以';不要在我的包中使用';s控制器
根据文档,我应该能够调用Symfony Ak和xE9;né;o服务pim#U catalog.saver.product是私有的,可以';不要在我的包中使用';s控制器,symfony,symfony4,akeneo,Symfony,Symfony4,Akeneo,根据文档,我应该能够调用$saver=$this->get('pim_catalog.saver.product')在我的捆绑包的控制器中,如下所示: <?php namespace XXX\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Response; class ExportController extends C
$saver=$this->get('pim_catalog.saver.product')代码>在我的捆绑包的控制器中,如下所示:
<?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>'
);
}
}
然而,它仍然不起作用
根据symfony4的文档,我可能应该创建一个扩展类。它应该和Akénéo的名字相同,但我找不到后者
我该怎么办?错误消息中有一些提示
“pim_catalog.saver.product”服务或别名已被删除或删除
在编译容器时内联。你要么成功
public,或停止直接使用容器并使用依赖项
改为注射
作为最佳实践,我不鼓励将其公开,因为您不是服务提供商,并且有更好更简单的方法来解决您的问题。因此,我的拙见是,剩下的第二个选择就是走这条路
我不知道Akeneo的具体情况,但我知道Symfony和依赖注入。因此,我建议在控制器方法中使用参数typehint
1。检查要用于服务的自动布线类/接口“pim_catalog.saver.product”
console debug:autowiring
列出所有已定义的自动布线,并查找提及“pim_catalog.saver.product”的自动布线
console debug:autowiring
或者只需检查名称中带有akeneo的所有自动连接类/接口(很可能)
2。更新控制器代码以添加类型提示参数
下面几行
谢谢!但是,第一步没有显示任何结果,这让我觉得没有任何可使用的自动布线类/接口。那么您确定SaverInterface
将在控制器中工作吗?我尝试了它,得到了异常“控制器要求您为“$saver”参数提供一个值。”因此消息“控制器要求您为“$saver”参数提供一个值。”只是表示您没有为控制器参数激活自动连线。为此,您需要使用标记“controller.service\u arguments”标记控制器。您甚至可以使用(yaml)config:Namespace\of\You\Controller\:resource:'sub/path/to/Controller/dir'public:true标记['Controller.service\u arguments']全局激活文件夹中所有控制器的标记controller.service\u参数
不是Symfony 4 nope?^^^再次感谢:)编辑:现在我有了这个错误,让我认为这个接口实际上不存在:“它引用了接口“Akeneo\Tool\Component\StorageUtils\Saver\SaverInterface”,但不存在这样的服务。您可能应该将此接口别名为这些现有服务之一:因此我认为没有任何“pim_catalog.saver.produc”自动连接接口/类:-(
console debug:autowiring akeneo