这可能是一个关于ZF2的非常简单的问题,但是我无法理解它。所以请原谅我。
假设我创建一个用户注册表单。它有2个输入:用户名和密码。在模型中,我创建了一个类User,它有$username和$password变量,以及这两个变量的setter + getter。
我的问题是如何传递什么用户写入HTML输入到相应的设置?显然,它与$_POST数组有关。但是在《ZF2》内部是如何完成的呢?我应该使用什么将用户名输入传递给实际的$username变量?
您需要使用一个hydrator来填充模型的数据。Zend'Stdlib'Hydrator'ClassMethods
就是一个例子,它接受一个数组(比如post数据)并调用目标对象的setter。
$hydrator = new 'Zend'Stdlib'Hydrator'ClassMethods;
$user = new 'User'Model'User;
$data = [
'username' => 'foo',
'password' => 'bar',
];
$hydrator->hydrate($data, $user);
echo $user->getUsername(); // foo
请记住,您需要确保您对所有用户提供的数据(例如散列密码)以及验证表单数据的正确性(例如确保密码的最小复杂性,或确保用户名的有效电子邮件地址)进行消毒。
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教程给出了该过程的详细解释,如果您还没有创建示例项目,我强烈建议您这样做。
如果您的表单正在发布,则值将存储在以输入id作为键的帖子中。你可以用几种方法从那里访问它们。
$this->getRequest()
将得到一切,然后您可以使用->getParams()
来获得所有的post参数,甚至->getParam('username')
来获得您需要的参数。