1

Codeigniterフレームワークを使用してWebアプリケーションを作成しています。

ユーザーがユーザー名とパスワードを入力するためのログインフォームと、[覚えている]チェックボックスがあります。ユーザーがフォームを送信すると、jQuery ajaxを使用してフォームが送信され、データのチェックと操作のために投稿データがログインコントローラーの送信機能に送信されます。送信機能が実行された後、ユーザーがログインしている場合はJSON配列が返されます。ユーザーが正常にログインすると、ダッシュボードに送信され、正常にログインしなかった場合は、エラーメッセージが表示されます。各ユーザー入力は、CIフォーム検証ルールに合格しなかったルールに対応するメッセージを表示します。

現在、検証に合格しなかったことを示すメッセージが表示されますが、ユーザー入力ボックスの下に合格しなかった検証ルールを表示する方法を理解するのに問題があります。

<div style="display:none"  id="message_container"><button type="button" class="close" data-dismiss="alert">&times;</button></div>
    <div class="login_container">
<?php $attributes = array('id' => 'login_form', 'class' => 'form-horizontal'); ?>
<?php echo form_open('login/submit', $attributes); ?>
    <div class="form-row row-fluid">
        <div class="spa12">
            <div class="row-fluid">
                <?php $attributes = array('class' => 'form_label span12'); ?>
                <?php echo form_label('Username<span class="icon16 icomoon-icon-user-3 right gray marginR10"></span>', 'username', $attributes); ?>
                <?php $attributes = array('name' => 'username', 'id' => 'username', 'value' => '', 'class' => 'span12 text valid'); ?>
                <?php echo form_input($attributes); ?>
            </div>
        </div>
    </div>
    <div class="form-row row-fluid">
        <div class="span12">
            <div class="row-fluid">
                <?php $attributes = array('class' => 'form_label span12'); ?>
                <?php echo form_label('Password<span class="icon16 icomoon-icon-locked right gray marginR10"></span><span class="forgot"><a href="#">Forgot your password?</a></span>', 'password', $attributes); ?>
                <?php $attributes = array('name' => 'password', 'id' => 'password', 'value' => '', 'class' => 'span12 password'); ?>
                <?php echo form_password($attributes); ?>
            </div>
        </div>
    </div>
    <div class="form-row row-fluid">                       
        <div class="span12">
            <div class="row-fluid">
                <div class="form-actions">
                    <div class="span12 controls">
                        <input type="checkbox" id="keepLoged" value="Value" class="styled" name="logged" />Keep me logged in
                        <button type="submit" class="btn btn-info right" id="loginBtn">
                            <span class="icon16 icomoon-icon-enter white"></span>
                            Login
                        </button>
                    </div>
                </div>
            </div>
        </div> 
    </div>
</form>
</div>


public function submit()
{
    $output_status = 'Notice';
    $output_title = 'Not Processed';
    $output_message = 'The request was unprocessed!';

    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|callback_check_username');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean');
    $this->form_validation->set_rules('remember', 'Remember Me', 'trim|xss_clean|integer');

    if ($this->form_validation->run() == TRUE)
    {

    }
    else
    {
        $output_status = 'Error';
        $output_title = 'Form Not Validated';
        $output_message = 'The form did not validate successfully!';
    }

    echo json_encode(array('output_status' => $output_status, 'output_title' => $output_title, 'output_message' => $output_message));
}

public function check_username($str)
{
    if (preg_match('#[0-9]#', $str) && preg_match('#[a-z]#', $str)) 
    {
        return TRUE;
    }
    $this->form_validation->set_message('check_username', 'This is not have an accepted value!');
    return FALSE;
}

編集:

"error_messages":{"username": "これは受け入れられた値ではありません!"}}

このフォームをjQueryajax関数を介して送信しているので、ifステートメントをどのように作成するかを理解しようとしています。より良いアイデアがない限り、各テキストフィールドの下に配置する必要がある複数の入力があることを考慮に入れてください。

4

1 に答える 1

1

エラーメッセージの文字列を追加するだけの場合は、次の$output_messageことができる可能性があります。

$output_message = 'The form did not validate successfully! Errors: ' . $this->form_validation->error_string();

次を使用してカスタムエラーメッセージを設定できます。

$this->form_validation->set_message('username', 'Invalid Username');

コメントに従って編集します。エラーメッセージを送り返したい場合は、次のようにしてみてください。

echo json_encode(array('output_status' => $output_status, 'output_title' => $output_title, 'output_message' => $output_message, 'error_messages' => $this->form_validation->error_array()));

そして、それらのエラーメッセージを表示するには、HTMLにプレースホルダーを追加し、そこにメッセージを追加します

CodeIgnitersフォーム検証ライブラリソース

/**
 * Get Array of Error Messages
 *
 * Returns the error messages as an array
 *
 * @return  array
 */
public function error_array()
{
    return $this->_error_array;
}

これは新しい追加のようです。今のところ、ファイルを自分の中に追加して名前を付け、その中に次のように配置するVersion 3.0ことで、フォーム検証ライブラリを拡張できます。application/libraries/MY_Form_validation.php

class MY_Form_validation extends CI_Form_validation {
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Get Array of Error Messages
     *
     * Returns the error messages as an array
     *
     * @return  array
     */
    public function error_array()
    {
        return $this->_error_array;
    }
} 
于 2012-12-19T21:13:52.463 に答える