Frage

Ich habe voll funktionsfähiges Validierungsskript, mein Problem ist, dass ich keine benutzerdefinierten Fehlermeldungen erhalten kann

Hier ist meine Funktion für die Registrierung: http://pastebin.com/zf3uvxur

Und hier ist mein Nachrichtenarray: http://pastebin.com/d9guvm3n

Mein Nachrichtenskript ist in: \application\messages\registration.php Irgendwelche Vorschläge?

Entschuldigung wegen langer Code überspringen Sie einfach HTML und andere Sachen

War es hilfreich?

Lösung

Wenn Sie die vom Benutzermodell ausgelöste Validierungsausnahme aufnehmen, ist wahrscheinlich Ihr Speicherort der Nachrichtendatei falsch. Es muss: 'Registration/user.php' sein.

// ./application/messages/registration/user.php
return array(
    'name' => array(
        'not_empty' => 'Please enter your username.',
    ),
    'password' => array(
        'matches' => 'Passwords doesn\'t match',
        'not_empty' => 'Please enter your password'
    ),
    'email' => array(
        'email' => 'Your email isn\'t valid',
        'not_empty' => 'Please enter your email'
    ),
    'about-me' => array(
        'max_length' => 'You cann\'ot exceed 300 characters limit'
    ),
    '_external' => array(
        'username' => 'This username already exist'
    )
);

Entgegen Michael Ps Antwort ist Sie auch Sie sollte Speichern Sie die gesamte Validierungslogik im Modell. Ihr Controller -Code, um einen neuen Benutzer zu registrieren, sollte so einfach sein wie:

try
{
  $user->register($this->request->post());

  Auth::instance()->login($this->request->post('username'), $this->request->post('password'));
}
catch(ORM_Validation_Exception $e) 
{
  $errors = $e->errors('registration');
}

Andere Tipps

Sie sollten die Postdaten validieren, bevor Sie versuchen, Modelle zu erreichen. Ihre Validierungsregeln werden nicht ausgeführt, da Sie keine durchgeführt haben Validierungsprüfung ().

Ich würde so etwas tun wie:

// ./application/classes/controller/user
class Controller_User extends Controller
{

    public function action_register()
    {

        if (isset($_POST) AND Valid::not_empty($_POST)) {
            $post = Validation::factory($_POST)
                ->rule('name', 'not_empty');

            if ($post->check()) {
                try {
                    echo 'Success';
                    /**
                    * Post is successfully validated, do ORM
                    * stuff here
                    */
                } catch (ORM_Validation_Exception $e) {
                    /**
                    * Do ORM validation exception stuff here
                    */
                }
            } else {
                /**
                * $post->check() failed, show the errors
                */
                $errors = $post->errors('registration');

                print '<pre>';
                print_r($errors);
                print '</pre>';
            }
        }
    }
}

Registration.Php bleibt meistens gleich, mit Ausnahme der Behebung des Rechtschreibfehlers "Lenght", den Sie hatten:

// ./application/messages/registration.php
return array(
    'name' => array(
        'not_empty' => 'Please enter your username.',
    ),
    'password' => array(
        'matches' => 'Passwords doesn\'t match',
        'not_empty' => 'Please enter your password'
    ),
    'email' => array(
        'email' => 'Your email isn\'t valid',
        'not_empty' => 'Please enter your email'
    ),
    'about-me' => array(
        'max_length' => 'You cann\'ot exceed 300 characters limit'
    ),
    '_external' => array(
        'username' => 'This username already exist'
    )
);

Das Senden eines leeren "Namens" -Feldes wird dann zurückgegeben:

Array
(
    [name] => Please enter your username.
)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top