phrozenbyte / pico-http-params
这是 Pico 官方的 HTTP 参数插件,用于在 Twig 模板中访问 GET 和 POST 参数。Pico 是一个极其简单、极快、基于文件的 CMS。
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-12 10:40:16 UTC
README
这是 Pico 官方 HTTP 参数插件的仓库。
Pico 是一个极其简单、极快、基于文件的 CMS。更多信息请访问 http://picocms.org/。
PicoHttpParams
允许主题开发者使用 url_param
或 form_param
函数在 Twig 模板中访问 HTTP GET 和 HTTP POST 参数。这使得为您的 Pico 网站开发出色的主题比以往任何时候都要容易。
此插件基本上封装了 PHP 的 filter_var()
函数。以下是 PHP 文档中关于 filter 扩展 的摘录:
此扩展通过验证或清理数据来过滤数据。当数据源包含未知(或外部)数据时,例如用户提供的输入,这特别有用。例如,这些数据可能来自 HTML 表单。
主要有两种过滤类型:验证和清理。
验证 用于验证或检查数据是否符合某些资格。例如,传递
FILTER_VALIDATE_EMAIL
将确定数据是否为有效的电子邮件地址,但不会更改数据本身。清理 将清理数据,因此它可能会通过删除不需要的字符来修改它。例如,传递
FILTER_SANITIZE_EMAIL
将删除不适合电子邮件地址包含的字符。但话说回来,它并不验证数据。标志可以与验证和清理一起使用,根据需要调整行为。例如,在过滤 URL 时传递
FILTER_FLAG_PATH_REQUIRED
将要求路径(例如/foo
在http://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_FLOAT
(float
)过滤器,但通过传递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 %}