2 Stimmen

Codeigniter Rückgabe Validierungsfehler von Hilfsfunktion

Ich habe eine Hilfsfunktion, die prüft, ob ein Nutzername gültig ist.

In der Hilfedatei:

if ( ! function_exists('valid_username'))
{
    function valid_username($username)
    {
        $ci=& get_instance();
        $ci->load->database(); 

        if (empty($username) OR !preg_match("/^[a-z]([0-9a-z_-])+[0-9a-z]$/i", $username)) //Allowed a-z, 0-9, and underscores. Must end in a-z or 0-9.
        {
            $ci->form_validation->set_message('valid_username', 'Characters not valid.');
            return FALSE;
        }

        $ci->db->select('username');
        $ci->db->where('username', $username);
        $ci->db->where('activated', 1);
        $ci->db->where('banned', 0);
        $ci->db->limit(1);
        $query = $ci->db->get('users');

        if ($query->num_rows() > 0) //if user exists
        {
            return TRUE;
        }
        else
        {
            $ci->form_validation->set_message('valid_username', 'The %s does not exist.');
            return FALSE;
        }
    }
}

In meinem Controller füge ich den Helper zu meiner Formularvalidierung hinzu:

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|min_length[2]|max_length[50]|callback_valid_username');

//add callback from helper function
function valid_username($username)
{
    return valid_username($username);
}   

Dies funktioniert gut, aber ich muss den Rückruf wie folgt privat machen:

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|min_length[2]|max_length[50]|callback__valid_username');

function _valid_username($username)
{
    return valid_username($username);
}   

Nachdem ich den Rückruf privat gemacht habe, erhalte ich die folgende Meldung, wenn ich einen ungültigen Benutzernamen eingebe:

Sie können nicht auf eine Fehlermeldung zugreifen, die Ihrem Feldnamen entspricht.

Was mache ich hier falsch?

2voto

Wesley Murch Punkte 98097

Ich bin mir nicht zu 100 % sicher, warum die Privatisierung der Funktion Ihre Fehlermeldungen ruiniert hat, aber ich kann eine Abhilfe vorschlagen:

Formularvalidierungsregeln erlauben jede Funktion, die bis zu 1 Parameter akzeptiert, als Validierungs- oder Vorbereitungsregel zu verwenden. Im Grunde ist also alles, was dem aktuellen Skript zur Verfügung steht, auch als Formularvalidierungsregel verfügbar, einschließlich Ihrer valid_username() Funktion. Versuchen Sie dies (fügen Sie es einfach zu Ihren anderen Regeln hinzu):

$this->form_validation->set_rules('username', 'Username', 'valid_username');

Sie müssen also nicht brauchen die Controller-Methode als Wrapper, und Sie brauchen nicht zu verwenden callback_ .
Schauen Sie, ob das für Sie funktioniert.

Nebenbei : Ich würde vorschlagen, die function_exists() aufrufen, wenn Sie die valid_username() es sei denn, Sie sind sicher Sie möchten, dass die Funktion "überschrieben" werden kann.

0voto

Adam Mester Punkte 81

Sie können alles, was aufrufbar ist, als Regel verwenden. Auch wenn es sich um eine Funktion in einer Hilfsfunktion handelt. Überprüfen Sie es

Die richtige Syntax lautet:

$this->form_validation->set_rules(
   'username', 'Username', array('required', array('valid_username_callable', 'valid_username')));

Legen Sie in der Hilfsfunktion gegebenenfalls eine Fehlermeldung wie die folgende fest:

$CI = &get_instance();
$CI->form_validation->set_message('valid_username_callable', 'Error message');

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X