当config设置了hook的时候如果value等于false,结果得到的却是null
まだ誰も着手していません。
評価
調査の方向性
src/think/Config.php の191行目付近を確認し、app グループに hook を設定し、worker.http.enable に false 値を指定した、提供されている ConfigTest の再現を実行します。デフォルトが指定されている場合でも、変更されていない false 値が false のままであることを確認し、database など hook によって変更された値が引き続き機能することも確認します。
索引モデルが issue の本文から書いたものです。
説明
topthink/framework v8.1.4
php 8.4.22
现在有如下代码
$config->get('worker.http.enable',true);
期望是false结果却是true了,
worker.php 配置如下
return [
'http' => [
'enable' => false,
'host' => '0.0.0.0',
'port' => 8080,
'worker_num' => 4,
'options' => [],
],
发现当有$config->hook有设置的时候就会有问题
判断是不是应该改成 return $result ?? ($value === null ? $default: $value);
重现代码
<?php
declare(strict_types=1);
namespace think;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\TestCase;
class ConfigTest extends TestCase
{
private Config $config;
protected function setUp(): void
{
$this->config = new Config();
}
#[Test]
public function hook_returns_null_falls_back_to_default(): void
{
// 初始化时设置某些 key 为 false
$this->config->set([
'http' => [
'enable' => false,
],
], 'worker');
$this->config->set([
'driver' => 'local',
], 'app');
// 未设置 hook 前,get 正常返回配置值
$this->assertFalse($this->config->get('worker.http.enable'));
$this->assertFalse($this->config->get('worker.http.enable', true));
$this->assertEquals('local', $this->config->get('app.driver'));
// 设置 hook:对 app 组的的配置进行修改
$this->config->hook(function (string $name, $value) {
// 这里可以根据 name 来判断是否要进行更改返回数据
if (str_starts_with($name, 'app.driver')) {
return 'database';
}
// 其他组的配置不受影响 这样写没问题吧?
return $value;
}, 'app');
$this->assertEquals('database', $this->config->get('app.driver'));
// 期望false 返回null
$this->assertFalse($this->config->get('worker.http.enable'));
// 期望false 返回true
$this->assertFalse($this->config->get('worker.http.enable', true));
}
}
- 主要言語
- PHP
- スター
- 2.8k
- フォーク
- 1k
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
top-think/framework のほかの issue
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
-
enhancement
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
-
bug
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
top-think/framework の issue をすべて見る
似ている issue
-
Awaiting Triage bug
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
メンテナーはふだん 2 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
openemr/openemr#14857 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
メンテナーはふだん 1 日以内に返信
-
type: enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 82/100