扩展 piwik 以访问所有请求数据
Extending piwik to access all request data
要编写自定义 piwik 插件,我正在学习教程:http://piwik.org/blog/2014/09/create-widget-introducing-piwik-platform/
如何访问 piwik 在插件中收到的请求数据?
上面的小部件示例 link:
class Widgets extends \Piwik\Plugin\Widgets
{
/**
* Here you can define the category the widget belongs to. You can reuse any existing widget category or define your own category.
* @var string
*/
protected $category = 'ExampleCompany';
/**
* Here you can add one or multiple widgets. You can add a widget by calling the method "addWidget()" and pass the name of the widget as well as a method name that should be called to render the widget. The method can be defined either directly here in this widget class or in the controller in case you want to reuse the same action for instance in the menu etc.
*/
protected function init()
{
$this->addWidget('Example Widget Name', $method = 'myExampleWidget');
$this->addWidget('Example Widget 2', $method = 'myExampleWidget', $params = array('myparam' => 'myvalue'));
}
/**
* This method renders a widget as defined in "init()". It's on you how to generate the content of the widget. As long as you return a string everything is fine. You can use for instance a "Piwik\View" to render a twig template. In such a case don't forget to create a twig template (eg. myViewTemplate.twig) in the "templates" directory of your plugin.
*
* @return string
*/
public function myExampleWidget()
{
$view = new View('@MyWidgetPlugin/myViewTemplate');
return $view->render();
}
}
如何在插件中访问 piwik 为每个访问者请求接收的数据,例如请求 header 字段?
访问名称为'imageId'的变量:
$imageId = Common::getRequestVar('imageId');
关于header:
Piwik 通过 ProxyHeaders
class 提供了 headers 方法的列表。
目前只有两个 public 静态方法,您可能会感兴趣:
ProxyHeaders::getProxyClientHeaders
,与
一起工作
'HTTP_CF_CONNECTING_IP',
'HTTP_CLIENT_IP',
'HTTP_X_FORWARDED_FOR',
和ProxyHeaders::getProxyHostHeaders
为
'HTTP_X_FORWARDED_HOST'
这两个方法都调用另一个方法,它是私有的:
/**
* Get headers present in the HTTP request
*
* @param array $recognizedHeaders
* @return array HTTP headers
*/
private static function getHeaders($recognizedHeaders)
{
$headers = array();
foreach ($recognizedHeaders as $header) {
if (isset($_SERVER[$header])) {
$headers[] = $header;
}
}
return $headers;
}
因为方法 getHeaders
是私有的,它实际上不会做你想要的,可能最简单的方法就是直接从 $_SERVER
.[=] 中读取 headers 22=]
它将以这种方式工作:如果您有一个 header,名称为 "my-test-header",值为“123”:
$_SERVER['HTTP_MY_TEST_HEADER'] // returns "123"
"Content-Type" => 'application/x-www-form-urlencoded'
$_SERVER['HTTP_CONTENT_TYPE'] // returns "application/x-www-form-urlencoded"
等等
关于 Web 服务器的一个注意事项,无论是 Apache 还是 Nginx 或任何其他服务器,配置在这里真的很重要,特别是对于 HTTP_X_FORWARDED_FOR
header.
要编写自定义 piwik 插件,我正在学习教程:http://piwik.org/blog/2014/09/create-widget-introducing-piwik-platform/
如何访问 piwik 在插件中收到的请求数据?
上面的小部件示例 link:
class Widgets extends \Piwik\Plugin\Widgets
{
/**
* Here you can define the category the widget belongs to. You can reuse any existing widget category or define your own category.
* @var string
*/
protected $category = 'ExampleCompany';
/**
* Here you can add one or multiple widgets. You can add a widget by calling the method "addWidget()" and pass the name of the widget as well as a method name that should be called to render the widget. The method can be defined either directly here in this widget class or in the controller in case you want to reuse the same action for instance in the menu etc.
*/
protected function init()
{
$this->addWidget('Example Widget Name', $method = 'myExampleWidget');
$this->addWidget('Example Widget 2', $method = 'myExampleWidget', $params = array('myparam' => 'myvalue'));
}
/**
* This method renders a widget as defined in "init()". It's on you how to generate the content of the widget. As long as you return a string everything is fine. You can use for instance a "Piwik\View" to render a twig template. In such a case don't forget to create a twig template (eg. myViewTemplate.twig) in the "templates" directory of your plugin.
*
* @return string
*/
public function myExampleWidget()
{
$view = new View('@MyWidgetPlugin/myViewTemplate');
return $view->render();
}
}
如何在插件中访问 piwik 为每个访问者请求接收的数据,例如请求 header 字段?
访问名称为'imageId'的变量:
$imageId = Common::getRequestVar('imageId');
关于header:
Piwik 通过 ProxyHeaders
class 提供了 headers 方法的列表。
目前只有两个 public 静态方法,您可能会感兴趣:
ProxyHeaders::getProxyClientHeaders
,与
'HTTP_CF_CONNECTING_IP',
'HTTP_CLIENT_IP',
'HTTP_X_FORWARDED_FOR',
和ProxyHeaders::getProxyHostHeaders
为
'HTTP_X_FORWARDED_HOST'
这两个方法都调用另一个方法,它是私有的:
/**
* Get headers present in the HTTP request
*
* @param array $recognizedHeaders
* @return array HTTP headers
*/
private static function getHeaders($recognizedHeaders)
{
$headers = array();
foreach ($recognizedHeaders as $header) {
if (isset($_SERVER[$header])) {
$headers[] = $header;
}
}
return $headers;
}
因为方法 getHeaders
是私有的,它实际上不会做你想要的,可能最简单的方法就是直接从 $_SERVER
.[=] 中读取 headers 22=]
它将以这种方式工作:如果您有一个 header,名称为 "my-test-header",值为“123”:
$_SERVER['HTTP_MY_TEST_HEADER'] // returns "123"
"Content-Type" => 'application/x-www-form-urlencoded'
$_SERVER['HTTP_CONTENT_TYPE'] // returns "application/x-www-form-urlencoded"
等等
关于 Web 服务器的一个注意事项,无论是 Apache 还是 Nginx 或任何其他服务器,配置在这里真的很重要,特别是对于 HTTP_X_FORWARDED_FOR
header.