CakePHP表单中的一个元素导致错误

时间:2010-11-22 16:29:39

标签: forms cakephp

我认为这可能是一个简单的解决方案,但我现在花了一个小时调查无济于事。

我在属于不同控制器的视图中使用的元素中有一个注册表单。使用“url”属性,我告诉它提交到/ users / register,但由于某种原因,这些字段没有提交到数据库。

相反,对于我设置的未定义的二级密钥,“未定义的索引”和MySQL错误都有错误(它是空的,因为它没有被提交)。奇怪的是,如果我在用户视图中的某处包含元素,那么表单工作正常。有谁知道为什么会这样?

更新 - 这是相关的代码,抱歉:

<?php 
    echo $form->create(array(
        'id' => 'signupform', 
        'url' => array(
            'controller' => 'users', 
            'action' => 'register'))); 
?>

表单字段都是正确的,因为该元素在任何地方都可以在用户控制器的视图中工作。我是否需要在创建表单时包含任何其他信息以更直接地指出它?

2 个答案:

答案 0 :(得分:1)

将模型'User'指定为$ form-&gt; create()方法的第一个参数。

<?php 
    echo $form->create('User', array(
        'id' => 'signupform', 
        'url' => array(
            'controller' => 'users', 
            'action' => 'register')
        )
    ); 
?>

这将确保表单字段被命名为data [User] [field_name],并防止您看到未定义的索引错误。

希望这适合你!

答案 1 :(得分:0)

在没有看到代码的情况下,听起来像Cake神奇地假设模型是控制器控制当前视图的模型。当该控制器是用户时,它可以正常工作。当它是,例如,文章时,它将尝试(并且失败)使表单字段适合文章模型。

如果没有看到任何代码,就无法提供更多帮助。

编辑:

如果表单包含混合模型,例如用户和文章,您必须为字段名添加前缀,如下所示:

$form->input('User.username');
$form->input('Article.title');

如果不这样做,控制器将假设它们都属于自己的型号。