devhelp/piwik-silex-provider

将devhelp/piwik-api集成到Silex中。允许创建用于piwik api方法的服务

0.1 2015-12-15 20:09 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:26:09 UTC


README

Build Status Scrutinizer Code Quality

安装

有关更多信息,请访问composer网站

$ composer require 'devhelp/piwik-silex-provider:dev-master'

沙箱

示例代码可以在devhelp/piwik-silex-provider-sandbox找到。

用途

Piwik API集成到Silex中。向依赖注入容器添加服务,以便使用Piwik API方法作为服务。它使用devhelp/piwik-api库 - 查阅其文档以获取更高级的用法。

用法

注册提供者

$app = new Silex\Application();

$app->register(new Devhelp\Silex\Piwik\PiwikApiServiceProvider(array(
    'client' => 'my_piwik.client',
    'api' => array(
        'reader' => array(
            'url' => 'http://my_piwik_instance.piwik.pro',
            'default_params' => array(
                'token_auth' => 'piwik_token_auth',
                'idSite' => 123
            )
        )
    )
)));

创建设置为'client'的piwik客户端服务

此示例使用PiwikGuzzleClient类,该类负责向Piwik发送http请求。您可以通过在项目中包含devhelp/piwik-api-guzzle来包含此扩展

//'guzzle' service must implement GuzzleHttp\ClientInterface
$app['my_piwik.client'] = $app->share(function () use ($app) {
    return new Devhelp\Piwik\Api\Guzzle\Client\PiwikGuzzleClient($app['guzzle']));
});

在您的用例中使用API方法

将服务添加到容器中

$app['my_service'] = $app->share(function () use ($app) {
    return new Acme\DemoBundle\Service\MyService($app['devhelp_piwik.api']);
});

示例服务定义

namespace Acme\DemoBundle\Service;


use Devhelp\Piwik\Api\Api;

class MyService
{

    /**
     * @var Api
     */
    private $piwikApi;

    public function __construct(Api $piwikApi)
    {
        $this->piwikApi = $piwikApi;
    }

    public function doSomething()
    {
        //...
        $this->piwikApi->getMethod('PiwikPlugin.pluginAction')->call();
        //...
    }
}

定义在运行时解析的API参数

您可以将服务设置为params。如果您这样做,则服务将在运行时用于解析参数。例如,有一个会返回已登录用户的token_auth的服务

$app = new Silex\Application();

$app->register(new Devhelp\Silex\Piwik\PiwikApiServiceProvider(array(
    'client' => 'my_piwik.client',
    'api' => array(
        'reader' => array(
            'url' => 'http://my_piwik_instance.piwik.pro',
            'default_params' => array(
                'token_auth' => 'my_token_auth_provider',
                'idSite' => 123
            )
        )
    )
)));

my_token_auth_provider服务定义(假设SecurityServiceProvider已注册)

$app['my_token_auth_provider'] = $app->share(function () use ($app) {
    return new Acme\DemoBundle\Param\MyTokenAuthProvider($app['security.token_storage']);
});

MyTokenAuthProvider类定义(假设User类有getPiwikToken方法)

namespace Acme\DemoBundle\Param;

use Devhelp\Piwik\Api\Param\Param;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;

class MyTokenAuthProvider implements Param
{

    /**
     * @var TokenStorageInterface
     */
    private $tokenStorage;

    public function __construct(TokenStorageInterface $tokenStorage)
    {
        $this->tokenStorage = $tokenStorage;
    }

    public function value()
    {
        $token = $this->tokenStorage->getToken();

        return $token instanceof TokenInterface ? $token->getUser()->getPiwikToken() : null;
    }
}

将API方法定义为服务

$app['my_piwik_method'] = $app->share(function () use ($app) {
    return $app['devhelp_piwik.api']->getMethod('VisitFrequency.get');
});

反馈/请求

如果您认为某些内容缺失或需要修复,请随时创建一个问题。欢迎反馈!

致谢

由:devhelp.pl提供。