phrozenbyte/pico-http-params

这是 Pico 官方的 HTTP 参数插件,用于在 Twig 模板中访问 GET 和 POST 参数。Pico 是一个极其简单、极快、基于文件的 CMS。

v1.0.1 2017-10-19 20:16 UTC

This package is auto-updated.

Last update: 2024-09-12 10:40:16 UTC


README

这是 Pico 官方 HTTP 参数插件的仓库。

Pico 是一个极其简单、极快、基于文件的 CMS。更多信息请访问 http://picocms.org/

PicoHttpParams 允许主题开发者使用 url_paramform_param 函数在 Twig 模板中访问 HTTP GET 和 HTTP POST 参数。这使得为您的 Pico 网站开发出色的主题比以往任何时候都要容易。

此插件基本上封装了 PHP 的 filter_var() 函数。以下是 PHP 文档中关于 filter 扩展 的摘录:

此扩展通过验证或清理数据来过滤数据。当数据源包含未知(或外部)数据时,例如用户提供的输入,这特别有用。例如,这些数据可能来自 HTML 表单。

主要有两种过滤类型:验证和清理。

验证 用于验证或检查数据是否符合某些资格。例如,传递 FILTER_VALIDATE_EMAIL 将确定数据是否为有效的电子邮件地址,但不会更改数据本身。

清理 将清理数据,因此它可能会通过删除不需要的字符来修改它。例如,传递 FILTER_SANITIZE_EMAIL 将删除不适合电子邮件地址包含的字符。但话说回来,它并不验证数据。

标志可以与验证和清理一起使用,根据需要调整行为。例如,在过滤 URL 时传递 FILTER_FLAG_PATH_REQUIRED 将要求路径(例如 /foohttp://example.org/foo 中)存在。

版权 © 1997-2016 PHP 文档组,在 Creative Commons Attribution 3.0 许可下发布

安装

只需 下载最新版本,并将 PicoHttpParams.php 文件上传到您的 Pico 安装(例如 /var/www/html/pico/plugins/)的 plugins 目录中。此插件也可在 Packagist.org 上找到,并且可以通过 composer require phrozenbyte/pico-http-params 包含在其他项目中。该插件需要 Pico 1.0+

此插件是Pico 1.1版本及其以后版本核心中将要包含的功能的后向移植。尽管此插件与Pico 1.1(及以后版本)兼容,但在与Pico 1.1(及以后版本)一起使用时,它不提供任何功能。因此,如果没有任何其他已安装的插件依赖于它,您可以安全地在Pico 1.1安装上删除此插件。然而,您不必这么做。简而言之,仅在Pico 1.0中手动安装此插件才有意义。

配置

您无法配置此插件,它是一个面向主题开发者的实用工具插件。

使用方法

注意!输入验证很困难!始终以最偏执的方式验证您的输入数据。始终优先选择验证过滤器而不是清理过滤器;在使用清理过滤器时要非常小心,您可能会创建跨站脚本漏洞!

PicoHttpParams::getUrlParameter()函数以及相应的url_param Twig函数和PicoHttpParams::getFormParameter()函数以及相应的form_param Twig函数都接受以下参数

如果传递了验证过滤器,所有函数都将返回HTTP GET或HTTP POST参数的验证值,或者如果值无效,则返回给定的默认值或false。如果传递了清理过滤器,所有函数都将返回HTTP GET或HTTP POST参数的清理值。如果HTTP GET或HTTP POST变量不存在,所有函数都将始终返回提供的默认值或null

示例

将布尔HTTP GET参数expand传递给以在模板中展开详细信息部分

<a href="{{ current_page.id|link('expand=yes') }}">Learn more...</a>

{% if url_param('expand', 'boolean') %}
    You're learning more right now! Isn't that great!?
{% endif %}

使用HTML表单询问用户关于“答案”的问题,并将他的决定存储在Twig变量the_answer中。使用正则表达式仅允许存在于HTML表单中的值。

<form action="" method="POST">
    <label for="the_answer">What is the answer?</label>
    <select id="the_answer" name="the_answer">
        <option></option>
        <option value="band">a Northern Irish hard rock and blues-rock band</option>
        <option value="42">42</option>
        <option value="what">What the hell are you talking about?</option>
    </select>
    <input type="submit" />
</form>

{% set the_answer = form_param('the_answer', 'validate_regexp', { 'regexp': '/^(band|42|what)$/' }) %}

询问用户他一年赚多少钱,并声称他的金额要么很悲惨,要么很荒谬,因为您一年赚的两倍。使用Twig变量amount,并让参数默认为0。使用FILTER_VALIDATE_FLOATfloat)过滤器,但通过传递FILTER_FLAG_ALLOW_THOUSAND标志来调整其行为——这允许用户使用千位分隔符输入金额(例如12,345.00)。

<form action="" method="GET">
    <label for="amount">How much do you make a year?</label>
    <input id="amount" name="amount" type="text" />
    <input type="submit" />
</form>

{% set amount = url_param('amount', 'float', 0, 'allow_thousand') %}
{% if amount > 0 %}
    {% if amount < 10 %}
        You make just {{ amount }} cat pictures a year? Oh, that's sad... :-(
    {% else %}
        Impressive... Not! This is ridiculous! I make {{ amount * 2 }} cat pictures a year!
    {% endif %}
{% endif %}