prestashop/module-lib-service-container

用于 prestashop 模块的服务容器

v2.0 2022-06-20 08:30 UTC

README

此仓库包含来自 Symfony 的服务容器,您可以在 PrestaShop 模块中使用它。

先决条件

您应该只在 PrestaShop 环境和 PHP 5.6.0 或更高版本下安装此库。

安装

# PrestaShop 1.7+
composer require prestashop/module-lib-service-container

# PrestaShop 1.6
composer require prestashop/module-lib-service-container
composer require symfony/config:^3.4 symfony/dependency-injection:^3.4 symfony/expression-language:^3.4 symfony/yaml:^3.4

当此项目成功添加到您的依赖项中时,您可以将新的 ServiceContainer 添加到您的模块中并使用它。PrestaShop 从版本 1.7 开始运行 Symphony 组件,因此不再需要依赖项。如果您计划在 PrestaShop 上运行您的模块,必须单独要求 Symfony 依赖项。

使用方法

要使用此库,非常简单

  • 首先,在您的根模块 PHP 文件(例如在根项目文件夹中的 mymodule.php)中声明您的新服务容器
    /**
     * @var ServiceContainer
     */
    private $serviceContainer;
  • 并在构造函数中用模块名称及其本地路径实例化它
$this->serviceContainer = new ServiceContainer($this->name, $this->getLocalPath());
  • 您可以在根模块 PHP 文件中添加一个新函数,例如 getService,以在新的服务容器中检索您的服务名称
    /**
     * @param string $serviceName
     *
     * @return mixed
     */
    public function getService($serviceName)
    {
        return $this->serviceContainer->getService($serviceName);
    }
  • 然后,您必须在 services.yml 文件中声明您的服务。您必须在 config/ 文件夹中声明您的服务。从 Symfony 4 开始,服务必须明确声明为公开,以便使用 getService() 方法加载;

我们在 config 中将服务分成两个文件夹:/front 和 /admin 文件夹。因此,结构应该是这样的

/mymodule
    /config
        /front
            services.yml
        /admin
            services.yml
        common.yml
  • 当然,您可以通过 services.yml 文件中的导入来包含一个包含在 front 和 admin 项目中使用的常见服务的公共文件
imports:
  - { resource: ../common.yml }

现在,您可以像在 Symfony 项目中一样在 services.yml 中添加您的服务;)