From fffcd50b35c53888b40bb7cf9d52f25e1a4e2f43 Mon Sep 17 00:00:00 2001 From: Klimov Paul Date: Thu, 18 Jun 2015 11:31:25 +0300 Subject: [PATCH] Fixed `Mailer` does not check if property is public, while configuring 'Swift' object --- CHANGELOG.md | 1 + Mailer.php | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b9c3db..54e2679 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ Yii Framework 2 swiftmailer extension Change Log 2.0.5 under development ----------------------- +- Bug #9: Fixed `Mailer` does not check if property is public, while configuring 'Swift' object (brandonkelly, klimov-paul) 2.0.4 May 10, 2015 diff --git a/Mailer.php b/Mailer.php index 538bc83..5c06844 100644 --- a/Mailer.php +++ b/Mailer.php @@ -212,6 +212,7 @@ class Mailer extends BaseMailer } else { throw new InvalidConfigException('Object configuration must be an array containing a "class" element.'); } + if (isset($config['constructArgs'])) { $args = []; foreach ($config['constructArgs'] as $arg) { @@ -226,13 +227,15 @@ class Mailer extends BaseMailer } else { $object = Yii::createObject($className); } + if (!empty($config)) { + $reflection = new \ReflectionObject($object); foreach ($config as $name => $value) { - if (property_exists($object, $name)) { + if ($reflection->hasProperty($name) && $reflection->getProperty($name)->isPublic()) { $object->$name = $value; } else { $setter = 'set' . $name; - if (method_exists($object, $setter) || method_exists($object, '__call')) { + if ($reflection->hasMethod($setter) || $reflection->hasMethod('__call')) { $object->$setter($value); } else { throw new InvalidConfigException('Setting unknown property: ' . $className . '::' . $name);