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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With