私はMagentoに異なるMVCフレームワーク(例えばSymfony)から来ています。私はMagentoのベストプラクティスについて多くを読んで、Magentoが典型的なMVCスタイルを使用していないことがわかります。アラン・ストームは、以下のことを書いた:Magento - フォームをブロックで処理する最も良い方法は?
それは ビューのための変数を設定するには、コントローラの責任ではありません[...]コントローラの仕事はモデルに特定の物事を行うことです、そして は、システムを伝えることは、レイアウトのレンダリングです時間。
これはブロックに柔軟性を提供できるので、私はこのアプローチを理解していると思います。
右。しかし、フォームはどうですか?
典型的なMVCフレームワークでは、コントローラーで要求パラメーターを取得したり、コントローラーでフォームデータを検証したり、モデル操作(保存、ロードなど)を行ったり、必要に応じてリダイレクトしたり、ビューのために焼きたての出力部分を提供します。
Magentoでは、これらはすべてブロック内で実行され、(薄い)コントローラーはレイアウトを準備してレンダリングすることになっています。 (私が分かっていれば)
私は、独自の新しいモデルを持つ別個のモジュールの作成手順を説明している記事(マニュアル、フォーラムトピックなど)を見つけようとしました。これはフロントエンドのフォームから編集できますユーザーによって。私はカスタムフォームがフロントエンドでどのように動作すべきかを見たいと思います。私は、ブロック、フォーム、adminhtmlフォームの変更や作成、連絡先やニュースレターの登録フォームのカスタマイズに関する一般的な記事だけを見つけました。
私はそれを作った。それは今働くが、私は満足していない。そこで、私はコアモジュールのContactフォームのソースコードをチェックし、それらは私のために全体の画像を乱しました。組み込みのContactフォームでは、上記の操作のほとんどにIndexControllerを使用します。(ほとんど)標準のMVCと似ています。
誰も私にベストプラクティスを提案できますか?次のような単純なフローをどのように管理するのですか? (私は以下のこれらのソリューションを持っているが、私はわからないんだけど、「右Magentoの道」ということです):
- するとページが読み込まれると、中に含まれるブロックでフォームを表示ユーザーがフォーム、プロセス・フォーム・データを送信すると、検証エラーが表示される場合、別のページ
- ロード
- 移入オブジェクトデータ形式に要求パラメータによってDBからのモデルオブジェクトは、
- それら
- を検証します再度フォームを開き、エラーメッセージを表示します。
- I F [OK]を、DBにデータを保存し、お礼ページ
私の混乱は主に周りで示しています
- はどこで入手してリクエストパラメータを管理する必要がありますか? (私はブロッククラスファイルでそれをしました)
- そして、それに基づいてDBからオブジェクトを読み込みますか? (また、phtmlに渡された)
- 私はそこに読み込まれない場合は、ビューに渡す方法? (私は方法を知っているだろうが、私は最良の方法を知らない。)
- (POST)フォームのデータを処理、検証、保存する場所はどこですか? (ブロック?)
- ブロック内で適切にリダイレクトを使用するにはどうすればよいですか?感謝のページは別のブロック/ページでなければならないので、リダイレクトが必要ですか?あるいは、同じブロックのオルタナティブ(条件付き)の見た目ですか?
ありがとうスレイヤー、それは私が疑うものです。それははるかに理にかなっているようです!私は上記のすべての議論に同意します。私はMVCの知識に基づいて同様のものを想定していました。これらのコアコードを確認します。とても有難い! –