Bundle provides integration with Piwik API. Adds services to the dependency injection container that allows to use Piwik API methods as services. It uses devhelp/piwik-api library - check its documentation for more advanced usage.
$ composer require devhelp/piwik-bundle
For more information please check composer website.
Add the bundle to AppKernel
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
//...
new \Devhelp\PiwikBundle\DevhelpPiwikBundle(),
//...
);
//...
return $bundles;
}
//...
}
Full working example can be found at devhelp/piwik-bundle-sandbox
devhelp_piwik:
client: my_piwik.client
api:
reader:
url: http://my_piwik_instance.piwik.pro
default_params:
token_auth: %piwik_token_auth%
idSite: %piwik_site_id%
This example uses PiwikGuzzleClient
class that is responsible for making http request to Piwik.
You can include this extension by including devhelp/piwik-api-guzzle in your project
my_piwik.client:
class: Devhelp\Piwik\Api\Guzzle\Client\PiwikGuzzleClient
arguments:
# guzzle service must implement GuzzleHttp\ClientInterface
- '@guzzle'
service configuration
my_service:
class: Acme\DemoBundle\Service\MyService
arguments:
# it is an alias of first configured api (in this case it equals devhelp_piwik.api.reader service)
- '@devhelp_piwik.api'
service definition
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();
//...
}
}
You are allowed to set services as a params. If you do that then the service will be used to resolve the parameter
at runtime. For example have a service that would return token_auth
of logged in user
devhelp_piwik:
client: my_piwik.client
api:
reader:
url: http://my_piwik_instance.piwik.pro
default_params:
token_auth: my_token_auth_provider
idSite: %piwik_site_id%
my_token_auth_provider
service definition
my_token_auth_provider:
class: Acme\DemoBundle\Param\MyTokenAuthProvider
arguments:
- '@security.token_storage'
MyTokenAuthProvider
class definition (assumes that User class has getPiwikToken method)
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;
}
}
my_piwik_method:
class: Devhelp\Piwik\Api\Method\Method
factory:
- '@devhelp_piwik.api'
- getMethod
arguments:
- VisitFrequency.get
This depends on your Symfony version (check here)
devhelp_piwik:api:call
command allows you to call the API from command line. You can do it either by specifying method service id
or by passing method name together with api name (or use the default)
for more information please run
$ console devhelp_piwik:api:call --help
Feel free to create an issue if you think that something is missing or needs fixing. Feedback is more than welcome!
Brought to you by: devhelp.pl