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 には、次の 2 つのアクションが含まれています。

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

    /**
     * @param Tx_Foo_Domain_Model_FeUser $feUser
     * @param 文字列 $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

整数は、エラーを引き起こすために使用されます。

カスタムバリデーターは、@validation タグを追加する必要がない Tx_Foo_Domain_Validator_FeUserValidator のようなものです。

カスタムバリデータ:

/**
 * 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 などを介して) を調べて、このエラーが発生する理由と、エラー メッセージからの出力がない理由を突き止めました。それはすべて非常に奇妙です...だから、誰かがここにヒントを持っているかもしれません:-)

@validate notEmpty のような feUser クラスのモデルに @validation タグを追加すると、同じエラーが発生します

タイポスクリプトによる 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 に答える
0

常に心に留めておくべきことの 1 つは、キャッシュがあり、ボタンを押してもクリーニングできないことです。Extbase リフレクション キャッシュは、モデルとコントローラーにあるすべての注釈をキャッシュします。したがって、開発中は、多くのフラストレーションを避けるために、このくだらないことを無効にしてください。

私はかつてそれについてブログ投稿を書きました: http://www.alexanderschnitzler.de/2012/01/disable-extbase-reflection-cache-during-development-typo3-4-6/

そのため、最初にこれを試してから、データベース テーブルを手動で切り捨ててください cf_extbase_*

その後、エラーが引き続き発生する場合は報告してください。

于 2012-07-02T18:19:15.450 に答える