Пост формы PHP, автоматически сопоставляемый с объектом (привязка модели) - PullRequest
13 голосов
/ 02 июня 2010

Я много занимаюсь разработкой 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 ]

10 голосов
/ 02 июня 2010

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

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 голос
/ 02 июня 2010

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

1 голос
/ 02 июня 2010

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

Ответ фреймворка, на который вы намекаете, - это то, к чему вам нужно обратиться (в конце концов, ASP.NET тоже фреймворк)

0 голосов
/ 02 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...