8

したがって、フレームワークは CodeIgniter 2.0.2 です。データベースの行に対応するフィールドのグループを持つフォームがあります。フィールド名の形式は次のとおりです。

opt[0][foo]
opt[0][bar]
opt[1][foo]
opt[1][bar]
etc...

インデックス (1、2 など) はデータベースの行 ID に対応していません。これは単にフィールドのグループを分割する方法です。ユーザーは任意の数のフィールド グループを追加および削除できるため、インデックスにギャップが生じる場合があります。すべてのグループは同一です。つまり、同じ第 2 レベル名を持つまったく同じフィールド セットが含まれています。

CodeIgniter の検証ライブラリを使用してフォームを検証し、必要に応じて (p) 再入力できるようにしたいと考えています。事前入力に関する多くの投稿 (優れた CI ユーザー ガイドに加えて) を見つけました。一般的に、再入力を操作する方法を知っています。ただし、上記のインデックス付きフィールド名で試したのはこれが初めてです。以下を試しましたが、うまくいきません。

array(
    'field' => 'opt[][foo]',
    'label' => 'Foo',
    'rules' => 'required'
)

私はあまりにも多くのことを望んでいただけで、CodeIgniter は私が必要とすることをサポートしていないと推測しています。既存のフォーム検証ライブラリを拡張することオプションであるため、誰かが同じ状況にあり、非常に歓迎されるいくつかのヒントを提供できる場合.

アップデート:

ちょっとした追加情報ですが、具体的にインデックスが作成されたフィールド (以下を参照) の検証も試みましたが、これも機能しませんでした...私が理解しているように、特定のケースでは多次元検証が機能するはずです:

array(
    'field' => 'opt[0][foo]',
    'label' => 'Foo',
    'rules' => 'required'
)
4

3 に答える 3

2

次のコントローラー コードは、CI 2.0.2 で動作します。

public function test() {

        $this->load->library('form_validation');
        $this->load->helper('form');

        $this->form_validation->set_rules('test[test1][test2]', 'Test', 'required|valid_email');

        $this->form_validation->run();  

        echo validation_errors();

        echo form_open($this->uri->uri_string());
        echo form_input('test[test1][test2]', set_value('test[test1][test2]'));
        echo form_submit();
        echo form_close();

    }
于 2011-07-21T19:20:23.973 に答える
1

これを使用して、変数をループし、opt各入力の検証ルールを設定できます。

if(!empty($opt))
    {
        foreach($opt as $id => $value)
        {
            $this->form_validation->set_rules('opt[' . $id . '][foo]', 'Foo', 'required');
            $this->form_validation->set_rules('opt[' . $id . '][bar]', 'Bar', 'required');
        }
    }
于 2013-12-04T05:32:18.257 に答える
0

検証クラスのコールバック関数を確認する必要があります。これは、検証に必要なものを達成するのに役立ちます。

于 2011-05-25T08:02:13.770 に答える