jangolle/slim-symfony-container

简单地将SlimPHP容器集成到Symfony依赖注入容器中

v1.0.1 2018-02-12 08:56 UTC

This package is auto-updated.

Last update: 2024-09-23 04:35:55 UTC


README

Build Status codecov PHP from Packagist Packagist

Slim与Symfony DI容器集成

轻松解决Symfony ContainerBuilder并在其中设置所有默认Slim应用程序依赖项(如有必要)。Loader解析symfony配置参数,并使用参数设置Slim默认设置到symfony ParameterBag

安装

该库可在Packagist上获取。

通过composer安装是推荐的安装方式。

只需将此行添加到您的composer.json文件中的required部分

"jangolle/slim-symfony-container": "~1.0"

或者只需在控制台中运行

cd /path/to/your/project
composer require jangolle/slim-symfony-container

默认用法

您可以直接创建ContainerBuilder并使用它从头开始设置,如下所示使用SlimDefaultServicesInjection

<?php
declare(strict_types=1);

use JanGolle\SlimSymfonyContainer\ContainerManager;
use JanGolle\SlimSymfonyContainer\Loader\SlimDefaultServicesInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;

$containerManager = new ContainerManager();
$container = new ContainerBuilder();

$container = $containerManager->resolveContainer($container, new SlimDefaultServicesInjection());

$app = new \Slim\App($container);

//setup routes or something

$app->run();

使用Symfony配置

如果您想在项目中使用symfony配置文件,实际上可以这样做

<?php
declare(strict_types=1);

use JanGolle\SlimSymfonyContainer\ContainerManager;
use JanGolle\SlimSymfonyContainer\Loader\SlimDefaultServicesInjection;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;

$containerManager = new ContainerManager();
$container = new ContainerBuilder();
$loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/path/to/config'));
$loader->load('services.yaml');

$container = $containerManager->resolveContainer($container, new SlimDefaultServicesInjection());

$app = new \Slim\App($container);

//setup routes or something

$app->run();

您的services.yaml参数块可能如下所示

parameters:
  slim.settings.httpVersion: '1.1'
  slim.settings.responseChunkSize: 4096
  slim.settings.displayErrorDetails: !php/const DEBUG

注意:您可以在配置文件中使用自定义值覆盖默认SLIM设置,或者不覆盖,这取决于您。所有SLIM必要设置都将根据您的参数应用或未应用进行容器注入。

自定义包装类

如果您有自己的容器,它是Symfony\Component\DependencyInjection\ContainerBuilder的实例,并且您想使用Slim依赖项设置它,可以这样做

$container = new YourCustomContainer($fullOfParams);//instance of Symfony\Component\DependencyInjection\ContainerBuilder
$container = $containerManager->resolveContainer($container, new SlimDefaultServicesInjection());

或者您可以直接通过::class作为resolveContainer的第一个参数使用默认构造函数实例化它

$container = $containerManager->resolveContainer(YourCustomContainer::class, new SlimDefaultServicesInjection());

在应用中访问容器

在您的路由作用域内,$this将返回我们的容器,实际上它是Symfony\Component\DependencyInjection\ContainerBuilder的实例

//...
$app->get(
    '/your/route',
    function (Request $request, Response $response, array $args) {
        $this->get('someService')->doSomeStuff();

        return $response;
    }
);

PhpStorm Symfony插件支持

如果您正在使用PhpStorm IDE,您可以在其中安装Symfony插件并访问服务的类型提示和IDE自动补全。

感谢您的关注!