0

cron ジョブを介して使用したいモデルとコントローラー メソッドを作成しましたが、調査の結果、コンソール/コマンドを使用してシェルとしてこれを行う必要があるようです。私はいくつかのさまざまなSOの投稿とマニュアルを読みましたが、それはすべて私の頭を少し超えています。

これは私がこれまでに持っていたものです - 私のモデルとコントローラで持っていたものからかなり引き裂かれました。これを機能させる方法について、誰かが私にいくつかの指針を教えてもらえますか? 少し早いですがお礼を。

**** 編集 - これで動作します ****

<?php 

App::uses('Shell', 'Console');
App::uses('CakeEmail', 'Network/Email');

class OldClaimsShell extends AppShell {

    // Include the ExpesesCLaim mdel
    public $uses = array('ExpenseClaim');


    /**
     * When fired it checks for claims over 7 days that are still "submitted" and have therefore not been dealt with. Function has to be called MAIN - see cake docs
     */
    public function main() {

        // Find all claims with status "submitted" that are older than 7 days
        $answer = $this->ExpenseClaim->haveClaimsOlderThan7Days();

        //debug($answer);
        if ($answer === true) {

            $Email = new CakeEmail();
            $Email->domain('www.xxx.co.uk');
            $Email->template('oldExpenseClaimReminder');
            $Email->to('xxx@xxx.co.uk');
            $Email->from('xx@xx.co.uk');
            $Email->subject('There are outstanding claims over 7 days old - Please Review');
            $Email->viewVars(array('link' => 'http://xxx.xxx.co.uk'));
            $Email->emailFormat('both');
            $Email->send();

            //$this->out('Email sent');
        }

    }
}
?>

回答とコメントに基づいて質問を修正しました-Cronは機能しませんが、これは機能するようになりました。これについては、別の質問で検討します。

4

1 に答える 1

1

2.x ではすべきではありません use app::import()

シェルでコントローラーを使用しないでください

最新の 2.x ブランチには、シェル、モデル、コントローラーなどからのメール用の CakeEmail クラスがあります (例: 好きな場所)。EmailComponent は、後方互換性を維持するためのラッパーになりました。

コードに関する限り、シェルはコントローラーに似ています。コントローラーと同じように使用するモデルを指定でき、データのフェッチはまったく同じです。

メールの送信に関するドキュメントを確認してください。非常に簡単です...

$Email = new CakeEmail();
// set config, add users, etc
$Email->send();

次に、通常のcronで実行します

0 * * * * /path/to/app/Console/cake FooBar --params... etc
于 2013-06-21T23:57:47.220 に答える