首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Phalcon 3:使用\Phalcon\Mvc\Model\Validator验证表单数据

Phalcon 3:使用\Phalcon\Mvc\Model\Validator验证表单数据
EN

Stack Overflow用户
提问于 2016-08-17 15:33:43
回答 1查看 3.1K关注 0票数 5

由于Phalcon的最新版本已经发布,文档中提供的示例似乎无法正常工作。

首先,我使用DevTools在命令行使用phalcon model User创建了一个新的模型。

然后,修改validation()函数。我的models\User.php文件:

代码语言:javascript
复制
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;
    }
}

但是,这会引发以下错误:

可捕获的致命错误:传递给C:\xampp\htdocs\app\models\User.php \Mvc\Model::()的参数1必须实现接口Phalcon\ValidationInterface,Phalcon\Mvc\Model\的实例在27上给出

这是什么意思?我认为Phalcon\ValidationPhalcon\Mvc\Model\Validator完全不同(后者提供了更多的功能)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-17 16:27:40

从Phalcon3.0开始,Phalcon\Mvc\Model\Validation就不再支持Phalcon\Validation了。这样做是为了减少代码库,因为这两个组件都在执行类似的工作。下面你可以找到一些需要改变的例子。

旧方式:

代码语言:javascript
复制
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;
        }
    }
}

新途径:

代码语言:javascript
复制
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);
    }
}

更多的信息和补丁说明可以在博客中找到。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39000827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档