popphp / pop-filter

Pop PHP 框架的 Pop Filter 组件

4.0.1 2024-04-02 00:04 UTC

This package is auto-updated.

Last update: 2024-09-02 01:24:32 UTC


README

Build Status Coverage Status

Join the chat at https://popphp.slack.com Join the chat at https://discord.gg/TZjgT74U7E

概述

pop-filter 是一个组件,用于将过滤回调应用于需要由应用程序的其他区域使用的值。它可以用于输入安全以及一般输入清理。

pop-filterPop PHP 框架 的一个组件。

顶部

安装

使用 Composer 安装 pop-filter

composer require popphp/pop-filter

或者,在你的 composer.json 文件中引入它

"require": {
    "popphp/pop-filter" : "^4.0.0"
}

顶部

快速入门

简单过滤器

如果你想创建一个简单的单个过滤器并使用它来过滤一些值,你可以这样做

$filter = new Pop\Filter\Filter('strip_tags');
$values = [
    'username' => '<b>admin</b>',
    'email'    => '<a href="mailto:test@test.com">test@test.com</a>'
];
$values = $filter->filter($values);

上面的值已经被过滤并去除了标签

$values = [
    'username' => 'admin',
    'email'    => 'test@test.com'
];

顶部

扩展

可过滤特性

组件附带一个名为 Pop\Filter\FilterableTrait 的特性。如果你想将过滤器组件及其功能包含在你的应用程序中,你可以创建一个使用此特性的类。使用它,你的类将能够添加过滤器并调用方法来过滤必要的值。这些过滤器可以是 Pop\Filter\FilterInterface(例如,Pop\Filter\Filter)的实例或一个基本的可调用对象。

namespace MyApp\Model

use Pop\Filter\FilterableTrait;

class User
{
    
    use FilterableTrait;

    /**
     * Filter values
     *
     * @param  array $values
     * @return array
     */
    public function filter(array $values)
    {
        foreach ($this->filters as $filter) {
            foreach ($values as $key => $value) {
                $values[$key] = $filter->filter($value, $key);
            }
        }

        return $values;
    }

} 

使用上面的代码,你可以创建一个用户模型,向其添加过滤器并使用它来过滤值

$user = new User();
$user->addFilters([
    'strip_tags',
    new Pop\Filter\Filter('htmlentities', [ENT_QUOTES, 'UTF-8']),
]);

$values = [
    'username'   => '<script>"Admin"</script>',
    'first_name' => '<b>John\'s</b>',
    'last_name'  => '<b>Doe</b>'
];

$values = $user->filter($values);

值现在已经被过滤,看起来像这样

$values = [
    'username'   => '&quot;Admin&quot;',
    'first_name' => 'John&#039;s',
    'last_name'  => 'Doe'
];

标签已经被去除,实体已经被转换为 HTML。注意第一个添加的过滤器是可调用的 strip_tags,第二个添加的过滤器是带有参数的 Pop\Filter\Filter 的实例。

顶部

排除

精细控制

Pop\Filter\AbstractFilter 类的 filter 方法中,有两个属性可供使用。它们是 excludeByNameexcludeByType。使用它们,你可以精细控制实际被过滤的值。例如,如果你不想过滤名为 username 的任何值,你可以这样做

$filter = new Pop\Filter\Filter('strip_tags', null, 'username');
$values = [
    'username' => '<b>admin</b>',
    'email'    => '<a href="mailto:test@test.com">test@test.com</a>'
];

foreach ($values as $key => $value) {
    $values[$key] = $filter->filter($value, $key);
}

由于上述构造函数中的第三个参数,username 被排除在过滤之外,值看起来像这样

$values = [
    'username' => '<b>admin</b>',
    'email'    => 'test@test.com'
];

过滤器构造函数的第四个参数是 $excludeByType,这对于一次性排除多个同类型的值非常有用,例如,表单对象中的文本区域。

顶部