PUT和POSTS作为Cron命令PHP Laravel 5


PUT and POSTS AS Cron commands PHP Laravel 5

我已经把我所有的API调用方法在一个模型类。它们是基本的命令,如create() read() search() store()等。

首先,我在控制器类中制作了这些,现在我正试图将逻辑从控制器移动到命令中,以便我可以将脚本作为日常cronjob运行。由于某些原因,它们不能像命令一样工作。这是因为您不能使用PUT POST调用作为cronjob吗?因为它看起来像读函数工作得很好,但put和post不会工作。

如果是这样,我不能在crons中使用PUT和POST,是否有解决方法?

下面是一些示例代码

public function handle()
{
    $myModel = new MyModel;
    $thing = array(
        "title" => "My title",
        "user_id" => 12345,
        "org_id" => 54321,
    );
    $returned_id = $myModel->create($thing);
}

public function create($thing)
{
    $api_token = "XXXX";
    $url = "https://api.api-site.com/thing?api_token=" . $api_token;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $thing);
    $output = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);
    //array from the data that is sent back from the API
    $result = json_decode($output, 1);
    // check if an id came back
    if (!empty($result['data']['id'])) {
    $deal_id = $result['data']['id'];
    return $deal_id;
    } else {
    return false;
    }
}

GET PUT POST DELETE HEAD都是http调用,这些方法由您的框架路由通过读取http头来确定,然后通过相同的路由将调用重定向到适当的函数。当您运行cronjob时,您使用的是CLI而不是HTTP,因此没有头,并且默认情况下所有内容都被解释为GET。REST方法不是ment,除了http API调用之外,它们都不应该在其他任何地方使用。现在,根据你的应用程序登录,有几件事你可以做:

  1. 为CLI创建一个适当的控制器来管理访问哪些方法(更好的方法)。
  2. 创建一个脚本,使用CURL使用所需的HTTP方法通过HTTP访问您的应用程序。(出租汽车司机的方式)
  3. 重新设计你的应用程序,使REST API功能不需要从cron触发,因为它们不应该以任何方式绑定。(正确方式)