0

簡単な質問があります。私は OO サイトを開発および設計してきましたが、これまでのところ OOP ではないプロセス全体の一部があります。それがフォームを処理するスクリプトです。

私は周りを検索しましたが、答えが見つからなかったので、それが可能かどうかは完全にはわかりません。うまくいけば、皆さんが私のために明確にすることができます.

私のフォームは、login.php などの標準スクリプトに投稿します。フォームをクラス、またはより正確には、そのクラス内のメソッドに投稿したいと考えています。これはまったく可能ですか?

どうもありがとう、ジェイ

4

2 に答える 2

4

クラスに直接投稿することはできませんが、そのクラスの関数にパラメーターを送信できます。次に例を示します。

$class = new Forms();
$class->processForm($_POST, 'login');

// it would call `processForm()` from `Forms` class and send `$_POST` and `login` as parameters 

__construct()または、次の関数を使用できます。

class Forms {

    function __construct($array, $type){
        switch($type){
            case 'login':
                $this->processLogin($array);
                break;
            //......
        }
    }

    function processLogin($array){
        // do something with $array;
    }

}

$class = new Forms($_POST, 'login');
于 2012-10-05T12:32:00.510 に答える
0

このような基本クラスを使用して、コンストラクター段階でそれ自体を自動処理し、指定されたフィールドで特定のフォームを継承できます。いくつかのレンダリング コードも忘れないでください。(これは非常にシステム固有であるため、ここでは表示されません。)

class Form {

    protected $name = "generic_form";
    protected $method = "POST";
    protected $url = "";

    protected $fields = array();
    protected $data = array();
    protected $submits = array();
    protected $errors = array();
    protected $required = null;
    protected $submitsrequired = array();


    public function __construct() {
        $this->FillSubmits();
        $this->FillData(); 
        foreach($this->fields as $key => $value) {
            if(isset($this->data[$value["name"]])) {
                $this->fields[$key]["value"] = $this->data[$value["name"]];
            }
        }
        $action = null;
        foreach($this->submits as $key => $value) {
            if (isset($this->data[$value["name"]])) {
                $action = $value["name"];
                break;
            }

        }
        if ($action === null) {
            return;
        }
        if (!$this->innerValidate($action)) {
            return;
        }
        $this->Commit($action);
    }

    protected function Validate($action, $name, $value) {
      // Put validation code here
    }

    protected function Commit($action) {
      // Put code to execute when form is correctly filled here
    }

    protected function FillSubmits() {
        foreach($this->fields as $field) {
            if($field["type"] == "submit")
                $this->submits[] = $field;
        }

    }

    protected function FillData() {
        foreach($this->fields as $field) {
            if(isset($_POST[$field["transmitname"]]))
                $this->data[$field["name"]] = $_POST[$field["transmitname"]];
        }
    }

    protected function innerValidate($action) {
        $retval = true;
        if ($this->required !== null) {
            foreach($this->required as $value) {
                if (!isset($this->data[$value])) {
                    return false;
                }
            }
        }
        if (isset($this->submitsrequired[$action])) {
            foreach($this->submitsrequired[$action] as $value) {
                if (!isset($this->data[$value])) {
                    return false;
                }
            }
        }
        foreach($this->data as $key => $value) {
            if(is_callable(array($this, "Validate_".$key))) {
                $retval &= call_user_func(array($this, "Validate_".$key),$action, $value);
            }
            else {
                $retval &= $this->Validate($action, $key, $value);
            }
        }
        return $retval;
    }



}
于 2012-10-05T12:45:42.163 に答える