Php 表格不';我无法获得它的价值观。这正常吗?

Php 表格不';我无法获得它的价值观。这正常吗?,php,zend-framework,zend-form,Php,Zend Framework,Zend Form,这是我第一次注意到这一点,这让我有点吃惊 我有一个带有简单文本元素的zend_表单 $name = new Zend_Form_Element_Text('name'); $name->setLabel('Name'); $this->addElement($name); 奇怪的是,当我提交表单并尝试读取表单本身中的值时(我正在那里进行一些调试,而不是在控制器中进行调试),$name->getValue()不起作用,但是直接的$\u POST起作用 echo $name->g

这是我第一次注意到这一点,这让我有点吃惊

我有一个带有简单文本元素的zend_表单

$name = new Zend_Form_Element_Text('name');
$name->setLabel('Name');
$this->addElement($name);
奇怪的是,当我提交表单并尝试读取表单本身中的值时(我正在那里进行一些调试,而不是在控制器中进行调试),
$name->getValue()
不起作用,但是直接的$\u POST起作用

echo $name->getValue(); //gives blank
echo $_POST['name'];    //gives the right value
这正常吗?表单如何没有它的值?我认为用$field->getValue()读取它们比直接访问$u POST值要好


第二个问题是,要读取表单中的值,是否有比直接从$\u POST访问更好的方法?

您需要将数据显式传递到表单,因为ZF不知道从何处获取数据:

if ($form->isValid($_POST)) { // access values }


您需要显式地将数据传递给表单,因为ZF不知道从何处获取数据:

if ($form->isValid($_POST)) { // access values }


不。坚持使用
$\u POST
$\u GET
。老实说,我不明白为什么要使用Zend从表单中创建和获取数据,而使用纯PHP更容易做到这一点

<?php if( !isset( $_POST['name'] ) ): ?>
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
    <label for="name">Name:</label> <input type="text" name="name" id="name" />
</form>
<?php else: ?>
Value = <?= $_POST['name'] ?>
<?php endif; ?>



我想这都是你的编码风格。我更喜欢上面的方法,但是如果你想把逻辑和HTML分开,那么Zend当然是一个选择。

不。坚持使用
$\u POST
$\u GET
。老实说,我不明白为什么要使用Zend从表单中创建和获取数据,而使用纯PHP更容易做到这一点

<?php if( !isset( $_POST['name'] ) ): ?>
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
    <label for="name">Name:</label> <input type="text" name="name" id="name" />
</form>
<?php else: ?>
Value = <?= $_POST['name'] ?>
<?php endif; ?>




我想这都是你的编码风格。我更喜欢上面的方法,但是如果您想将逻辑与HTML分开,那么Zend肯定是一个选项。

因为Zend表单执行额外的验证和过滤器。另外-如果表单无效,您忘了实现值还原。@zerkms点。我有点直言不讳地反对Zend框架+1到@PhpMyCoder,以绅士风度回退。披露:我是ZF的忠实粉丝我完全理解。我想我更喜欢自己动手做。如果我了解内部工作原理,我会更容易些DBecause zend form执行额外的验证和筛选。另外-如果表单无效,您忘了实现值还原。@zerkms点。我有点直言不讳地反对Zend框架+1到@PhpMyCoder,以绅士风度回退。披露:我是ZF的忠实粉丝我完全理解。我想我更喜欢自己动手做。如果我了解内部工作原理,我会更容易些这很有效。但是,表单怎么可能无法访问其值呢?它需要将这些值提供给验证器和过滤器。实际上,我正在做的是将值传递给自定义筛选器。我以为过滤器会自动从它添加到的字段中获取$value,但这不起作用,所以我自己将$value传递给过滤器。当然,如果表单可以读取它自己的值,那么我就可以直接传递它,而不需要涉及控制器。我可能会发布另一个关于过滤器的问题。可能我在那里也做错了。“但实际上,表单怎么可能没有访问其值的权限呢?”——它确实可以以显式方式访问您传递的数据。ZF无法预测从何处获取数据:$\u POST、$\u GET甚至从文件中获取数据。所以我很好奇,我可以在if验证后显式地将值传递给表单。但是如果我绕过这个,直接从$u POST访问它呢。那么糟糕吗?它有什么缺点吗?请注意,我将这些数据提供给一个过滤器,该过滤器将对其进行轻微的修改,因此我并不是直接将该输入用于屏幕或任何类似的内容。@jblue:我认为这是不好的。我认为如果您使用zend表单,那么您应该使用常规的ZF表单工作流:传递数据-验证/过滤数据-从表单中提取数据。您不应该在整个代码中都依赖于数据源,相反,ZF为您提供了一次引用$\u POST的机会(在传递到
isValid()
stage时),之后您就不必关心数据源了。@jdblue:如果您需要一些元素值来过滤它,然后,在您完成
isValid($data)
getValues()
之后,似乎应该从表单元素中删除过滤器并作为一次性应用。或者,如果您确实需要知道未过滤的值,可以从
$request->getPost()->myelement
获取它。但是我倾向于坚持标准的
isValid()
getValues()
流。这很有效。但是,表单怎么可能无法访问其值呢?它需要将这些值提供给验证器和过滤器。实际上,我正在做的是将值传递给自定义筛选器。我以为过滤器会自动从它添加到的字段中获取$value,但这不起作用,所以我自己将$value传递给过滤器。当然,如果表单可以读取它自己的值,那么我就可以直接传递它,而不需要涉及控制器。我可能会发布另一个关于过滤器的问题。可能我在那里也做错了。“但实际上,表单怎么可能没有访问其值的权限呢?”——它确实可以以显式方式访问您传递的数据。ZF无法预测从何处获取数据:$\u POST、$\u GET甚至从文件中获取数据。所以我很好奇,我可以在if验证后显式地将值传递给表单。但是如果我绕过这个,直接从$u POST访问它呢。那么糟糕吗?它有什么缺点吗?请注意,我将这些数据提供给一个过滤器,该过滤器将对其进行轻微的修改,因此我并不是直接将该输入用于屏幕或任何类似的内容。@jblue:我认为这是不好的。我认为如果您使用zend表单,那么您应该使用常规的ZF表单工作流:传递数据-验证/过滤数据-从表单中提取数据。相反,您不应该在整个代码中依赖数据源