わかりましたので、 CodeIgniter の柔軟性に大きな問題があります。私は、巨大なプロジェクト内のフォームへの入力を対象とする多くの個人的なルール (20 など) を持っています。
CodeIgniter による古典的な「callback_」システムを使用している間、すべてが機能します。メソッドをフォームチェックと同じクラスに入れるだけで、正しくチェックされます。
私の問題は:
1)コードをコピー/貼り付けせずに、これらすべてのルールを別のコントローラーの別の form_validation で使用したい。私たちは皆、それが汚い/悪であることを知っています。
2)理想的には、これらのルールを大きなライブラリに入れたいと思います。これには800行ほどかかるため、コントローラーに入れるのは良い考えではありません。私が言ったように、このプロジェクトは非常に巨大です。
解決策を探しているのは6時間ですが、まったくきれいなものはありません:
私はすでにいくつかの一般的なルールを置くためのMY_Form_Validationを持っていますが、毎回無駄に呼び出すグローバルクラスに特定のルールを混在させるという考えは好きではありません。さらに、これらのルールには多くのライブラリ、モデル、$this->input->post() などのネイティブ CI コア メソッドが含まれており、すべてをこの MY_Form_Validation に入れるとエラーが発生します。良い解決策ではありません:(
コントローラー内で選択されたライブラリー・メソッドを再生成する「imports」という名前のメソッドを含むMY_Controllerを作成しました(PHP4 では、興味がある場合は「aggregate_methods」関数のようなものでした)。システムは完璧に動作しますが、CodeIgniter はそれを理解していません。メソッドはコントローラー内で呼び出すことができますが、フレームワークは $CI コンテンツをチェックしてルールを呼び出すようです (「/system/」の Form_validation.php 行 590)。このコア部分を修正するのも難しく、手をつけたくないので断念しました。
$this->load->library('volt/lbl_validation'); $this->imports('Lbl_validation'); // 次に、コントローラで $this->method() を使用して任意の $this->lbl_validation->method() を呼び出すことができます
- ライブラリ内でカスタマイズされた form_validation を作成する CI をハックしようとしました ('lbl_validation') ; システムは少し面倒でしたが、うまくいきました。問題は、エラー メッセージを表示するために CI form_validation システムに戻ったときです。これは、うまく機能していない真のスパゲッティ コードでした。どちらも良い解決策ではありません。
私は他のいくつかのくだらない解決策も試しましたが、私はそれを告白したくありません.
今、私は自分のコンピューターの前にいて、なぜ善良な人々に悪いことが起こったのか、CodeIgniter で呼び出されたメソッドから set_rules を分離するのがなぜこれほど難しいのか、なぜ彼らは前もって計画を立てなかったのか、人々がライブラリを呼び出す必要があったのかを自問しています。ルールとしてのメソッド。どうすればいいのかわからず、馬鹿げた require() をどこかに置いて、今の私の机のように汚くて散らかしてしまうのをためらっています。
たぶん、良いダンズクリーンソリューションを持っている人がいます。私の希望はすべて StackOverFlow コミュニティに向けられています。誰か ?クレイジーな CI オタクですか?
ありがとうございました ;)