API を使用して wunderground.com から天気を取得し、それを wincache に保存しようとしています。テスト目的で、News モデルでこの関数を作成しました。
public function updateWeather(){
$results = file_get_contents('http://api.wunderground.com/api/**api_key**/conditions/q/CA/Montreal.json');
$results = json_decode($results);
return Cache::write('weather', $results);
}
これをコントローラーから呼び出すと正常に動作します。ただし、コンソールから呼び出されたときに同じ関数が機能しない理由がわかりません。最終的にこれをWindowsタスクスケジューラに追加するために、このシェルを作成しました。
class WeatherShell extends AppShell {
public $uses = array('News');
public function main() {
$this->News->updateWeather();
}
}
これをデバッグすると、$results が正しく設定されていることがわかります。Cache::write() から「true」を取得しますが、読み取ろうとすると「false」を取得します。
ニュースコントローラーで次のアクションが呼び出されると、いつでもキャッシュの読み取りが行われます
public function diaporama(){
$this->set('weather', Cache::read('weather'));
}
これは、bootstrap.php にあるキャッシュ構成です。
Cache::config('default', array(
'engine' => 'Wincache',
'duration'=> 3600,
'probability'=> 100,
'prefix' => ''
));