diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index f9afa26ae5..a1a2fbc11a 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -57,6 +57,7 @@ Yii Framework 2 Change Log - Enh #10056: Allowed any callable to be passed to `ActionColumn::$urlCreator` (freezy-sk) - Enh #10061: `yii\helpers\BaseInflector::transliterate()` is now public. Introduced different levels of transliteration strictness (silverfire) - Enh #10118: Allow easy extension of slug generation in `yii\behaviors\SluggableBehavior` (cebe, hesna) +- Enh #10149: Made `yii\db\Connection` serializable (Sam Mousa) - Enh: Added last resort measure for `FileHelper::removeDirectory()` fail to unlink symlinks under Windows (samdark) - Chg #9369: `Yii::$app->user->can()` now returns `false` instead of erroring in case `authManager` component is not configured (creocoder) - Chg #9411: `DetailView` now automatically sets container tag ID in case it's not specified (samdark) diff --git a/framework/db/Connection.php b/framework/db/Connection.php index e1a1bc02aa..47a17e42ac 100644 --- a/framework/db/Connection.php +++ b/framework/db/Connection.php @@ -945,4 +945,14 @@ class Connection extends Component return null; } + + /** + * Close the connection before serializing. + * @return array + */ + public function __sleep() + { + $this->close(); + return array_keys((array) $this); + } } diff --git a/tests/framework/db/ConnectionTest.php b/tests/framework/db/ConnectionTest.php index d9084a3a16..2108baddc8 100644 --- a/tests/framework/db/ConnectionTest.php +++ b/tests/framework/db/ConnectionTest.php @@ -11,6 +11,7 @@ use yii\db\Transaction; */ class ConnectionTest extends DatabaseTestCase { + public function testConstruct() { $connection = $this->getConnection(false); @@ -42,6 +43,17 @@ class ConnectionTest extends DatabaseTestCase $connection->open(); } + public function testSerialize() + { + $connection = $this->getConnection(false, false); + $connection->open(); + $serialized = serialize($connection); + $unserialized = unserialize($serialized); + $this->assertInstanceOf('yii\db\Connection', $unserialized); + + $this->assertEquals(123, $connection->createCommand("SELECT 123")->queryScalar()); + } + public function testGetDriverName() { $connection = $this->getConnection(false, false);