私はcustomers_controllerに投稿するサインアップフォームを持っていますが、今ではサインアップフォームも支払い情報を受け取るようにしたいと考えています。私はpayment_controllerを持っています。新しいユーザーを保存した後、payment_controllerのアクションに支払いの投稿データを転送したいと思います。cakephp - コントローラのデータを別のコントローラに転送するにはどうすればいいですか?
どうすればよいですか?
私はcustomers_controllerに投稿するサインアップフォームを持っていますが、今ではサインアップフォームも支払い情報を受け取るようにしたいと考えています。私はpayment_controllerを持っています。新しいユーザーを保存した後、payment_controllerのアクションに支払いの投稿データを転送したいと思います。cakephp - コントローラのデータを別のコントローラに転送するにはどうすればいいですか?
どうすればよいですか?
最終的に私はデータを別のコントローラに移動しようとするのは愚かだと決めました。私は、任意のコントローラからのリクエストを処理する支払いコンポーネントを作成しました。
お支払いの実際のロジックを支払いまたは請求書モデルに入れることをお勧めします。これを行うと、$ this-> Customer-> Payment-> process_charge(..)呼び出しを行うことができるように、2つのモデルをリンクするか、Customersコントローラの$ uses属性を定義して支払いモデル。
私はまた、このような状況のために、「ファットモデル、スキニーコントローラ」の学校を支持しています。私はコントローラが実際のHTTP要求(アクセス制御、ワークフローのプロパティなど)を担当していると考えて、モデルが大量の持ち上げを行うようにします。
ユーザコントローラの登録アクションでは、ユーザが登録(ログイン)したときに、通常の支払いモデルを使用するペイメントコントローラにリダイレクトし、そこに自己投稿を表示することをお勧めします。リダイレクトを通じてあるアクションの終わりから別のアクションの最後まで通信する方法は、URLを構築することです。支払コントローラが必要なときに、ユーザーのIDをつかむことができるはずですので、あなたはすなわち、しかし、ユーザー情報に沿って渡す必要はありません。
$this->data['Payment']['user_id'] = $this->Auth->user('id');
$this->Payment->create($this->data);
if ($this->Payment->save()) {
// etc
お客様と支払いが何らかの形で関係していると仮定すると、何の理由あなたはありませんcusomters_controllerに支払い情報を記録できませんでした。
$this->Customer->Payment->create()...
モデルごとに1つのコントローラを使用する必要があるというルールはありません。実際、あなたが今体験しているような実際のアプリケーションの大部分ではうまくいかないでしょう。
私は通常、コントローラをモデルにペアリングしようとするのではなく、論理的な機能のグループ分けで分けています。あなたの場合、私はaccounts_controllerを構築し(アカウントテーブルがない場合でも)、そのコントローラにログイン、登録、ログアウト、プロファイルの編集などを行います。
私はこの種の組織がアプリケーションの管理を容易にしていることを発見しており、エンドユーザーにとってもより多くの論理的なパスを作り出しています。