簡體   English   中英

Phalcon 3:使用\\ Phalcon \\ Mvc \\ Model \\ Validator驗證表單數據

[英]Phalcon 3: Validating form data using \Phalcon\Mvc\Model\Validator

自從最新版本的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;
    }
}

但是,這會引發以下錯誤:

可捕獲的致命錯誤:傳遞給Phalcon \\ Mvc \\ Model :: validate()的參數1必須實現接口Phalcon \\ ValidationInterface,在C:\\ xampp \\ htdocs \\ app \\ models \\ User中給出的Phalcon \\ Mvc \\ Model \\ Validator \\ Email實例第27行的.php

這是什么意思? 我相信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);
    }
}

可以在博客中找到更多信息和補丁說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM