Php 从joomla前端保存数据

Php 从joomla前端保存数据,php,joomla,joomla2.5,Php,Joomla,Joomla2.5,我一直在寻找一个解决方案,如何从joomla frontend保存数据。我遇到了控制器和模型的以下代码,它们工作得非常好。但是我正在寻找一个标准的实践,比如在后端使用jform、jtable等来完成。。。在下面的代码(内部模型)中,保存技术看起来没有那么吸引人。我完全不知道服务器端验证是如何实现的 这可能会让人困惑,所以我想重申一下,在后端,我们甚至不必编写add、save或update函数,它是由具有客户端和服务器端验证的核心类自动处理的。所以我在找类似的东西 控制器 <?php //

我一直在寻找一个解决方案,如何从joomla frontend保存数据。我遇到了控制器和模型的以下代码,它们工作得非常好。但是我正在寻找一个标准的实践,比如在后端使用jform、jtable等来完成。。。在下面的代码(内部模型)中,保存技术看起来没有那么吸引人。我完全不知道服务器端验证是如何实现的

这可能会让人困惑,所以我想重申一下,在后端,我们甚至不必编写add、save或update函数,它是由具有客户端和服务器端验证的核心类自动处理的。所以我在找类似的东西

控制器

<?php

// No direct access.
defined('_JEXEC') or die;

// Include dependancy of the main controllerform class
jimport('joomla.application.component.controllerform');

class JobsControllerRegistration extends JControllerForm
{
    public function getModel($name = 'Registration', $prefix = 'JobsModel', $config = array('ignore_request' => true))
    {
        return parent::getModel($name, $prefix, array('ignore_request' => false));
    }

    public function submit()
    {
       // Check for request forgeries.
       JRequest::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

        // Initialise variables.
        $app    = JFactory::getApplication();
        $model  = $this->getModel('Registration');

        // Get the data from the form POST
        $data = JRequest::getVar('jform', array(), 'post', 'array');

        $form   = $model->getForm();
        if (!$form) {
            JError::raiseError(500, $model->getError());
            return false;
        }

        // Now update the loaded data to the database via a function in the model
        $upditem    = $model->updItem($data);

        // check if ok and display appropriate message. This can also have a redirect if desired.
        if ($upditem) {
            echo "<h2>Joining with us is successfully saved.</h2>";
        } else {
            echo "<h2>Joining with us faild.</h2>";
        }

    return true;
    }
}

您应该能够直接使用JControlPerform的方法,而不是像您那样编写自己的submit()-method(和updItem())。我描述了类似的情况。这意味着您可以使用jform以通常的方式显示表单,并使用action=“index.php?option=com\u jobs&task=save&view=registration&id=whateverid”

通过这种方式使用jcontrollerform->save(),然后调用模型的save()。(嗯,这可能意味着您的模型应该扩展JModelAdmin而不是JModelForm,以包括相关的方法。)这将运行所有必要的验证检查等

您可能需要注册要使用的模型、表和表单的路径,就像我在链接中所做的那样

如果编辑现有数据,则需要在url参数中包含id,因为jform[id]-参数将被忽略


对不起,我没有任何好的教程或任何东西给你,希望这有帮助

在您的模型中使用以下代码

$data = $app->input->getArray($_POST);
$query  = $db->getQuery(true);

确定提交表单后,将调用控制器->保存(),并依次调用模型->保存()。但是模型如何知道它应该与哪个数据库表交互呢?这里缺少JTable,如果您在/administrator中有一个JTable,那么您可以包含指向它的路径。如果没有,我想你必须写一个jtable类……如果你能告诉我你的控制器和模型是什么样子的,那么@jonasfh将不胜感激,因为我仍然无法理解,如果你有一个很好的解决方案,我也需要它。谢谢
$data = $app->input->getArray($_POST);
$query  = $db->getQuery(true);