Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

phalcon validate form fields without saving to database

Am in a need to validate form fields and manipulate them with out saving to database. This is what i have done

In controller

<?php
use Phalcon\Mvc\Model\Criteria;
use Phalcon\Paginator\Adapter\Model as Paginator;
use Phalcon\Mvc\View;

class UsersController extends ControllerBase {

    public function loginAction() {

        if($this->request->isPost()) {

            $user = new Users();
            $validates = $user->validation($this->request->getPost());  
            // now validation works fine, but cancelOnFail in model doesn't seems to work, 

            if($validates) {
                echo 'valid inputs';
            }
            else {
                print_r($user->getMessages());
                // now how can we show these error messages below the corresponding input fields in the view.
                // we would also like to show error message as follows, if a field has more than one validation conditions,
                // Eg: say username have notempty and valid e-mail validation set in model so if username is empty show only not empty message,
                // similarly if username is not empty and if its not a valid e-mail , show not valid email message.
            }
            exit();
        }
    }

}
?>   

Am trying to validate from the Model and it looks like as follows

<?php
use Phalcon\Mvc\Model\Validator;
use Phalcon\Mvc\Model\Validator\PresenceOf;
use Phalcon\Mvc\Model\Validator\Email;

class Users extends \Phalcon\Mvc\Model {

    public function validation() {

        $this->validate(new PresenceOf(
            array(
               'field'  => 'username',
               'message' => 'Username is required.',
               'cancelOnFail' => true
            )
        ));

        $this->validate(new Email(
            array(
                'field'  => 'username',
                'message' => 'Username must be a valid e-mail.'
            )
        ));

        $this->validate(new PresenceOf(
            array(
                'field'  => 'password',
                'message' => 'Password is required.'
            )
        ));

        return $this->validationHasFailed() != true;
    }
}
?>

My view file is as follows

 <?php 
    echo $this->tag->form(array("users/login", "role" => "form"));
    echo $this->tag->textField(array('username', 'class' => 'form-control', 'placeholder' => 'E-mail', 'type' => 'email', 'tabindex' => 1)); 
    echo $this->tag->passwordField(array('password', 'class' => 'form-control', 'placeholder' => 'Password', 'type' => 'password', 'tabindex' => 2)); 
    echo $this->tag->submitButton(array('Login','class' => 'btn btn-sm btn-success btn-block', 'tabindex' => 5)); 
?>
</form>

How can i achieve the following,

1) Check if form fields validates correctly as given in the Model from the Controller.

2) Am not looking to save the form data, only validate it.

3) Show the corresponding error messages below the input field in the view.

Thankz

like image 739
Scrappy Cocco Avatar asked Jul 03 '26 03:07

Scrappy Cocco


1 Answers

You need to create the form, bind your entity and then validate on post request. See http://docs.phalconphp.com/en/latest/reference/forms.html#validation

EDIT: To display error messages you can do this in your controller

// ...
$messages = array();
foreach ($user->getMessages() as $message) {
    $messages[$message->getField()] = $message->getMessage();
}

$this->view->messages = $messages;
//...

now you have $messages in your view.

I think you really should use a form in this case. You trying to validate a user login in model, but is a simple form validation. In model, you validates business rules of users in the app.

like image 57
ferodss Avatar answered Jul 04 '26 17:07

ferodss



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!