ndanprac/buzz-bundle

Symfony 扩展包,用于使用轻量级的 Buzz HTTP 客户端。

安装: 38

依赖: 0

建议者: 0

安全性: 0

星级: 0

关注者: 0

分支: 5

类型:symfony-bundle

1.3 2020-03-04 11:28 UTC

This package is auto-updated.

Last update: 2024-09-04 21:18:34 UTC


README

Latest stable Downloads total GitHub issues

Symfony 扩展包,用于使用轻量级的 Buzz HTTP 客户端。

安装

将扩展包添加到您的 composer.json 文件中

{
    "require": {
        "gremo/buzz-bundle": "~1.0"
    }
}

然后运行 composer update 并在 app/appKernel.php 中注册扩展包到您的内核

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Gremo\BuzzBundle\GremoBuzzBundle(),
        // ...
    );
}

旧版 Symfony (2.0.*')

将以下内容添加到您的 deps 文件中

[buzz]
    git=https://github.com/kriswallsmith/Buzz.git

[GremoBuzzBundle]
    git=https://github.com/gremo/GremoBuzzBundle.git
    target=bundles/Gremo/BuzzBundle

然后运行 php bin/vendors update 并使用自动加载器(app/autoload.php)注册命名空间

<?php
// app/autoload.php

$loader->registerNamespaces(array(
    // ...
    'Buzz'  => __DIR__.'/../vendor/buzz/lib',
    'Gremo' => __DIR__.'/../vendor/bundles',
    // ...
));

最后在 app/appKernel.php 中注册扩展包到您的内核

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Gremo\BuzzBundle\GremoBuzzBundle(),
        // ...
    );
}

配置

不需要配置。可用的选项和类型(默认值请参见Buzz\Client\AbstractClient

# GremoBuzzBundle Configuration
gremo_buzz:
    client: "native" # allowed "curl", "multi_curl" or "native"
    options:
        ignore_errors: ~ # boolean
        max_redirects: ~ # integer
        proxy:         ~ # string
        timeout:       ~ # integer
        verify_host:   ~ # integer
        verify_peer:   ~ # boolean

使用方法

从服务容器中获取 gremo_buzz 服务

/** @var $browser \Buzz\Browser */
$browser = $this->get('gremo_buzz');

有关发送 HTTP 请求的详细信息,请参考Kris Wallsmith Buzz 库

依赖注入标签

您可以通过创建一个实现 Buzz\Listener\ListenerInterface 的服务并标记为 gremo_buzz.listener(可选地定义一个 priority 属性)来注册一个监听器。更高的优先级意味着相应的监听器会先执行。

示例监听器:记录发出的请求

<?php

use Buzz\Listener\ListenerInterface;
use Buzz\Message\MessageInterface;
use Buzz\Message\RequestInterface;
use JMS\DiExtraBundle\Annotation as DI;
use Psr\Log\LoggerInterface;

/**
 * @DI\Service("buzz.listener.logger")
 * @DI\Tag("gremo_buzz.listener", attributes={"priority"=10})
 */
class BuzzLoggerListener implements ListenerInterface
{
    /**
     * @var \Psr\Log\LoggerInterface
     */
    private $logger;

    /**
     * @var float
     */
    private $startTime;

    /**
     * @DI\InjectParams({"logger" = @DI\Inject("logger")})
     */
    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    /**
     * {@inheritdoc}
     */
    public function preSend(RequestInterface $request)
    {
        $this->startTime = microtime(true);
    }

    /**
     * {@inheritdoc}
     */
    public function postSend(RequestInterface $request, MessageInterface $response)
    {
        $this->logger->info(sprintf(
            'Sent "%s %s%s" in %dms',
            $request->getMethod(),
            $request->getHost(),
            $request->getResource(),
            round((microtime(true) - $this->startTime) * 1000)
        ));
    }
}

请注意,此示例使用新的 Psr\Log\LoggerInterface,可能不适用于旧版本的 Symfony。