2009-06-10 59 views
-1

我想通过在模型中的数据库操作和控制器中的逻辑部分来分离数据库功能和逻辑部分。早些时候,我拥有了控制器本身的动作部分中的所有代码。我尝试了一些东西,但它不起作用。CakePHP中的模型和控制器结构

这就是我在前面有:

/* Controller */ 

function insertFormName(){  
    $formname=$_POST['formname']; 
    $ret = $this->Form->query("Select id from forms order by id DESC LIMIT 1"); 
    $newid=$ret[0]['forms']['id']; 
    $this->Form->updateAll(array('Form.name' => "'$formname'"),array('Form.id' => $newid)); 
    } 

现在我改变了它一下,它不工作:

/* Controller */ 

function insertformname() 
    {  
     $this->data['Form']['formname']=$this->params['form']['formname']; 
     $this->Form->save($this->data); 
     $this->Form->updateAll(array('Form.name' => "'$formname'"),array('Form.id' => $newid)); 
    } 

/* Model */  
function save($data) 
    {  

    $ret = $this->Form->query("Select id from forms order by id DESC LIMIT 1"); 
    $newid=$ret[0]['forms']['id']; 
    $this->Form->updateAll(array('Form.name' => "'$formname'"),array('Form.id' => $newid)); 
    return $newid; 

    } 

编辑:

我已经尝试过其他方式..在模型中具有完整的功能,并从控制器调用该功能。这种方法是否正确?

/* Model */ 
function saveFormName($data) 
    {  
    $this->formname=$data[$this->name]['formname']; 
    $ret = $this->Form->query("Select id from forms order by id DESC LIMIT 1"); 
    $newid=$ret[0]['forms']['id']; 
    $this->Form->updateAll(array('Form.name' => "'$formname'"),array('Form.id' => $newid)); 
    } 

/* controller */ 
function insertformname() 
    {  
    $this->data['Form']['formname']=$this->params['form']['formname']; 
    $this->Form->saveFormName($this->data); 
    } 
+0

不,这不是它。从你最近的问题来看,重新阅读蛋糕手册(book.cakephp.org)似乎会让你受益匪浅。应该只花你几个小时,但它会回答你的问题。 另请查看关于Cakephp的IBM DeveloperWorks教程系列(它在scribd上,只是搜索它)。有点过时了,但它是洞察Cake哲学的最佳入门书。 – 2009-06-11 16:17:36

回答

3

看起来您应该重新访问Cake book(book.cakephp.org)并重做课程。如果您正确设置表单,则不必手动将$ _POST ['formname']分配给$ this-> data。尝试将表单中的字段名称(在HTML中)设置为数据[ModelName] [FieldName]。

下一页:

$this->Form->updateAll(array('Form.name' => "'$formname'"),array('Form.id' => $newid)); 

你为什么要更新数据的权利,你救了它? $ newid和$ formname变量来自哪里?您可以在Model :: save中定义它们,但不在控制器中定义它们。

这看起来好像你在尝试与Cake Automagic的东西争斗太多。也许你应该重新发布你的问题,但是请详细描述你的高级描述,而不是仅仅描述一个“为什么这不工作?”在我看来,这可能会简化一吨,但是,我不太清楚你的目标是什么。

恭敬地, 特拉维斯