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
     }
 }

これの問題は、モデルが親クラスであるため、モデルが検証ルールを取得する方法がないことです。create_user() メソッドをパラメーターとして明示的に検証ルールを渡すことなく、 $validation プロパティを親クラスに渡す方法はありますか?

編集:

また、 __construct() メソッドを介して親クラスに渡すことを避けます。これを行う別の方法で、ユーザー クラス内に多くの余分なコードを作成せず、モデル クラスにほとんどの作業を行わせる方法はありますか (すべてではない場合)。

4

2 に答える 2

1

インスタンスがの場合は、で$user参照できます。$this->validationmodel::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 に答える