2016-11-10 107 views
0

我已將所有API調用方法放入模型類中。他們基本的命令喜歡創造()閱讀()搜索()店()等PUT和POSTS AS Cron命令PHP Laravel 5

一開始我在一個控制器類所做的這些,現在我試圖從控制邏輯移動到命令,這樣我可以將腳本作爲每日cronjob運行。出於某種原因,他們不會作爲命令工作。這是因爲你不能使用PUT POST調用作爲cronjobs?由於它的接口像讀取功能一樣正常工作,但PUTS和POSTS不起作用。

如果是這樣,我不能使用PUT和POST在crons,有沒有辦法解決這個?

下面是一些示例代碼

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; 
    } 
} 

回答

0

GET PUT POST通過讀取HTTP頭DELETE HEAD都是HTTP調用,這些方法是由你的框架路由確定,然後電話被重定向到相應的功能相同的路由。當你運行一個cronjob時,你使用的是CLI而不是HTTP,所以沒有標題,默認情況下所有的東西都被解釋爲GET。除了http API調用以外,其他任何地方都不應該使用REST方法。現在取決於你的應用loginc有幾件事你可以做:

  1. 創建一個CLI的propper控制器,管理哪些方法來訪問(更好的方式)。
  2. 創建一個腳本,該腳本使用CURL通過HTTP以所需的HTTP方法訪問您的應用程序。 (hacky的方式)
  3. 重做您的應用程序,以便REST API功能不需要從cron觸發,因爲它們不應以任何方式綁定。 (正確的方法)
+0

非常感謝您的回答。我有一個問題,但。如果你說的是正確的,我的GET請求不應該正常工作?但在我的cron中,這工作得很好。唯一不起作用的是我的PUT和POST請求。 –

+0

您的GET將會工作,因爲GET是默認的HTTP請求方法,當您發出CLI請求時(通過cron),您的路由器將不會有任何http頭並跳轉到默認值,即您的GET。 – Auris