代码之家  ›  专栏  ›  技术社区  ›  girish

在codeigniter控制器函数中调用Rest API

  •  0
  • girish  · 技术社区  · 7 年前

    我已经在codeigniter中设置了Rest API,这些API将由android应用程序和相同codeigniter设置的Web应用程序使用。下面是我的文件夹结构。

    Controllers
        api
          -signupApi
      Signup
    

    这个 注册API 是android和web应用程序都要使用的实际rest API。 注册 是我的实际注册屏幕控制器,我在其中有一个表单,将用户注册数据发布到signupApi。

    if($_POST){
        // call the signupApi here and post the user registration data
    }
    

    如果有注册后请求,我如何调用REST API控制器中的注册API函数并在注册控制器中处理该请求。我研究了如何从另一个控制器函数调用函数,但没有找到合适的解决方案。有谁能告诉我怎么做吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Goose    7 年前

    如何调用REST API中的注册API函数 控制器并在注册控制器中处理请求

    听起来您想从另一个控制器调用一个控制器中的方法。大多数MVC框架(包括CodeIgniter)都希望控制器只处理请求本身。

    如果您有需要两个控制器实现的逻辑,那么您需要(并且需要)将该逻辑放入模型中。CodeIgniter最初给人的印象是,模型只用于数据库ORM交互,但它们也是您将要处理的大多数共享逻辑的合适选项。

    如果两个方法在相同的结构中接受完全相同的请求,请合并这些方法并根据这些请求的内容处理API与Web App的输出,或者传递一个附加参数以反映应输出的数据。

        2
  •  0
  •   Shoukat Mirza    6 年前

    cURL是与restapi交互的最灵活的方式,因为它正是为这类事情而设计的。您可以设置HTTP头、HTTP参数等。cURL发出POST请求

    以下是一个示例:

    function function_name()
    {
        $username = 'admin';
        $password = '1234';
    
        // Set up and execute the curl process
        $curl_handle = curl_init();
        curl_setopt($curl_handle, CURLOPT_URL, 'http://localhost/site/index.php/example_api');
        curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl_handle, CURLOPT_POST, 1);
        curl_setopt($curl_handle, CURLOPT_POSTFIELDS, array(
            'name' => 'name',
            'email' => 'example@example.com'
        ));
    
        // Optional, delete this line if your API is open
        curl_setopt($curl_handle, CURLOPT_USERPWD, $username . ':' . $password);
    
        $buffer = curl_exec($curl_handle);
        curl_close($curl_handle);
    
        $result = json_decode($buffer);
    
        if(isset($result->status) && $result->status == 'success')
        {
            echo 'Record inserted successfully...';
        }
    
        else
        {
            echo 'Something has gone wrong';
        }
    }