TYPO3 Extbase控制器/模型验证失败

时间:2012-06-24 17:43:57

标签: php fluid extbase typo3-flow

环境:Mac OS X Lion,PHP 5.3.10,MySQL 5.X,TYPO3 4.7.1,Extbase 4.7.1,Fluid 4.7.0

我在extbase中出现了一个奇怪的验证错误,已经连续几天了。

Tx_Foo_Controller_FeUserController包含以下两个操作:

    /**
     * @param $feUser
     * @return void
     * @dontvalidate $feUser
     */
    public function registerAction(Tx_Foo_Domain_Model_FeUser $feUser = NULL )

    /**
     * @param Tx_Foo_Domain_Model_FeUser $feUser
     * @param string $password2
     * @return void
     */
    public function createAction( Tx_Foo_Domain_Model_FeUser $feUser ,$password2 )

两项行动的内容:

$this->view->assign('feUser', $feUser);

register.html具有以下形式:

<f:flashMessages />

<f:form.errors>
    <div class="error">
        {error.message}
        <f:if condition="{error.propertyName}">
            <p>
                <strong>{error.propertyName}</strong>:
                <f:for each="{error.errors}" as="errorDetail">
                    {errorDetail.message}
                </f:for>
            </p>
        </f:if>
    </div>
</f:form.errors>        
<f:form object="{feUser}" objectName="feUser" class="form-horizontal" id="fooRegisterForm"
  controller="FeUser" action="create" noCache="1" noCacheHash="1">

     <f:form.textfield type="email" property="email" value="{feUser.email}"/>
    <f:form.textfield property="password" value=""/>
    <f:form.textfield name="password2" value=""/>    
</f:form>

并且createAction中只有一些“OK”文本。

问题是:每次我向createAction()方法添加@validate注释时,我都会收到此错误: An error occurred while trying to call Tx_Foo_Controller_FeUserController->createAction()

如果我使用自定义验证器或捆绑验证器,则没有区别。

createAction()

的示例
     * @validate $password2 Tx_Extbase_Validation_Validator_IntegerValidator

整数用于引发错误。

自定义验证器类似于Tx_Foo_Domain_Validator_FeUserValidator,您无需添加@validation标记。

自定义验证器:

/**
 * Validation of given Params
 *
 * @param Tx_Foo_Domain_Model_FeUser $feUser
 * @return void
 */
public function isValid($feUser)
{

    $this->addError('Passwords are not RSA strings', 1297418974 );
    return false;        
}

如果有退货声明则无关紧要......

我查了一下Tx_Extbase_MVC_Controller_ActionController - &gt; callActionMethod()和整个验证过程(通过var_dump和debug_backtrace等)来弄清楚这个错误发生的原因以及错误消息没有输出的原因。这一切都很奇怪......所以也许有人在这里说: - )

如果我在我的feUser类的模型中添加@validation标记,则会出现同样的错误 @validate notEmpty

通过typoscript进行Extbase配置

config.tx_extbase {
    features.rewrittenPropertyMapper = 1
    persistence{
        storagePid = 5
        enableAutomaticCacheClearing = 1
        updateReferenceIndex = 0
        classes {
            Tx_Foo_Domain_Model_FeUser {
                mapping {
                    tableName = fe_users
                    columns {
                        lockToDomain.mapOnProperty = lockToDomain
                    }
                }
            }
        }
    }
}

提前多多感谢。

PS:当然在问这里之前我搜索了很多。

3 个答案:

答案 0 :(得分:2)

在我的情况下会出现此错误,因为缺少extbase referrer。如果没有referrer,则extbase将抛出默认消息。

因为我没有形式而只是一个链接,我必须手动添加referrer

/index.php?id=10&tx_bieval_pi1[send]=1&tx_bieval_pi1[hash]=12345&tx_bieval_pi1[__referrer][actionName]=index&tx_bieval_pi1[action]=form&tx_bieval_pi1[controller]=Participation

这就是诀窍

答案 1 :(得分:1)

在我的情况下,我通过在typoscript设置中注释这一行解决了这个问题:

config.tx_extbase.features.rewrittenPropertyMapper = 1

答案 2 :(得分:0)

您应该始终牢记的一点是,有一个缓存,您无法通过按下按钮进行清理。 Extbase反射缓存会缓存模型和控制器中的所有注释。所以在开发过程中,要避免很多挫折,请禁用这个糟糕的事情。

我曾写过一篇关于它的博文: http://www.alexanderschnitzler.de/2012/01/disable-extbase-reflection-cache-during-development-typo3-4-6/

所以请先尝试一下,然后手动截断数据库表cf_extbase _ *

之后请报告错误是否仍然存在。