私が初めてPHPを勉強していた時にPhalconを知り、最近やっと使う機会があったので、感じたことをいくつかシェアしたいと思います。使用にあたって
個人的には、依存性注入を使用してコードを非常に柔軟に構成する方法がとても気に入っています。ただし、フレームワーク内に多くの要素があり、いくつかの落とし穴に遭遇します。 github を 1 年以上使用していましたが、まだ解決されていません。ただし、ある程度の開発経験があれば、これらの落とし穴によって多くの時間が無駄にされました。
1つ目はビューですリーリー
MainView (メイン レイアウト ファイル パス + ファイル名、ただし拡張子は含まれません。拡張子はビュー エンジンに挿入する際のキー値です)、LayoutsDir (レイアウト ディレクトリ パス)、
Layout (メイン レイアウト ファイル名、Layouts ディレクトリ内のファイルは必要に応じて mainView として動的に使用できます)、
PartialsDir (partial関数を使用する場合、partial('main/header')などのテンプレートファイルを検索します。検索パスは「/yourpartialsDir/main/header.volt」です。),
ViewsDir (コントローラー/アクションに対応するテンプレートファイルが配置されているディレクトリを設定します。partialDirと同様に、ディレクトリ内のテンプレートファイルを自動的に検索します)
BasePath (ビューディレクトリのベースディレクトリ、palcon、およびすべての設定に基づくディレクトリを組み合わせてパスを結合し、テンプレートファイルを見つけます。これが落とし穴です)
最初にこのビューを使い始めたときは、絶対パスを使用したのは、絶対パスの方が構成と管理に便利だからです。
そして騙されて、午後のデバッグを無駄にしてしまいました。
公式ドキュメントに記載されている例に基づいてテストを繰り返した結果、このビュー コンポーネントはパスの設定に相対パスのみを使用でき、BasePath を設定する必要がないことがわかりました。
言語の構文は比較的シンプルで理解しやすいです。そして、この文を目にしました。
..]
相対パスか絶対パスかの判断が無く、直接結合しているだけのようです これが問題の原因だと推測されます。
そして、アクション、レイアウト、メインレイアウトテンプレートファイルを順番に直接解析します。
それで、それを検証したかったので、いくつかのデバッグファイルを作成し、それらをデバッグする計画を立てました。
リーリー
私がテストしたコードはマルチモジュールアプローチを使用しています。
BaseViewファイル、palconのビューを継承し、このメソッドのエラーメッセージを開きます
BaseVolt ファイル、テンプレート エンジン volt を継承します
ビューインジェクションのコードとディレクトリ構造は図の通りです
ページの出力は次のとおりです:
予想通り、絶対パスを使用すると、halcon は何があっても上記で設定したパスを直接接続します。
開発者がコントローラー/アクションビューを動的に使用したいが、レイアウトのメインディレクトリが上位ディレクトリにある場合、問題が発生します。
halcon が見つけたメインのレイアウト パスは
PhalconMvcViewException: View '/Users/Hin/work/phalcon_mode/app/modules/admin/views/layouts/main' was not found in the views directory
リーリー
/Users/Hin/work/phalcon_mode/app/views/layouts/main
halcon ビューのソース コードにある 3 つの変数のうち、basePath と viewDir (重要なのは、作成者が viewDir 変数を誤解しており、それがバグの原因でした) が、_enginrender が有効な場合のアクション ビューとレイアウト ビューの基本パスとみなされます。順番に実行されるメインビューのパス。
これを理解したら、ゆっくりと自分で道を設定できます...
----------------------ゴージャスな分割線--------------- --- ------------------
2番目はモデル
ドキュメントによれば、モデルはセッターリンク記述メソッドを提供しますが、実際にはセッターは機能しません...
リーリー
リーリー
しかし、このフレームワークを使用して開発されたプロジェクトは中止され、事故がなければ、より深い穴に遭遇することはありません。
最近機嫌が悪いので記録として残しておきます。