Php Zend_表单密码确认与.ini配置-可以这样做吗?

Php Zend_表单密码确认与.ini配置-可以这样做吗?,php,zend-framework,configuration,zend-form,Php,Zend Framework,Configuration,Zend Form,我开始编写一个ZF(v1.10.3)应用程序,并选择使用Zend_Config_Ini生成Zend_表单对象。这一切都很好,直到我不得不测试相同的密码输入。这是目前行为不端的部分: elements.password.type = password elements.password2.type = password elements.password2.options.validators.identical.validator = "Identical" elements.password

我开始编写一个ZF(v1.10.3)应用程序,并选择使用Zend_Config_Ini生成Zend_表单对象。这一切都很好,直到我不得不测试相同的密码输入。这是目前行为不端的部分:

elements.password.type = password

elements.password2.type = password
elements.password2.options.validators.identical.validator = "Identical"
elements.password2.options.validators.identical.options.token = password
它不是比较这两个元素的值,而是将password2的值与文本字符串“password”进行比较。因此,除“password”之外的任何密码都会给我以下验证错误:

The token 'password' does not match the given token '*******'
有没有正确的方法?使用Zend_Validate_与我通过谷歌找到的Zend_Config_Ini完全相同的唯一示例来自一个德国网站,似乎有人推荐了与我上面失败代码完全相同的“解决方案”

我知道在PHP代码中有很多方法可以做到这一点,但我现在已经非常专注于INI配置,我不想放弃它或破例,除非我必须这样做

[编辑]这是我的完整newUserForm.ini:

method = "post"
id = "newUserForm"
accept-charset = "utf-8"

elements.username.type = "text"
elements.username.options.label = "Username"
elements.username.options.required = true
elements.username.options.validators.alnum = "Alnum"
elements.username.options.validators.strlen.validator = "StringLength"
elements.username.options.validators.strlen.options.min = "3"
elements.username.options.validators.strlen.options.max = "32"

elements.email.type = "text"
elements.email.options.label = "Email address"
elements.email.options.required = true
elements.email.options.validators.email.validator = "EmailAddress"

elements.password.type = "password"
elements.password.options.label = "Password"
elements.password.options.required = true
elements.password.options.validators.strlen.validator = "StringLength"
elements.password.options.validators.strlen.options.min = "6"

elements.password2.type = "password"
elements.password2.options.label = "Password (confirm)"
elements.password2.options.required = true
elements.password2.options.validators.identical.validator = "Identical"
elements.password2.options.validators.identical.options.token = password

elements.submit.type = "submit"
elements.submit.options.label = "Submit"
下面是我的控制器操作:

public function indexAction()
{
    $formConfig = new Zend_Config_Ini(APPLICATION_PATH.'/configs/newUserForm.ini');
    $newUserForm = new Zend_Form($formConfig);
    $request = $this->getRequest();
    if ($request->isPost()) {
        if ($newUserForm->isValid($request->getPost())) {
            // create new user here
            $this->_helper->redirector('index', 'index');
        }
    }
    $this->view->newUserForm = $newUserForm;
}

我只是用一些类似于您的代码的东西尝试了一下,它似乎工作得很好。我使用的是ZF1.10.6。因此,要么这两个版本之间存在已修复的问题(但我在bug tracker中看不到任何类似的问题),要么代码中存在导致问题的其他内容。您可以发布完整的ini文件和表单代码吗

这是我的极简主义测试脚本,供参考。也许你可以看看这是否适合你:

<?php
$view = new Zend_View();

$config = new Zend_Config_Ini('formtest.ini');
$form = new Zend_Form($config->user->signup);
$form->setView($view);

if (!empty($_POST)) {
    var_dump($form->isValid($_POST));
    var_dump($form->getValues());
}

echo $form;

在此测试中,表单仅在password2为空或两个字段匹配时才进行验证。另外,如果它们不匹配,我得到的错误是“两个给定的令牌不匹配”,这与您的不完全匹配。不确定这是否相关。

我只是用类似于您的代码的东西尝试了一下,它似乎工作得很好。我使用的是ZF1.10.6。因此,要么这两个版本之间存在已修复的问题(但我在bug tracker中看不到任何类似的问题),要么代码中存在导致问题的其他内容。您可以发布完整的ini文件和表单代码吗

这是我的极简主义测试脚本,供参考。也许你可以看看这是否适合你:

<?php
$view = new Zend_View();

$config = new Zend_Config_Ini('formtest.ini');
$form = new Zend_Form($config->user->signup);
$form->setView($view);

if (!empty($_POST)) {
    var_dump($form->isValid($_POST));
    var_dump($form->getValues());
}

echo $form;

在此测试中,表单仅在password2为空或两个字段匹配时才进行验证。另外,如果它们不匹配,我得到的错误是“两个给定的令牌不匹配”,这与您的不完全匹配。不确定这是否相关。

我尝试了您的INI,但仍然存在相同的问题。我在上面发布了更多的代码,但我开始认为框架升级是合适的。是的,我刚刚尝试了你的ini文件,这对我来说也很好。所以试着升级ZF看看是否有帮助。我碰巧有一些旧版本的ZF,所以我只是用1.10.2再次尝试我的测试脚本,然后我遇到了与您相同的问题。因此,我相信升级ZF将解决您的问题;它开始在ZF 1.10.3和1.10.6之间的某个地方查看表单上下文。感谢大家为我节省了数小时的时间。我升级了Zend框架,一切正常。我尝试了你的INI,但仍然有同样的问题。我在上面发布了更多的代码,但我开始认为框架升级是合适的。是的,我刚刚尝试了你的ini文件,这对我来说也很好。所以试着升级ZF看看是否有帮助。我碰巧有一些旧版本的ZF,所以我只是用1.10.2再次尝试我的测试脚本,然后我遇到了与您相同的问题。因此,我相信升级ZF将解决您的问题;它开始在ZF 1.10.3和1.10.6之间的某个地方查看表单上下文。感谢大家为我节省了数小时的时间。我升级了Zend框架,一切正常。