質問: Item::paypalCheckout($req); ``` もやっとしていますが、どうするべきかご指南頂けますと幸甚です。
回答: それらは全てModelの役割です。 ControllerはURLに従って入力されたデータをModelに丸投げして値を受け取り、 Viewに受け取ったデータを丸投げするくらいしか書く内容はありません。 Modelにバリデートを依頼して、falseが返ってきたら400番エラーを返してリダイレクトするくらいの事は書いても良いでしょう。 ここは**窓口Model**クラスを用意して対応しましょう。 また、**オンライン決済インタフェース**を用意しておきます。 私が作ると仮定してちょっと作戦を書いてみました。 下記のような感じの実装になると思います。 (interfaceとclassは1つにつき1ファイルで管理する) ``` interface onlinePayment { public function isValid(); public function checkout(); } // こんな感じのラッパークラスを沢山用意 class paypalPayment implements onlinePayment { public $req = null; function __construct($req){ $this->req = $req; } public function isValid() { $result = false; // バリデートを実行 return $result; } // スタティックなのはテストをしやすくする目的です。 public static function convertFrom($req) { $data = null // $data を生成する処理 return $data; } public function checkout() { $data = self::convertFrom($this->req); // 決済を実行して、失敗なら下記を投げる(このクラスはExceptionを投げて死ぬだけでOK) throw new Exception($result); } } // 窓口クラス class paymentWindow implements onlinePayment { public $payments = [ "paypal" => 'paypalPayment', ]; function __construct($req){ $payment = $this->payments[$req['target']]; $this->payment = new $payment($req); } public function isValid() { return $this->payment->isValid(); } public function checkout() { return $this->payment->checkout(); } } ``` 空でバーっと書いたのでSyntaxエラーが出るかもしれませんが、一通り出来る方だと思いますので問題ないと判断しました。 窓口クラスが若干重いですが、結局は何処かに書いてメンテナンスしないといけないので、こんな所ですかね? まぁ、案の1個くらいに思ってください。