2012-06-24 62 views
1

環境:Mac OS X的獅子,PHP 5.3.10中,MySQL 5.X,TYPO3 4.7.1,4.7.1 Extbase,流體4.7.0TYPO3 Extbase控制器/模型驗證失敗

我一直在爲struggeling幾天後在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」文本。

的問題是:我每次添加一個@Validate註釋到createAction()方法,我會得到這個錯誤: 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等)來找出這個錯誤發生的原因,以及錯誤信息沒有輸出的原因。這一切都非常奇怪...所以也許有人在這裏一個TIPP :-)

,如果我在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:當然,在我問這裏之前,我搜索了很多東西。

+0

只是一個想法,我在一家德國TYPO3論壇拾起某處。按照註釋順序亂序排列 - 並在更改後清除臨時文件和緩存。 –

+0

嘗試了一切,但沒有。我將在下週末進行進一步的調查。 – kiri

回答

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 

該訣竅

0

你應該時刻牢記的一件事是,有一個緩存,你不能通過按下按鈕來清理。 Extbase反射緩存可緩存模型和控制器中的所有註釋。所以在開發過程中,爲了避免很多挫折,禁用這個糟糕的事情。

我曾經寫過一篇博客文章吧: http://www.alexanderschnitzler.de/2012/01/disable-extbase-reflection-cache-during-development-typo3-4-6/

所以請嘗試這個第一和手動截斷數據庫表cf_extbase_ *

之後請報告,如果錯誤仍時有發生。

+1

對不起,緩存永遠不是問題。而這種緩存並不低劣。 – kiri

1

在我的情況,我解決了這個問題,通過在評論這條線Typo腳本設置:

config.tx_extbase.features.rewrittenPropertyMapper = 1