Windwalker IO 包

安装数量: 15,487

依赖关系: 3

建议者: 0

安全性: 0

星标: 2

关注者: 4

分支: 0

开放性问题: 0

类型:windwalker-package

3.5.23 2020-08-07 04:29 UTC

README

Windwalker IO 包是一个用于获取请求或向用户终端发送输出的输入/输出处理程序。

此包基于 Joomla 输入,但进行了大量修改,请参阅Joomla Wiki中的原始概念。

通过 Composer 安装

将以下内容添加到您的 composer.json 中的 require 块。

{
    "require": {
        "windwalker/io": "~3.0"
    }
}

Web 输入

通常,我们需要从 http 获取请求数据,$_GET$_POST$_REQUEST 提供这些数据。

但如果只使用超级全局变量,则非常不安全,输入对象可以帮助我们从这些变量中获取值并对每个字符串进行清理。

use Windwalker\IO\Input;

$input = new Input;

$input->get('flower'); // Same as $_REQUEST['flower']

$input->set('flower', 'sakura');

第二个参数是如果请求参数不存在时的默认值

$input->get('flower', 'default');

过滤器

输入使用 Windwalker Filter 包来清理请求字符串,默认过滤器类型是 CMD。我们可以使用其他过滤器类型

// mysite.com/?flower=<p>to be, or not to be.</p>;

$input->get('flower'); // tobeornottobe (Default cmd filter)

$input->get('flower', 'default_value', InputFilter::STRING); // to be, or not to be

$input->getString('flower'); // to be, or not to be (Same as above, using magic method)

$input->getRaw('flower') // <p>to be, or not to be.</p>

更多过滤器使用请参阅:Windwalker Filter

紧凑型和获取数组

以数组的形式获取数据。

// mysite.com/?flower[1]=sakura&flower[2]=olive;

$input->getArray('flower'); // Array( [1] => sakura [2] => olive)

// Get array and filter every values
$input->getArray('flower', null, '.', 'int');

使用 compact() 方法

// mysite.com/?flower=sakura&foo=bar&king=Richard

// Get all request
$input->compact();

// To retrieve values you want
$array(
    'flower' => '',
    'king' => '',
);

$input->compact($array); // Array( [flower] => sakura [king] => Richard)

// Specify different filters for each of the inputs:
$array(
    'flower' => InputFilter::CMD,
    'king' => InputFilter::STRING,
);

// Use nested array to get more complicated hierarchies of values

$input->compact(array(
    'windwalker' => array(
        'title' => InputFilter::STRING,
        'quantity' => InputFilter::INTEGER,
        'state' => 'integer' // Same as above
    )
));

获取和设置多级

如果我们想获取 foo[bar][baz] 的值,只需使用 get('foo.bar.baz')

$value = $input->get('foo.bar.baz', 'default', InputFilter::STRING);

$input->set('foo.bar.baz', $data);

// Use custom separator
$input->get('foo/bar/baz', 'default', [filter], '/');
$input->set('foo/bar/baz', $data, '/');

从其他方法获取值

我们可以将其他方法作为新的输入对象获取。

$post = $input->post;

$value = $post->get('foo', 'bar');

// Other inputs
$get    = $input->get;
$put    = $input->put;
$delete = $input->delete;

获取超级全局变量

$env     = $input->env;
$session = $input->session;
$cookie  = $input->cookie;
$server  = $input->server;

$server->get('REMOTE_ADDR'); // Same as $_SERVER['REMOTE_ADDR'];

见:SUPER GLOBALS

获取当前请求的方法

$method = $input->getMethod();

JSON 输入

如果您发送带有 JSON 主体或 content-type: application/json 的请求,则可以使用 $input->json 获取 JsonInput 并解析 JSON 值。

文件输入

PHP 返回数组格式的文件数据有时可能很尴尬,尤其是处理文件数组时。FilesInput 提供了一个方便的接口,可以按文件分组数据,使生活更加轻松。

假设您有一个如下表单

<form action="..." enctype="multipart/form-data" method="post">
    <input type="file" name="flower[test][]" />
    <input type="file" name="flower[test][]" />
    <input type="submit" value="submit" />
</form>

通常,PHP 会将这些数据放入名为 $_FILES 的数组中,如下所示

Array
(
    [flower] => Array
        (
            [name] => Array
                (
                    [test] => Array
                        (
                            [0] => youtube_icon.png
                            [1] => Younger_Son_2.jpg
                        )
                )
            [type] => Array
                (
                    [test] => Array
                        (
                            [0] => image/png
                            [1] => image/jpeg
                        )
                )
            [tmp_name] => Array
                (
                    [test] => Array
                        (
                            [0] => /tmp/phpXoIpSD
                            [1] => /tmp/phpWDE7ye
                        )
                )
            [error] => Array
                (
                    [test] => Array
                        (
                            [0] => 0
                            [1] => 0
                        )
                )
            [size] => Array
                (
                    [test] => Array
                        (
                            [0] => 34409
                            [1] => 99529
                        )
                )
        )
)

FilesInput 生成的结果更干净,更容易处理

$files = $input->files->get('flower');

$files 然后

Array
(
    [test] => Array
        (
            [0] => Array
                (
                    [name] => youtube_icon.png
                    [type] => image/png
                    [tmp_name] => /tmp/phpXoIpSD
                    [error] => 0
                    [size] => 34409
                )

            [1] => Array
                (
                    [name] => Younger_Son_2.jpg
                    [type] => image/jpeg
                    [tmp_name] => /tmp/phpWDE7ye
                    [error] => 0
                    [size] => 99529
                )

        )
)

CLI 输入和输出

请参阅 Cli README