私は数ヶ月前にCakePHP(1.2)を使い始めて、会社のアプリケーションに小さな機能を追加しましたが、あまり慣れていません。
次に、本番サーバーにマージする前に、開発サーバーでローカルにテストします。
コントローラーアクションを1時間ごとに呼び出して、私の調査でこれを行うための最良の方法であると想定したcronジョブを使用したいと思います。
試行1
これらを読んだ後、
http://book.cakephp.org/1.2/en/view/110/Creating-Shells-Tasks
エラーなしで何かを実装できましたが、アクションは実行されません。
これらの例に基づいて、(app / webrootではなく)appディレクトリにcron_dispatcher.phpという名前のファイルを追加し、appdirからこのコマンドを実行しました。
php cron_dispatcher.php / controller / action / param
それでも何も起こりませんでしたが、URLを介して呼び出すと完璧に機能します。
試行2
/ app / vendors / shells /にアクションを呼び出すシェル(email.php)を作成してみました。
<?php
class EmailShell extends Shell {
public function main() {
$this->out('Test');
}
}
?>
これにより、を使用してコンソールにテストが正常に出力されます。
ケーキメールメイン
しかし、コントローラーのアクションを呼び出す方法が見つかりません。私が試してみました
$ this-> requestAction('/ controller / action');
また、シェルのメインとは異なる関数から呼び出しを試みました。
モデルの場合と同じように$uses変数にコントローラーを含めようとしましたが、機能しませんでした(そして、私が思うに意味がありません)。
sendEmails関数を複製したくないので、タスクを作成することも解決策ではないと思います。そのため、シェルなどからコントローラーのアクションを呼び出す方法を探しているのはなぜですか。
おそらく私が見逃している理論がいくつかあります、ありがとう
解決
いくつかのメソッドをコントローラーからモデルに移動し、シェルからそれらを呼び出すことができました。
App::import('Component', 'Email');
class SendMemosShell extends Shell {
var $uses = array(
'Memo',
);
public function main() {
}
public function sendEmails () {
$this->Email =& new EmailComponent(null);
$memoList = $this->Memo->getMemos();
//...
}
}
このリンクは http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.htmlに役立ちました
編集:いくつかの情報を明確にし、解決策を追加しました