1

ケーキの使用2.1.1。コントローラからアクションを実行するためのcronジョブを作成しようとしています。これを行う正しい方法はどれですか?admin_testというアクションを持つOffersControllerがあります。このアクションを2時間ごとに実行したいと思います。今のところ、app / Console / command/SyncapiShell.phpでシェルを作成しました。

class SyncapiShell extends AppShell {
    public $uses = array('Offer');

    public function main() {
       $this->Offer->admin_test();
    }
}

しかし、シェルを実行しようとすると、SQLSTATE[42000]構文エラーまたはアクセス違反が発生します。また、管理ルーティング、認証コンポーネント、およびACLを使用しています。シェルはどのように機能しますか?認証とACL権限を無視しますか?通常、admin_testアクションには、特定の認証済みユーザーのみがアクセスできます。

ありがとうございました

4

1 に答える 1

5

いいえ、これは正しい方法ではありませんが、アプリのアーキテクチャが良くないことを示す強力な指標である可能性が高くなります。太いモデルと小さなコントローラーが必要です。

Shell:uses はコントローラーの uses プロパティのように機能し、モデルをロードします。コントローラーでは、モデルの関連付けを使用する必要があり、uses を使用して何千ものモデルをロードしないでください。

コントローラー メソッドをリファクタリングし、コードを Offer モデルに移動します。

レイヤーケーキ

また、なぜシェルに認証や管理ルーティングが必要なのですか? シェルは、名前が示すように、シェル プログラムであり、Web サイトではありません。認証は、基本的にスクリプトを実行するOSとユーザーによって行われます。とにかく、シェルにアクセスできる人だけがそれを実行できます。

于 2012-04-17T08:31:14.240 に答える