用于从表单获取值的动态表单 class

Dynamic form class for getting value from a form

我正在使用 Form class 以静态方式获取表单的值。一切都很好。但我想动态地做。我想要一个表格 class 来完成不同表格的工作。在 display() 方法中,我得到了名称、电子邮件、密码、phone 等的值。我希望当有更多或更少的值或以另一种形式存在时,表单 class 会为我完成这项工作动态地。我该怎么做?

//This is Register.php
public function display()
{
    Form::setname($_POST['name']);
    Form::email($_POST['email']);
    Form::password($_POST['pass']);
    Form::repassword($_POST['rpass']);
    Form::phone($_POST['phone']);

    list($name,$b,$c,$d,$e)=Form::getall();
}

<?php 
//This is Form.php
class Form
{
    private $name;
    private $email;
    private $pass;
    private $rpass;
    private $phone;

    public static function setname($name)
    {
        $this->name=$name; //  Using $this when not in object context 
    }

    public static function email($email)
    {
        $this->email=$email;
    }

    public static function password($pass)
    {
        $this->pass=$pass;
    }

    public static function repassword($rpass)
    {
        $this->rpass=$rpass;
    }

    public static function phone($phone)
    {
        $this->phone=$phone;
    }

    public static function getall()
    {
        $a=$this->name;
        $b=$this->email;
        $c=$this->pass;
        $d=$this->rpass;
        $e=$this->phone;
        return [$a,$b,$c,$d,$e];
    }
}

您可以尝试向 class 添加一组新变量,就像

$dynamic_form_elements = array();
public static function dynamic_element($element, $value) {
    $this->dynamic_form_elements[$element] = $value;
}

之后,只需将 $dynamic_form_elements 变量放入您的列表中,以便在 getAll() 方法中返回。

return [$a,$b,$c,$d,$e,$dynamic_form_elements];

要做到这一点,您需要做一些事情。首先,避免静电。从概念上讲,每个表单都应该由它自己的对象表示。第二,使用PHP提供的魔术方法。这些非常强大,如果使用得当,可以实现一些疯狂的好设计。第三,对单个表单中的所有输入元素使用具有单个名称的数组表示法,例如,对于表单元素的名称:使用类似于:User[email] 而不仅仅是 emailUser[name] 而不仅仅是 name 等等。

牢记这些,class 的形式可以如下所示:

class Form{

    private $variables = array();

    public function __get($name){
        $returnValue = null;
        if(isset($this->variables[$name])){
            $returnValue = $this->variables[$name];
        }
        return $returnValue;
    }

    public function __set($name, $value){
        $this->variables[$name] = $value;
    }

    public function getAll(){
        return $this->variables;
    }

}

这对于您需要的功能应该足够了。此外,您可以添加一个我发现非常有用的便利功能。这可以命名为 setAttrubitessetAll 函数。它会是这样的:

public function setAll($allData){
    foreach($allData as $key => $data){
        $this->variables[$key] = $data;
    }
}

这将允许您使用如下命令一次性设置所有变量:

$form = new Form();
$form->setAll($_POST['User']); 

为了实现这一点,正如我之前提到的,所有输入元素都应该分组到一个数组中。所以输入元素将是这样的:

<input type="text" name="User[name]" />
<input type="text" name="User[email]" />

希望你能领悟...

工作正常我只需要 Form calss 中的 setvalue 和 getvalue 方法。每次在 display() 中针对特定字段调用它 method.Is 很好还是有更好的方法?

class Form{

private $value;

public  function setvalue($value)
{
    $this->value=$value;
}

public function getvalue()
    {
        $a=$this->value;
        return $a;
    }
}
public function display()
{
$newform=new Form();
$newform->setvalue($_POST['name']);
$name=$newform->getvalue();

$newform->setvalue($_POST['email']);
$b=$newform->getvalue();

$newform->setvalue($_POST['pass']);
$c=$newform->getvalue();
$newform->setvalue($_POST['rpass']);
$d=$newform->getvalue();
$newform->setvalue($_POST['phone']);
$e=$newform->getvalue();
}