1

CI user_guide に従って、次のセットを含む「form_validation.php」という名前の構成ファイルを作成しました。

$config = array(
'user/create' => array(
    array(
        'field' => 'id', 
        'label' => '', 
        'rules' => ''
    ),
    array(
        'field' => 'first_name',
        'label' => 'lang:First name', 
        'rules' => 'required|max_length[30]'
    ),...        
),
'user/update' => array(
    array(
        'field' => 'id', 
        'label' => '', 
        'rules' => ''
    ),
    array(
        'field' => 'first_name',
        'label' => 'lang:First name', 
        'rules' => 'required|max_length[30]'
    ),...
)
);

私の「ユーザー」コントローラーでは、「作成」メソッドを呼び出すと、したがって URLを使用して、構成ファイルで定義された最初のルール セットがhttp://localhost/my_ci_application/user/createステートメントによって自動的に実行されます。$this->form_validation->run()これは、ユーザー ガイドで読んだ予想通りの動作です。

しかし、次の URL を実行してhttp://localhost/my_ci_application/user/update/1ID が 1 のユーザーを更新すると、'user/update' ルール セットが自動的に読み込まれません。パラメータのため、CI は「user/update/1」ルール セットを見つけることを期待しているようですが、このメソッドを呼び出すときにユーザーの ID が常に変化するため、もちろん作成できません。

私はこれを正しく理解していますか?はいの場合、標準の CI URL はコントローラー/メソッド/パラメーターのように形成されていると思っていたので残念です...フォーム検証クラスは最初の 2 つの URI セグメントのみを考慮すると思いますか?!

参考までに、user.update メソッドに次のように記述すると、検証ルールが正常に機能します。

$this->form_validation->run('user/update')

したがって、私の質問は、ルールの自動ロードを正しく理解したかどうか、およびいくつかのパラメーターを持つメソッドであってもそれらのルールを自動ロードするためにできることがあるかどうかです。

事前にどうもありがとうございました。

4

3 に答える 3

1

form_validation.php ファイルで:

$CI =& get_instance();

$config = array(
    'user/update/' . $CI->uri->segment(3) => array(
    ....
    )
);
于 2013-08-25T00:27:32.677 に答える
0

この質問を理解している場合は、通話の検証が必要になります。たとえば、次のようになります。

$this->lang->load('form_validation', 'portuguese'); //if u have order language
if($this->form_validation->run('user/update') == FALSE)
{
//msg error
}
else{
//save
}

URL ダボの値を取得するには、次のものが必要です。

$this->uri->segment(3);

これが役に立ったことを願っています

于 2013-07-10T11:20:40.020 に答える