1. Go to this page and download the library: Download paulzi/yii2-json-behavior library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
paulzi / yii2-json-behavior example snippets
use paulzi\jsonBehavior\JsonBehavior;
class Item extends \yii\db\ActiveRecord
{
public function behaviors() {
return [
[
'class' => JsonBehavior::className(),
'attributes' => ['params'],
],
];
}
}
$item = new Item();
$item->params->set('{}');
var_dump($item->params->isEmpty()); // true
use paulzi\jsonBehavior\JsonValidator;
class Item extends \yii\db\ActiveRecord
{
public function rules() {
return [
[['params'], JsonValidator::className()],
];
}
}
$item = new Item();
$item->attributes = ['params' => '{ test: }'];
var_dump($item->save()); // false
var_dump($item->errors); // ['params' => ['Value is not valid JSON or scalar']]
use paulzi\jsonBehavior\JsonValidator;
class Item extends \yii\db\ActiveRecord
{
public function rules() {
return [
[['params'], JsonValidator::className(), 'merge' => true],
];
}
}
class Item
{
public $params;
public function __constructor()
{
$this->params = new JsonField();
}
}
// ...
$item = new Item();
$item->params['one'] = 1;
var_dump((string)$item->params); // {"one":1}
/**
* @inheritdoc
*/
public function isAttributeChanged($name, $identical = true)
{
if ($this->$name instanceof JsonField) {
return (string)$this->$name !== $this->getOldAttribute($name);
} else {
return parent::isAttributeChanged($name, $identical);
}
}
/**
* @inheritdoc
*/
public function getDirtyAttributes($names = null)
{
$result = [];
$data = parent::getDirtyAttributes($names);
foreach ($data as $name => $value) {
if ($value instanceof JsonField) {
if ((string)$value !== $this->getOldAttribute($name)) {
$result[$name] = $value;
}
} else {
$result[$name] = $value;
}
}
return $result;
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.