Locustv2 / yii2-encode-url-rule

Makes the encoding of query parameters easier when creating urls
BSD 3-Clause "New" or "Revised" License
5 stars 2 forks source link

Encode Url Rule for Yii2

This extension enables the creation of urls with parameters that can contain array of data. This is achieved by flatenning the array into a json string and then encoded and added as query string.

Latest Stable Version Total Downloads Latest Unstable Version License

Installation

The preferred way to install the library is through composer.

Either run

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

or add

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

to your composer.json file.

Configuring EncodeUrlRule

To use EncodeUrlRule, add this to your config.

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

Using EncodeUrlRule

When you are creating urls in yii, you can pass an array or parameters to the key EncodeUrlRule::$paramName that you set. All parameters that are in EncodeUrlRule::$autoEncodeParams will also be encoded and assigned to the key in your url. For example:

// /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'
    ],
]);

In your controller action you can get the query parameters as follows

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`
}

Further Examples

You are able to also pass arrays as follows:

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

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

However these parameters should will not work if you are trying to assign a controller action parameter.

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

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

To do

Contributing

Feel free to send pull requests.

License

For license information check the LICENSE-file.