我认为这可能是一个简单的解决方案,但我现在花了一个小时调查无济于事。
我在属于不同控制器的视图中使用的元素中有一个注册表单。使用“url”属性,我告诉它提交到/ users / register,但由于某种原因,这些字段没有提交到数据库。
相反,对于我设置的未定义的二级密钥,“未定义的索引”和MySQL错误都有错误(它是空的,因为它没有被提交)。奇怪的是,如果我在用户视图中的某处包含元素,那么表单工作正常。有谁知道为什么会这样?
更新 - 这是相关的代码,抱歉:
<?php
echo $form->create(array(
'id' => 'signupform',
'url' => array(
'controller' => 'users',
'action' => 'register')));
?>
表单字段都是正确的,因为该元素在任何地方都可以在用户控制器的视图中工作。我是否需要在创建表单时包含任何其他信息以更直接地指出它?
答案 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');
等
如果不这样做,控制器将假设它们都属于自己的型号。