当config设置了hook的时候如果value等于false,结果得到的却是null
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 76/100
Direzione di ricerca
Esamina src/think/Config.php intorno alla riga 191, quindi esegui la riproduzione ConfigTest fornita con un hook sul gruppo app e un valore false per worker.http.enable. Conferma che un valore false invariato rimanga false quando viene fornito un valore predefinito, mentre i valori modificati dall’hook, come database, continuino a funzionare.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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));
}
}
- Lingua principale
- PHP
- Stelle
- 2.8k
- Fork
- 1k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di top-think/framework
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
enhancement
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
Tutte le issue di top-think/framework
Issue simili
-
Bug-Report
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
RSS-Bridge/rss-bridge#5158 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
octobercms/october#6150 ·
-
Syntax error with CONST-sAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
type/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
flarum/framework#5301 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Add TuneIn-DirMon in the bot listForse già presa @liviuconcioiu l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
matomo-org/device-detector#8424 ·
I maintainer di solito rispondono entro 1 giorno