简体   繁体   English

扩展piwik以访问所有请求数据

[英]Extending piwik to access all request data

To write a custom piwik plugin I'm following tutorial : http://piwik.org/blog/2014/09/create-widget-introducing-piwik-platform/ 要编写自定义的piwik插件,我正在学习教程: http ://piwik.org/blog/2014/09/create-widget-introducing-piwik-platform/

How can I access the request data that piwik receives within the plugin ? 如何访问piwik在插件中收到的请求数据?

Sample widget from above 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();
    }
}

How to access within the plugin the data piwik receives for each visitor request such as the request header fields ? 如何在插件中访问piwik为每个访问者请求(例如请求标头字段)接收的数据?

Access to a variable with name 'imageId': 访问名称为“ imageId”的变量:

$imageId = Common::getRequestVar('imageId');

About headers: Piwik provides a list of headers methods through a ProxyHeaders class. 关于标题:Piwik通过ProxyHeaders类提供了一系列标题方法。 For now there are only two public static methods, that could be potentially interesting for you: ProxyHeaders::getProxyClientHeaders , working with 目前只有两种公共静态方法,您可能会感兴趣: ProxyHeaders::getProxyClientHeaders ,使用

'HTTP_CF_CONNECTING_IP',
'HTTP_CLIENT_IP',
'HTTP_X_FORWARDED_FOR',

and ProxyHeaders::getProxyHostHeaders for ProxyHeaders::getProxyHostHeaders用于

'HTTP_X_FORWARDED_HOST'

Both these methods call another one, which is private: 这两种方法都调用另一个私有方法:

/**
 * 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;
}

Because method getHeaders is private and it actually doesn't do what you want, probably the easiest way would be just to read headers directly from $_SERVER . 因为方法getHeaders是私有的,实际上它没有执行您想要的操作,所以最简单的方法可能就是直接从$_SERVER读取标头。

It will work this way: if you have a header with name "my-test-header" and value "123": 它将以这种方式工作:如果您有一个标题为“ my-test-header”且值为“ 123”的标题:

$_SERVER['HTTP_MY_TEST_HEADER'] // returns "123"

"Content-Type" => 'application/x-www-form-urlencoded' “ Content-Type” =>'application / x-www-form-urlencoded'

$_SERVER['HTTP_CONTENT_TYPE'] // returns "application/x-www-form-urlencoded"

etc. 等等

One note about web servers, whether it's Apache or Nginx or any other one, the configuration really matters here, especially for a HTTP_X_FORWARDED_FOR header. 关于Web服务器的注释,无论是Apache还是Nginx或任何其他服务器,此处的配置确实很重要,尤其是对于HTTP_X_FORWARDED_FOR标头。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM