Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Not restoring parent Each's key on some conditions

オープン 初心者向け
#823 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
75/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
php

調査の方向性

この問題は EachHandler クラスにあり、具体的には親 Each のキーを復元しない 2 つの return 文にあります。まず、コードベース内の EachHandler ファイルを見つけてください。validate メソッドを調べてフローを理解します。修正には、問題のある各 return の前に $context->setParameter(Each::PARAMETER_EACH_KEY, $originalEachKey); を追加することが含まれます。Each 検証に関連する既存のテストを実行して、修正が何も壊さないことを確認してください。

索引モデルが issue の本文から書いたものです。

説明

Description

In EachHandler there are 2 returns without restoring in context parent Each's key.

Code in question:

        $originalEachKey = $context->getParameter(Each::PARAMETER_EACH_KEY); // <== storing parent key

        foreach ($value as $index => $item) {
            if (!is_int($index) && !is_string($index)) {
                return (new Result())->addError($rule->getIncorrectInputKeyMessage(), [ // <== bug, return without restoring parent key
                    'property' => $context->getTranslatedProperty(),
                    'Property' => $context->getCapitalizedTranslatedProperty(),
                    'type' => get_debug_type($index),
                ]);
            }

            $context->setParameter(Each::PARAMETER_EACH_KEY, $index);

            $itemResult = $context->validate($item, $rules);
            if ($itemResult->isValid()) {
                continue;
            }

            foreach ($itemResult->getErrors() as $error) {
                $result->addErrorWithoutPostProcessing(
                    $error->getMessage(),
                    $error->getParameters(),
                    $error->getValuePath() === [] ? [$index] : [$index, ...$error->getValuePath()],
                );
            }

            if ($rule->stopOnError) {
                return $result; // <== bug, return without restoring parent key
            }
        }

        $context->setParameter(Each::PARAMETER_EACH_KEY, $originalEachKey); // <== restoring parent key

        return $result;

Package version

No response

PHP version

No response

主要言語
PHP
スター
167
フォーク
47
平均マージ
1日 7時間
マージ済み PR(30日)
1

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

yiisoft/validator のほかの issue

yiisoft/validator の issue をすべて見る

似ている issue

PHP の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。