1

我过去曾使用过 cakePHP,并且喜欢他们构建模型系统的方式。我想结合他们在扩展模型之间处理验证的想法。

这是一个例子:

 class users extends model {
     var $validation = array(
         "username" => array(
             "rule" => "not_empty"
         ),
         "password" => array(
             "rule" => "valid_password"
         )
     );

     public function create_user() {
         if($this->insert() == true) {
             return true;
         }
     }
 }



 class model {

     public function insert() {
         if(isset($this->validation)) {
             // Do some validation checks before we insert the value in the database
         }
         // Continue with the insert in the database
     }
 }

this 的问题是模型无法获取验证规则,因为它是父类。有没有一种方法可以将 $validation 属性传递给父类,而无需通过 create_user() 方法作为参数显式传递验证规则?

编辑:

此外,避免通过 __construct() 方法将其传递给父类。是否有另一种方法不会在我的用户类中导致大量额外代码,但让模型类完成大部分工作(如果不是全部?)

4

2 回答 2

1

如果实例是 a $user,您可以简单地参考$this->validationin model::insert()

在这种情况下,它似乎也model应该是抽象的,以防止实例化和混淆。

于 2013-03-19T22:05:25.383 回答
0

model在名为的类中创建一个新的抽象方法:isValid()每个派生类都必须实现该方法,然后在函数期间调用该方法insert()

model班级:

class model {

 abstract protected function isValid();

 public function insert() {
     if($this->isValid())) { // calls concrete validation function

     }
     // Continue with the insert in the database
 }

}

user班级:

class users extends model {
 var $validation = array(
     "username" => array(
         "rule" => "not_empty"
     ),
     "password" => array(
         "rule" => "valid_password"
     )
 );

 protected function isValid() {
    // perform validation here
    foreach ($this->validation) { //return false once failed }

    return true;
 }

 public function create_user() {
     if($this->insert() == true) {
         return true;
     }
 }
}
于 2013-03-19T22:11:59.507 回答