在Web服务函数内加载模型函数

时间:2014-05-23 03:35:04

标签: php web-services codeigniter soap model

我在基于codeigniter的项目中使用集成的SOAP Web服务,我无法在注册的Web服务函数中加载模型函数。

我在SOAP webservice中有这两个函数:hello和addcontact。

function hello($name) {
            return 'Hello, ' . $name;
    }

function addcontact($nombre, $apellido, $ciudad) {            
        $resultado=$this->modelo_turismo->addcontact($nombre, $apellido, $ciudad);

        if($resultado){
            return "Bienvenido $nombre $apellido. Tu eres de $ciudad.";
        }else{
            return "No se pudo agregar contacto.";
        }            
    }

函数hello很简单,当客户端使用服务时它工作正常,这与在尝试使用时显示此消息的函数addcontact不同:

Response not of type text/xml: text/html

正如您所看到的,我在模型中加载了一个将联系人插入数据库的函数,但我甚至没有返回任何数据库数据来回显或打印。

我还尝试了其他一些尝试加载模型的东西,我无法摆脱那条消息,所以我尝试了这个(我知道在CodeIgniter中使用函数插入这样的东西很奇怪但我试过了解该消息的原因):

function addcontact($nombre, $apellido, $ciudad) {
        $conexion = new mysql ("localhost","root","","turismo");
        if ($conexion->connect_errno){
            return "Failed to connect to MySQL: " . $conexion->connect_error;
        }
        $query = "INSERT INTO contactos (nombre, apellido, ciudad) VALUES ('$nombre', '$apellido', '$ciudad')";
        $resultado = $conexion->query($query);
        if($resultado){
            return "Bienvenido $nombre $apellido. Tu eres de $ciudad.";
        }else{
            return "No se pudo agregar contacto.";
        }

    }

使用该功能我再次收到此错误:

  

不是text / xml类型的响应:text / html

但是,如果我改变了连接线' mysql'到了' mysqli'像这样:

$conexion = new mysqli ("localhost","root","","turismo");

加载客户端时我得到了预期的结果:

  

Bienvenido John Travolta。 Tu eres de California。

然后我怀疑我加载模型的错误是因为在我的数据库配置文件中我有这一行:

$db['default']['dbdriver'] = 'mysql';

所以我试图将驱动程序改为' mysqli'没有好结果。我一直得到同样的错误:

  

不是text / xml类型的响应:text / html

顺便说一下,这就是我注册的方式' addcontact'功能:

$this->nusoap_server->register('addcontact',                // method name
        array('nombre' => 'xsd:string',
            'apellido' => 'xsd:string',
            'ciudad' => 'xsd:string'),        // input parameters
        array('return' => 'xsd:string'),      // output parameters
        'urn:Turismo_WSDL',                      // namespace
        'urn:Turismo_WSDL#addcontact',                // soapaction
        'rpc',                                // style
        'encoded',                            // use
        'Agregar reservacion'            // documentation
    );

这是客户端函数,它使用上面的函数:

function addcontact() {

    $wsdl = site_url('Webservice/wsdl');
    $client = new nusoap_client($wsdl, true);
    $client-> soap_defencoding='UTF-8'; 
    $client->decode_utf8 = true;

    $err = $client->getError();
    if ($err) {
        echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';

    }

    $result = $client->call('addcontact', array('nombre' => 'John', 'apellido'=>'Travolta', 'ciudad'=>'California'));

    // Check for a fault
    if ($client->fault) {
        echo '<h2>Fault</h2><pre>';
        print_r($result);
        echo '</pre>';
    } else {
        // Check for errors
        $err = $client->getError();
        if ($err) {
            // Display the error
            echo '<h2>Error</h2><pre>' . $err . '</pre>';
        } else {
            // Display the result
            echo '<h2>Result</h2><pre>';
            print_r($result);
        echo '</pre>';
        }
    }
}

所以我的问题是,我做错了什么?我可以使用如上所述的手动连接来完成工作,但我想在CodeIgniter中使用模型。

1 个答案:

答案 0 :(得分:0)

我们可以使用实例变量

调用codeigniter模型

$ci =& get_instance();

Class soap
{
    private $ci;

    // set the CI classes to  $CI
    function __constuct(){
       $this->ci = & get_instance ();
    }

    function callone(){
      $resultado=$this->ci->modelo_turismo->addcontact($nombre, $apellido, $ciudad);
    }


}

ci->将提供CI

的模型

有关codeigniter实例变量的更多信息,请参阅此处 Codeigniter: Get Instance