(Symfony 4) 如何手动添加供应商 class 到容器,然后注入到 repository/service class?
(Symfony 4) How do you manually add a vendor class to the container, then inject to a repository/service class?
我有一个照片存储库 class:
use Imagine\Image\ImageInterface;
use Imagine\Image\ImagineInterface;
use Imagine\Image\BoxInterface;
class PhotoRepository extends ServiceEntityRepository
{
protected $imagineInterface;
protected $mode;
protected $box;
public function __construct(ImagineInterface $imagineInterface,
BoxInterface $box,
$mode = ImageInterface::THUMBNAIL_OUTBOUND)
{
$this->imagineInterface = $imagineInterface;
$this->$box = $box;
$this->mode = $mode;
}
我得到的是典型的 Cannot autowire service "App\Repository\PhotoRepository": argument "$box" of method "__construct()" references interface "Imagine\Image\BoxInterface" but no such service exists. Did you create a class that implements this interface?
Imagine\ImageBox class 显然存在于我的 vendor 文件夹中并实现了 BoxInterface,它开始如下:
namespace Imagine\Image;
use Imagine\Exception\InvalidArgumentException;
/**
* A box implementation
*/
final class Box implements BoxInterface
{
/**
* @var integer
*/
private $width;
这是我的文件夹结构的图片,你可以看到这个 Box class 在那里并且它实现了 BoxInterface:
我卡住了,因为它说该服务不存在,但您可以看到它存在。
非常感谢任何帮助。
要回答有关使用接口的问题,请查看文档的这一部分:https://symfony.com/doc/current/service_container/autowiring.html#working-with-interfaces
但是您误解了服务的目的。 Imagine 的 BoxInterface 绝不是一项服务,不应将其声明为一个服务。当您在整个应用程序中只需要一个服务实例时,仅 需要一项服务。
BoxInterface只是描述了图片的一个坐标,所以你需要多少实例就有多少实例。
当您需要一个盒子时,例如 $box = new Imagine\Image\Box(50, 50);
创建即可。
我有一个照片存储库 class:
use Imagine\Image\ImageInterface;
use Imagine\Image\ImagineInterface;
use Imagine\Image\BoxInterface;
class PhotoRepository extends ServiceEntityRepository
{
protected $imagineInterface;
protected $mode;
protected $box;
public function __construct(ImagineInterface $imagineInterface,
BoxInterface $box,
$mode = ImageInterface::THUMBNAIL_OUTBOUND)
{
$this->imagineInterface = $imagineInterface;
$this->$box = $box;
$this->mode = $mode;
}
我得到的是典型的 Cannot autowire service "App\Repository\PhotoRepository": argument "$box" of method "__construct()" references interface "Imagine\Image\BoxInterface" but no such service exists. Did you create a class that implements this interface?
Imagine\ImageBox class 显然存在于我的 vendor 文件夹中并实现了 BoxInterface,它开始如下:
namespace Imagine\Image;
use Imagine\Exception\InvalidArgumentException;
/**
* A box implementation
*/
final class Box implements BoxInterface
{
/**
* @var integer
*/
private $width;
这是我的文件夹结构的图片,你可以看到这个 Box class 在那里并且它实现了 BoxInterface:
我卡住了,因为它说该服务不存在,但您可以看到它存在。
非常感谢任何帮助。
要回答有关使用接口的问题,请查看文档的这一部分:https://symfony.com/doc/current/service_container/autowiring.html#working-with-interfaces
但是您误解了服务的目的。 Imagine 的 BoxInterface 绝不是一项服务,不应将其声明为一个服务。当您在整个应用程序中只需要一个服务实例时,仅 需要一项服务。 BoxInterface只是描述了图片的一个坐标,所以你需要多少实例就有多少实例。
当您需要一个盒子时,例如 $box = new Imagine\Image\Box(50, 50);
创建即可。