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.
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.
To use EncodeUrlRule, add this to your config.
'UrlManager' => [
'ruleConfig' => [
'class' => 'weblement\components\EncodeUrlRule,
'paramName' => 'enc',
'autoEncodeParams' => [
'page',
'userId'
],
],
],
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`
}
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'));
}
Feel free to send pull requests.
For license information check the LICENSE-file.