Zend 框架(zf2)如何将输入值传递给模型?
Zend framework (zf2) how the input values are passed to the model?
这可能是一个关于 ZF2 的非常简单的问题,但我无法理解它。所以请多多包涵。
假设我创建了一个用户注册表单。它有 2 个输入:用户名和密码。在模型中,我创建了一个 class 用户,它有 $username 和 $password 变量,以及两个变量的 setters + getters。
我的问题是如何将用户写入 HTML 输入的内容传递给相应的设置器?显然,它与 $_POST 数组有关。但它在 ZF2 内部是如何完成的呢?我应该使用什么将用户名输入传递给实际的 $username 变量?
如果您的表单是 posting,值将存储在 post 中,输入 ID 作为键。您可以使用几种方法从那里访问它们。
$this->getRequest()
将获取所有内容,然后您可以使用 ->getParams()
获取所有 post 参数,甚至可以使用 ->getParam('username')
获取您需要的参数。
您将需要使用水化器来填充模型的数据。一个示例是 Zend\Stdlib\Hydrator\ClassMethods
,它接受一个数组(例如 post 数据)并调用目标对象的设置器。
$hydrator = new \Zend\Stdlib\Hydrator\ClassMethods;
$user = new \User\Model\User;
$data = [
'username' => 'foo',
'password' => 'bar',
];
$hydrator->hydrate($data, $user);
echo $user->getUsername(); // foo
但是请记住,您需要确保清理 所有 用户提供的数据(例如散列密码)以及 validate 表单数据正确(例如,确保密码的最低复杂性,或确保用户名的有效电子邮件地址)。
Zend\Form
组件旨在集成所有这些要求,并允许您构建表单 HTML 输出。您可以将 hydrator 附加到表单上,一旦经过验证,您就可以检索一个构造的实体,该实体将使用 $form->getData()
.
用户提供的数据进行填充
$request = $this->getRequest();
if ($request->isPost()) {
$form->setData($request->getPost());
if ($form->isValid()) {
// hydration occurs internally and returns our user populated
$user = $form->getData();
if ($user instanceof User) {
echo $user->getUsername();
}
}
}
ZF2 tutorial gives a detailed explanation of the process,如果您还没有创建示例项目,我强烈建议您这样做。
这可能是一个关于 ZF2 的非常简单的问题,但我无法理解它。所以请多多包涵。
假设我创建了一个用户注册表单。它有 2 个输入:用户名和密码。在模型中,我创建了一个 class 用户,它有 $username 和 $password 变量,以及两个变量的 setters + getters。
我的问题是如何将用户写入 HTML 输入的内容传递给相应的设置器?显然,它与 $_POST 数组有关。但它在 ZF2 内部是如何完成的呢?我应该使用什么将用户名输入传递给实际的 $username 变量?
如果您的表单是 posting,值将存储在 post 中,输入 ID 作为键。您可以使用几种方法从那里访问它们。
$this->getRequest()
将获取所有内容,然后您可以使用 ->getParams()
获取所有 post 参数,甚至可以使用 ->getParam('username')
获取您需要的参数。
您将需要使用水化器来填充模型的数据。一个示例是 Zend\Stdlib\Hydrator\ClassMethods
,它接受一个数组(例如 post 数据)并调用目标对象的设置器。
$hydrator = new \Zend\Stdlib\Hydrator\ClassMethods;
$user = new \User\Model\User;
$data = [
'username' => 'foo',
'password' => 'bar',
];
$hydrator->hydrate($data, $user);
echo $user->getUsername(); // foo
但是请记住,您需要确保清理 所有 用户提供的数据(例如散列密码)以及 validate 表单数据正确(例如,确保密码的最低复杂性,或确保用户名的有效电子邮件地址)。
Zend\Form
组件旨在集成所有这些要求,并允许您构建表单 HTML 输出。您可以将 hydrator 附加到表单上,一旦经过验证,您就可以检索一个构造的实体,该实体将使用 $form->getData()
.
$request = $this->getRequest();
if ($request->isPost()) {
$form->setData($request->getPost());
if ($form->isValid()) {
// hydration occurs internally and returns our user populated
$user = $form->getData();
if ($user instanceof User) {
echo $user->getUsername();
}
}
}
ZF2 tutorial gives a detailed explanation of the process,如果您还没有创建示例项目,我强烈建议您这样做。