当前位置: 首页 > 知识库问答 >
问题:

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

殷宇
2023-03-14

环境:Mac OS X Lion, PHP 5.3.10, MySQL 5.X,TYPO3 4.7.1,Extbase 4.7.1,流体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);

登记册。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注释时,都会出现以下错误:尝试调用Tx\u Foo\u Controller\u feuser Controller时出错-

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

createAction()的示例


     * @validate $password2 Tx_Extbase_Validation_Validator_IntegerValidator

整数用于引发错误。

自定义验证器类似于Tx\u Foo\u Domain\u validator\u 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-

如果在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
                    }
                }
            }
        }
    }
}

先谢谢你。

附言:当然,我在问这个问题之前在谷歌上搜索了很多。


共有3个答案

诸葛文博
2023-03-14

有一件事你应该始终牢记在心,那就是有一个缓存,你不能通过按下按钮来清理。Extbase反射缓存缓存模型和控制器中的所有注释。所以在开发过程中,为了避免很多挫折,禁用这个糟糕的东西。

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

因此,请先尝试此操作,然后手动截断数据库表cf_extbase_*

之后,如果仍然出现错误,请报告。

朱昊乾
2023-03-14

在我的例子中,我通过在typoscript set中注释这一行来解决这个问题:

子车文康
2023-03-14

在我的例子中出现了这个错误,因为缺少一个extbase引用器。如果没有引用者,默认消息将由extbase引发。

因为我没有表格,只有一个链接,所以我必须手动添加推荐人

/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

这招成功了

 类似资料:
  • 这个问题已经被问了很多次了,即使是在经历了所有的解决方案之后,我也无法让hibernate validator工作。 控制器类:- servlet-上下文:- 依赖关系:- 验证类:- 我错过了什么?

  • 我想验证请求参数。我已经浏览了很多博客并回答了问题,我也做了同样的事情。在控制器类上添加了@Validated。 控制器中的方法: 控制器建议 配置: 完成所有这些之后,现在我得到一个404错误。"状态":404,"错误":"未找到","消息":"没有可用的消息"

  • 我必须把所有的验证放在命令处理程序/域模型中吗?或 我必须从Service-B Saga调用Service-A的Rest API。(这使得服务中有一个单一的入口点)。或 还有其他解决方案吗? 使用-Axon Framework4.2和带有Spring Boot的Axon Server。

  • CodeIgniter 的开发基于 MVC(模型-视图-控制器)设计模式。MVC 是一种 用于将应用程序的逻辑层和表现层分离出来的软件方法。在实践中,由于这种分离 所以你的页面中只包含很少的 PHP 脚本。 模型 代表你的数据结构。通常来说,模型类将包含帮助你对数据库进行增删改查的方法。 视图 是要展现给用户的信息。一个视图通常就是一个网页,但是在 CodeIgniter 中, 一个视图也可以是一

  • 有一个项目大约有20个控制器。每个控制器都有其相应的测试类。当我们尝试添加新的controller tests类时,以前运行良好的一些测试开始随机失败。如果使用@Ignore注释任何控制器测试类,测试将恢复正常。 这是失败测试抛出的异常: org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.Illega

  • Enforce模块用于验证数据。对于使用以前的验证器的用户,还可以继续使用,它们中的一部分整合到了enforce,剩余部分还没有。推荐你开始使用orm.enforce来取代orm.validators。可用的验证器的列表请见node-enforce。 unique验证器也构建于ORM中,可以这样来访问: name: orm.enforce.unique("name already taken!")