locustv2/yii2-encode-url-rule

在创建URL时使查询参数的编码更简单。

安装: 454

依赖: 0

建议者: 0

安全: 0

星标: 5

关注者: 1

分支: 2

类型:yii2-extension

1.0.0 2017-03-31 16:58 UTC

This package is not auto-updated.

Last update: 2024-09-15 01:30:19 UTC


README

此扩展允许创建包含数组数据的参数URL。这是通过将数组扁平化为JSON字符串,然后编码并作为查询字符串添加来实现的。

Latest Stable Version Total Downloads Latest Unstable Version License

安装

安装此库的首选方式是通过 composer

运行以下命令:

php composer.phar require --prefer-dist locustv2/yii2-encode-url-rule

或者

{
    "require": {
        "locustv2/yii2-encode-url-rule": "~1.0.0"
    }
}

将其添加到您的 composer.json 文件中。

配置 EncodeUrlRule

要使用 EncodeUrlRule,将其添加到您的配置中。

'UrlManager' => [
    'ruleConfig' => [
        'class' => 'weblement\components\EncodeUrlRule,
        'paramName' => 'enc',
        'autoEncodeParams' => [
            'page',
            'userId'
        ],
    ],
],

使用 EncodeUrlRule

在yii中创建URL时,您可以将数组或参数传递给您设置的 EncodeUrlRule::$paramName 键。所有在 EncodeUrlRule::$autoEncodeParams 中的参数也将被编码并分配到您的URL中的键。例如

// /site/url-test/?id=123&key1=value1&enc=a2V5Mj0lMjJ2YWx1ZTIlMjImdXNlcklkPTQ1NiZwYWdlPTI%253D
echo Url::to([
    '/site/url-test',
    'id' => 123,
    'key1' => 'value1',
    'userId' => 456,
    'page' => 2,
    'enc' => [
        'key2' => 'value2'
    ],
]);

在您的控制器操作中,您可以按以下方式获取查询参数

public function actionUrlTest($id, $userId, $key2)
{
    var_dump($id); // 123
    var_dump($userId); // 456
    var_dump($key2); // value2
    var_dump(Yii::$app->request->get('key1')); // value1
    var_dump(Yii::$app->request->get('page')); // 2
    var_dump(Yii::$app->request->get()); // contains all get query  parameters including `enc`
}

更多示例

您还可以按以下方式传递数组

Url::to([
    '/site/url-test',
    'enc' => [
        'user' => [
            'id' => $user->id,
            'name' => $user->name,
        ]
    ],
]);

Url::to([
    '/site/url-test',
    'enc' => [
        'user' => User::find()->asArray()->one(),
    ],
]);

然而,如果尝试分配控制器操作参数,这些参数将不起作用。

// will not work
public function actionUrlTest($user)
{
    var_dump($user);
}

// will work
public function actionUrlTest()
{
    var_dump(Yii::$app->request->get('user'));
}

待办事项

  • 添加单元测试

贡献

请随时发送拉取请求。

许可证

有关许可证信息,请查看 LICENSE 文件。