2013-09-30 67 views
2

我正在使用Model :: validation()調用進行模型驗證。Phalcon Mvc Model :: validation()和非模型驗證程序

看起來型號::的validate()只有當爾康\確認\驗證用來接受來自爾康\的mvc \型號\驗證命名空間的驗證和崩潰:

class User extends Phalcon\Mvc\Model 
{ 
    protected $email = 'invalid @email.*'; 

    public function validation() 
    { 
     // Validator from Model namespace 
     $this->validate(new Phalcon\Mvc\Model\Validator\Uniqueness(array(
      "field" => "email", 
      "message" => "The email is already registered" 
     ))); 

     // Validator from Validation namespace - causes "BadMethodCallException" - "Wrong number of parameters". 
     $this->validate(new Phalcon\Validation\Validator\Between(array(
      "field" => "counter", 
      'minimum' => 10, 
      'maximum' => 20, 
      "message" => "Invalid value" 
     ))); 

     $validationHasFailed = $this->validationHasFailed(); 
     return $validationHasFailed != true; 
    } 
} 

這導致BadMethodCallException - 錯誤的參數數量錯誤

我的下一個念頭,就是改變代碼如下:

class User extends Phalcon\Mvc\Model 
{ 
    protected $email = 'invalid @email.*'; 

    public function validation() 
    { 
     // Omitting Uniqueness validator. 

     $validation = new Phalcon\Validation(); 
     $validation->add('email', new Phalcon\Validation\Validator\Email); 
     $this->validate($validation); 

     $validationHasFailed = $this->validationHasFailed(); 
     return $validationHasFailed != true; 
    } 
} 

然而,該代碼無法檢測到的電子郵件字段(沒有發生校驗錯誤)的無效值。

與此同時,下面的電子郵件驗證按預期工作:

$validation = new Validation(); 
$validation->add('email', new EmailValidator()); 
$messages = $validation->validate([ 
    'email' => 'bad email @...', 
], 'email'); 

問:

我是否可以使用非模型驗證的型號::驗證()調用?

謝謝!

回答

9

那麼,我的問題的答案是NO。

這裏有一個解決方法:

public function validation() 
{ 
    /** 
    * Validate email address. 
    * 
    * Looks like there's a difference between model- and non-model validators. 
    */ 
    $emailField = 'email'; 
    $validation = new Phalcon\Validation; 
    $validation->add($emailField, new Phalcon\Validation\Validator\Email); 

    /** 
    * @var Phalcon\Validation\Message\Group 
    */ 
    if (sizeof($messages = $validation->validate([ 
     $emailField => $this->email, 
    ], $emailField))) { 
     $message = new Phalcon\Mvc\Model\Message('Invalid email address.', $emailField); 
     $this->appendMessage($message); 
    } else { 
     /** 
     * Only when non-model validators don't fail, get on with model validators 
     * 
     * Validate email uniqueness. 
     */ 
     $this->validate(new Phalcon\Mvc\Model\Validator\Uniqueness([ 
      'field' => $emailField, 
      'message' => 'The email is already registered' 
     ])); 

    } 
    $validationHasFailed = $this->validationHasFailed(); 

    return $validationHasFailed != true; 
} 

希望有人認爲這是有用的。