Cakephp Controller不处理表单数据

时间:2012-06-28 01:58:49

标签: forms cakephp cakephp-1.3

嗨,我是cakephp的新手(第1.3节)。我想做一些简单的事。

我有两张桌子:fichas [id,... etc]和labos [id,laboratorio,ficha_id]所以“labos”属于“fichas”。 (labos.laboratorio是ENUM字段)。

我想查看给出labos.id和labos.laboratorio的“ficha”,所以我在“home.ctp”中包含了以下代码

<h3>Mostrar Ficha</h3>
<?php echo $this->Form->create('ficha',array('action'=>'localiza'));?>
<?php echo $this->Form->radio('laboratorio',array('A','B','C'),array('A','B','C')); ?>
<?php echo $this->Form->input('id',array('label'=>'Numero','type'=>'text')); ?>
<?php echo $this->Form->end("Mostrar");?>

然后在“fichas_controller.php”中添加了以下内容:

function localiza(){

    $laboratorio=$this->data['Ficha']['laboratorio'];
    $id=$this->data['Ficha']['id'];
    if(!$id){
            $this->Session->setFlash('Por favor introduzca un valor valido');
            $this->redirect(array('action'=>'index'));
        }

    $this->set('fichas',$this->Ficha->findID($id,$laboratorio));

}

最后在模型“ficha.php”中如下:

function findID($id=null,$laboratorio=null){
    return $this->find('all',array('conditions'=>array('Labo.laboratorio'=>$laboratorio,'Labo.id'=>$id)));
}

显然文件views / fichas / localiza.ctp存在

问题是,当我按下表单中的提交按钮时,它只是重新加载home.ctp页面。看起来控制器的代码没有被执行,因为我试图强制应该加载索引操作的错误消息将if条件更改为true但结果相同。我在模型中更改了函数的名称,期望错误到ocurr,但我得到了相同的结果。 我在home.ctp页面中有另外两个表单,但是调用另一个动作和模型。 其中一个几乎相同,它工作正常。 我无法弄清楚错误。

提前感谢您的帮助。 马塞洛。

3 个答案:

答案 0 :(得分:0)

数组键$this->data['Ficha']可能不存在。您已创建小写的“ficha”表单,此名称应为大写,否则数据在$this->data['ficha']中可用。所以表单创建调用看起来像这样:

<?php echo $this->Form->create('Ficha',array('action'=>'localiza'));?>

答案 1 :(得分:0)

您可以在Cake

上以两种方式进行调试
Configure::write('debug', 2);
debug($this->data);

OR

其他PHP方式

print_r($this->data);

这样,你就会知道你是否正确地传递了data-&gt; params。

为什么你的模型有小写的第一个字符?它应该是

  • Fichas
  • Labos

然后,如果您只想要,可以在控制器上发出直接查找。

$ d = $ this-&gt; Fichas-&gt; find('all',array();

答案 2 :(得分:0)

您可能已将home.ctp文件添加到另一个控制器中。尝试在以下行中添加控制器:

<?php echo $this->Form->create('ficha',array('controller' => 'fichas', 'action'=>'localiza'));?>

希望它有所帮助。