Archived
1
0
Fork 0

Merge branch '21-wrong-input-validators-when-creating-new-callbacks' into 'dev'

Resolve "Wrong input validators when creating new callbacks."

Closes #21

See merge request pnx/httpcb!19
This commit is contained in:
Henrik Hautakoski 2018-08-23 10:58:33 +00:00
commit 84491b1c5e
2 changed files with 42 additions and 14 deletions

View file

@ -6,4 +6,21 @@ use Phalcon\Mvc\Model;
class Base extends Model
{
/**
* {@inheritdoc}
*
* Phalcon throws an exception if no valid snapshot data is present.
*
* We override this behaviour by treating no
* snapshot data (new row) as changed.
*
* @param string|array $fieldName
* @param boolean $allFields
* @return bool
*/
public function hasChanged($fieldName = null, $allFields = false)
{
return $this->hasSnapshotData() === false
|| parent::hasChanged($fieldName, $allFields);
}
}

View file

@ -2,13 +2,12 @@
namespace App\Model\Data;
use Phalcon\Mvc\Model,
Phalcon\Validation,
use Phalcon\Validation,
Phalcon\Validation\Validator\Callback as CallbackValidator,
InvalidArgumentException,
Httpcb\OAuth\UserData\UserDataInterface;
class User extends Model
class User extends Base
{
const STATUS_ACTIVE = 'Active';
const STATUS_DELETED = 'Deleted';
@ -49,19 +48,31 @@ class User extends Model
public function validation()
{
// Validation
$validator = new Validation();
$rules = [
'username' => new CallbackValidator([
'callback' => function () {
return $this->findFirstByUsername($this->getUsername()) === false;
},
'message' => 'The username already exists.'
]),
'email' => new CallbackValidator([
'callback' => function() {
return $this->findFirstByEmail($this->getEmail()) === false;
},
'message' => 'The email address already exists.'
])
];
$validator->add('username', new CallbackValidator([
'callback' => function() { return $this->findFirstByUsername($this->getUsername()) === false; },
'message' => 'The username already exists.'
]));
$validator->add('email', new CallbackValidator([
'callback' => function() { return $this->findFirstByEmail($this->getEmail()) === false; },
'message' => 'The email address already exists.'
]));
$validation = new Validation();
foreach($rules as $field => $validator) {
return $this->validate($validator);
// Only validate changed fields.
if ($this->hasChanged($field)) {
$validation->add($field, $validator);
}
}
return $this->validate($validation);
}
/**