PHP表单发布,自动映射到对象(模型绑定)

时间:2010-06-02 14:10:57

标签: php model-view-controller

我做了很多ASP.NET MVC 2开发,但是我正在处理一个小项目,需要在PHP中完成。

PHP内置了什么模型绑定,将表单字段映射到类?我的一些PHP代码目前看起来像这样:

class EntryForm
{
    public $FirstName = "";
    public $LastName = "";
}

    $EntryForm = new EntryForm();

if ($_POST && $_POST["Submit"] == "Submit")
{
    $EntryForm->FirstName = trim($_POST["FirstName"]);
    $EntryForm->LastName = trim($_POST["LastName"]);
}

在典型的PHP安装中是否有内置的功能可以像在ASP.NET MVC中找到的那样进行映射,还是需要额外的框架呢?

4 个答案:

答案 0 :(得分:10)

不是原生的,而是一个更好的解决方案,允许您使用自己的类或标准类......

function populateWithPost ($obj = NULL)
{
  if(is_object($obj)) {

  } else {
      $obj = new StdClass ();
  }

  foreach ($_POST as $var => $value) {
      $obj->$var = trim($value); //here you can add a filter, like htmlentities ...
  }

  return $obj;
}

然后您就可以使用它:

class EntryForm
{
    public $FirstName = "";
    public $LastName = "";
}

$entry = populateWithPost(new EntryForm());

 $obj = populateWithPost();

答案 1 :(得分:1)

内置于PHP?否。

框架回答你提示你需要去哪一个(毕竟,ASP.NET也是一个框架)

答案 2 :(得分:1)

您正在寻找的是ORM(对象关系映射)层。 PHP有一对,其中一个是Doctrine。也就是说,mahomedalidp的答案非常方便用PHP完成任务。

答案 3 :(得分:0)

没有内置于PHP中。但是在EntryForm类中很容易实现。您可以将public function populate($post)添加到EntryForm并将其传递给$ _POST变量。它会遍历,如果class属性存在,请设置它。实际上,您可以构建一个实现populate()的抽象类,并使用您的EntryForm或您想要的任何其他形式扩展它。当然,你也想要对输入进行消毒。