2010-06-17 41 views
1

好的,所以我的Joomla应用程序是以MVC格式。在Controller或Model中,我对将某些操作放在哪里有点困惑。下面的这个函数在控制器中,当&task=remove被调用。数据库的东西应该在模型中?它似乎不适合那里,因为我有两个模型editapp(显示一个应用程序)和allapps(显示所有应用程序),现在哪一个我会把删除操作?对MVC和数据库查询的位置有点困惑

/** 
* Delete an application 
*/ 
function remove() { 
    global $mainframe; 

    $cid = JRequest::getVar('cid', array(), '', 'array'); 
    $db =& JFactory::getDBO(); 

    //if there are items to delete 
    if(count($cid)){ 
     $cids = implode(',', $cid); 
     $query = "DELETE FROM #__myapp_apps WHERE id IN ($cids)"; 
     $db->setQuery($query); 

     if (!$db->query()){ 
      echo "<script> alert('".$db->getErrorMsg()."');window.history.go(-1); </script>\n"; 
     } 
    } 

    $mainframe->redirect('index.php?option=' . $option . '&c=apps'); 
} 

我也对流程是如何工作感到困惑。例如,在默认情况下调用的控制器中有一个display()函数。如果我传递一个任务,那么display()函数是否仍然运行,或者直接转到由$ task传递的函数名称?

+0

关于你对我的回答的评论,你说得很对。我愚蠢地回答,没有考虑到Joomla的模式可能与我使用其他技术所看到的不同。我已经删除了我的答案,这样就不会让任何人误入歧途。如果你还没有看到它,这是一个关于如何在joomla中创建一个mvc组件的指南,也许可以帮助你:http://www.vojtechovsky.net/joomla/component-helloworld-2-create-tutorial- guide-en.html。对于错误信息抱歉。 – 2010-06-17 09:43:23

回答

1

我会尽量保持模型中的所有数据库功能。如果您不知道某种方法应该采用哪种模型,则可能需要更改模型以更好地反映问题。

就你而言,我认为这个方法会在allapps中使用,因为它可以处理多个应用程序的操作。

如果您传递任务,则会调用该方法。如果你想然后调用显示方法,只需在编辑方法结束时调用它。

如有疑问,请查看网站链接组件的型号和控制器。他们非常简单,并且是Joomla!中MVC的一个很好的例子。