Bug(バグ) #3510
Youichi Kimura さんがほぼ11年前に更新
h3. Overview (現象) sns_config.yml には下記のようにデフォルト値を設定する項目があり、例えば @opConfig::get('sns_name')@ とした場合に sns_config テーブルに該当する値が存在しない場合は @'MySNS'@ が返るようになっている。また、sns_config.yml でデフォルト値が定義されていない項目については opConfig::get() の第二引数 $default の値が返る。 <pre><code class="yaml"> general: sns_name: Name: "sns_name" Caption: "SNS名" FormType: "input" ValueType: "text" Default: "MySNS" IsRequired: true </code></pre> しかし opConfig::get() の第二引数 $default に null 以外の値を指定すると、sns_config テーブルに存在しない設定項目について sns_config.yml に記述されている Default の値は無視され $default の値が返ってしまう。 h3. Causes (原因) <pre><code class="php"> public static function get($name, $default = null) { $setting = self::getConfigurationSetting(); $result = null; $result = Doctrine::getTable('SnsConfig')->get($name, $default); if (isset($setting[$name])) { if (is_null($result)) { $result = self::getDefaultValue($name); } } return $result; } </code></pre> SnsConfigTable::get() の第二引数に $default を指定しているため、sns_config テーブル内に該当するレコードが存在しない場合に sns_config.yml の Default の値が使われるか否かは @is_null($result)@ によって判定されており、$default が false となり、$result が sns_config から取得された値なのか区別ができなくなってしまうことが原因。 null であることを前提に記述されていることが原因。 h3. Way to fix (修正内容) SnsConfigTable::get() の第二引数には null を指定し、最後の @return $result;@ の箇所で $default を使用するか否かの判定を行う。 @is_null($result)@ の代わりに @$default === $result@ を判定に使用する。