由于发布了最新版本的 Phalcon,文档中提供的示例似乎无法正常工作。
首先,我用 DevTools 创建了一个新模型在命令行使用 phalcon model User
。
然后,我修改validation()
函数。我的 models\User.php
文件:
use Phalcon\Mvc\Model\Validator\Email as Email;
use Phalcon\Mvc\Model\Validator\Uniqueness as Uniqueness;
use Phalcon\Mvc\Model\Validator\StringLength as StringLength;
class User extends \Phalcon\Mvc\Model
{
public function validation()
{
$this->validate(
new Email(
array(
'field' => 'email',
'message' => 'Please enter a valid email'
)
)
);
$this->validate(
new Uniqueness(
array(
'field' => 'email',
'message' => 'Your email is already in use'
)
)
);
$this->validate(
new StringLength(
array(
'field' => 'password',
'min' => 4,
'max' => 30,
'minMessage' => 'Your password must be at least 4 characters',
'maxMessage' => 'Your password must be less than 30 characters'
)
)
);
if ($this->validationHasFailed() == true) {
return false;
}
return true;
}
}
但是,这会引发以下错误:
Catchable fatal error: Argument 1 passed to Phalcon\Mvc\Model::validate() must implement interface Phalcon\ValidationInterface, instance of Phalcon\Mvc\Model\Validator\Email given in C:\xampp\htdocs\app\models\User.php on line 27
这是什么意思?我认为 Phalcon\Validation
和 Phalcon\Mvc\Model\Validator
是完全不同的小动物(后者提供更多功能)?
最佳答案
从 Phalcon 3.0 开始,Phalcon\Mvc\Model\Validation
现在已弃用,取而代之的是 Phalcon\Validation
。这样做是为了减少代码库,因为两个组件都在做类似的工作。您可以在下面找到需要更改的示例。
旧方法:
namespace Invo\Models;
use Phalcon\Mvc\Model;
use Phalcon\Mvc\Model\Validator\Email as EmailValidator;
use Phalcon\Mvc\Model\Validator\Uniqueness as UniquenessValidator;
class Users extends Model
{
public function validation()
{
$this->validate(
new EmailValidator(
[
'field' => 'email',
]
)
);
$this->validate(
new UniquenessValidator(
[
'field' => 'username',
'message' => 'Sorry, That username is already taken',
]
)
);
if ($this->validationHasFailed() == true) {
return false;
}
}
}
新方式:
namespace Invo\Models;
use Phalcon\Mvc\Model;
use Phalcon\Validation;
use Phalcon\Validation\Validator\Email as EmailValidator;
use Phalcon\Validation\Validator\Uniqueness as UniquenessValidator;
class Users extends Model
{
public function validation()
{
$validator = new Validation();
$validator->add(
'email', //your field name
new EmailValidator([
'model' => $this,
'message' => 'Please enter a correct email address'
])
);
$validator->add(
'username',
new UniquenessValidator([
'model' => $this,
'message' => 'Sorry, That username is already taken',
])
);
return $this->validate($validator);
}
}
更多信息和补丁说明可以在 the Blog 中找到.
关于php - 法尔康 3 : Validating form data using\Phalcon\Mvc\Model\Validator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39000827/