我已经把我所有的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调用之外,它们都不应该在其他任何地方使用。现在,根据你的应用程序登录,有几件事你可以做:
- 为CLI创建一个适当的控制器来管理访问哪些方法(更好的方法)。
- 创建一个脚本,使用CURL使用所需的HTTP方法通过HTTP访问您的应用程序。(出租汽车司机的方式)
- 重新设计你的应用程序,使REST API功能不需要从cron触发,因为它们不应该以任何方式绑定。(正确方式)