关于MVC以及放置数据库查询的位置有点困惑

时间:2010-06-17 05:49:21

标签: joomla

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

    /**
 * 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传递的函数名?

1 个答案:

答案 0 :(得分:1)

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

但是,在你的情况下,我认为这种方法可以用于allapps,因为它可以处理多个应用程序的操作。

如果您传入任务,则会调用该方法。如果您想再调用display方法,只需在编辑方法结束时调用它。

如有疑问,请查看网络链接组件的模型和控制器。它们非常简单,是Joomla中如何做MVC的好例子。