Ошибка проверки контроллера / модели TYPO3 Extbase

Среда: 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 содержит только текст «ОК».

Проблема в следующем: каждый раз, когда я добавляю аннотацию @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;        
}

Не имеет значения, есть ли оператор возврата ...

Я просмотрел Tx_Extbase_MVC_Controller_ActionController -> callActionMethod () и весь процесс проверки (через var_dump, debug_backtrace и т. Д.), Чтобы выяснить, почему возникает эта ошибка и почему нет вывода из сообщений об ошибках. Это все очень странно ... так что, может быть, у кого-то тут есть чаевые :-)

Та же ошибка возникает, если я добавляю тег @validation в модель моего класса feUser, например @validate notEmpty

Конфигурация Extbase через typoscript

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: Конечно, я много гуглил, прежде чем спрашивать здесь.


person kiri    schedule 24.06.2012    source источник
comment
Просто идея, которую я почерпнул где-то на немецком форуме TYPO3. Перемешайте порядок аннотаций - и очистите временные файлы и кеш после изменений.   -  person Rico Leuthold    schedule 25.06.2012
comment
Все перепробовал, но ничего. Я проведу дальнейшее расследование в следующие выходные.   -  person kiri    schedule 10.07.2012


Ответы (3)


В моем случае эта ошибка возникает из-за отсутствия 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

Это сработало

person Alex Kellner    schedule 06.08.2012

В моем случае я решил эту проблему, прокомментировав эту строку в настройке typoscript:

config.tx_extbase.features.rewrittenPropertyMapper = 1

person Dimanche Eat    schedule 24.09.2013

Вы всегда должны помнить, что есть кеш, который нельзя очистить, нажав кнопку. Кэш отражения Extbase кэширует все аннотации, которые есть в ваших моделях и контроллерах. Так что во время разработки, чтобы избежать больших разочарований, отключите эту хреновую штуку.

Однажды я написал об этом в блоге: http://www.alexanderschnitzler.de/2012/01/disable-extbase-reflection-cache-during-development-typo3-4-6/

Итак, попробуйте сначала это и вручную усечь таблицы базы данных cf_extbase_ *

После этого сообщите, если ошибки по-прежнему возникают.

person Alexander Schnitzler    schedule 02.07.2012
comment
Извините, но кеширование - это не проблема. И такой кеш не хреновый. - person kiri; 10.07.2012