PHP-сообщение формы, автоматическое сопоставление объекта (привязка модели)

Я занимаюсь разработкой 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, или для этого требуется дополнительная структура?

Ответы

Ответ 1

Не родное, но лучшее решение, позволяющее использовать ваши собственные классы или стандартный класс...

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();

Ответ 2

Построено в PHP? Нет.

Ответ на фреймворк, на который вы намекаете, - это то, где вам нужно пойти для этого (в конце концов, ASP.NET тоже является каркасом)

Ответ 3

То, что вы ищете, это слой ORM (привязка к объектам). PHP имеет пару, одна из которых Доктрина. Тем не менее, ответ mahomedalidp очень удобен для того, чтобы все было сделано на PHP.

Ответ 4

Для этого ничего не встроено в PHP. Но легко реализовать в вашем классе EntryForm. Вы можете добавить public function populate($post) в EntryForm и передать ему переменную $_POST. Он будет прокручиваться, и если атрибут класса существует, установите его. Фактически вы можете создать абстрактный класс, который реализует populate() и расширяет его с помощью EntryForm или любой другой формы, которую вы хотите. Разумеется, вы тоже захотите санировать вход.