1

环境: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 无效
     * @dontvalidate $feUser
     */
    公共函数 registerAction(Tx_Foo_Domain_Model_FeUser $feUser = NULL )

    /**
     * @param Tx_Foo_Domain_Model_FeUser $feUser
     * @param 字符串 $password2
     * @return 无效
     */
    公共函数 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;        
}

有没有return语句没关系...

我查看了 Tx_Extbase_MVC_Controller_ActionController -> callActionMethod() 和整个验证过程(通过 var_dump 和 debug_backtrace 等),以找出为什么会发生此错误以及为什么错误消息没有输出。这一切都很奇怪......所以也许有人在这里有小费:-)

如果我在我的 feUser 类的模型中添加一个@validation 标记,例如@validate notEmpty,也会发生同样的错误

通过打字稿进行 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:当然,我在这里问之前用谷歌搜索了很多。

4

3 回答 3

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

那成功了

于 2012-08-06T08:28:53.583 回答
1

就我而言,我通过在打字稿设置中评论这一行来解决这个问题:

config.tx_extbase.features.rewrittenPropertyMapper = 1

于 2013-09-24T09:28:25.543 回答
0

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

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

所以请先尝试这个并手动截断数据库表 cf_extbase_*

之后,如果错误仍然存​​在,请报告。

于 2012-07-02T18:19:15.450 回答