devhelp / piwik-bundle
integration of devhelp/piwik-api into symfony. Allows to create services for piwik api methods
Installs: 26 470
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 5
Forks: 1
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=5.4
- devhelp/piwik-api: >=0.3
- symfony/console: ~2.3|~3.0|~4.0
- symfony/framework-bundle: ~2.3|~3.0|~4.0
Requires (Dev)
- phpunit/phpunit: ~4.0|~5.0
- squizlabs/php_codesniffer: ~2.0
This package is not auto-updated.
Last update: 2024-10-31 14:51:33 UTC
README
Purpose
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.
Installation
$ 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; } //... }
Sandbox
Full working example can be found at devhelp/piwik-bundle-sandbox
Usage
Define API connection in config.yml
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%
Create piwik client service that is used in config.yml
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'
Use API method in your use case
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(); //... } }
Define API parameters resolved at runtime
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; } }
Define API methods as services
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)
Calling API using Symfony command
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
Feedback/Requests
Feel free to create an issue if you think that something is missing or needs fixing. Feedback is more than welcome!
Credits
Brought to you by: devhelp.pl