php - 法尔康 3 : Validating form data using\Phalcon\Mvc\Model\Validator

标签 php validation phalcon

由于发布了最新版本的 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\ValidationPhalcon\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/

相关文章:

javascript - 在本地使用全栈 (WAMP) 开发 React

jquery - PreventDefault 不适用于 Zurb 验证(遵守)

php - 无法使用 Phalcon 框架将 POST 项目保存到数据库

php - 从多个线程创建目录

javascript - php 喜欢和不喜欢并不是在每个帖子上都起作用

php - Magento 四舍五入货币转换

javascript - 将 validate ="required:true"添加到您的 html 中

Laravel Eloquent date_format 给定格式验证失败

php - 原生 PHP PDO 与 Phalcon PDO

php - 在 Phalcon 中附加相关模型