PHP フレームワーク Yaf 学習メモ---デフォルトの動作
Yaf は、PHP 拡張機能の形で C 言語で書かれた PHP フレームワークです。 の作品です。
ラルエンスは PHP です PECL 開発チームメンバー Yaf、Taint などの Pecl 拡張機能の開発者。
ヤフ関連記事 http://www.laruence.com/tag/yaf? ?オンラインマニュアル
オンラインマニュアルシステムは、Yaf についてすべてを完全に説明しています。ここでは、学習ガイドとして、Yaf のデフォルトの動作 (規約) がリストされています。
0.Yaf 設定ファイル (php.ini スタイル)
実際には 2 つの部分に分かれており、1 つは「yaf.」で始まる php.ini の設定です。この部分は通常は調整する必要はありません。
もう 1 つの部分は、Yaf_Application の初期化時の設定です。
で始まります。
設定では PHP 定数定義を導入できます
1.Yaf に必要な設定は、実際にはディレクトリ設定です
yaf.directory=APP_PATH application.directory=APP_PATH
つまり、アプリケーション スクリプト ディレクトリを少なくとも 1 つ定義する必要があり、application.directory が優先されます
2.Yaf にはディレクトリ構成とファイル命名規則の完全なセットがあります
すべての Yaf アプリケーションは次のディレクトリ構成構造に従う必要があります
- index.php //入口文件 - .htaccess //重写规则 + conf |- application.ini //配置文件 application/ + controllers - Index.php //默认控制器 + views |+ index //控制器 - index.phtml //默认视图 + modules //其他模块 - library - models //model目录 - plugins //插件目录
Yaf は大文字と小文字を区別するメソッドと区別しないメソッドの両方をサポートしていますが、大文字と小文字を区別する使用法 (Linux 環境) が見つかりませんでした
クラスの命名と検索ルール
クラス名???????????? 対応するディレクトリ
クラスモデル??モデル
クラスプラグイン?? プラグイン
ClassController コントローラー
その他???????????????ライブラリ
3.Yaf は、ディレクトリ構成および完全なクラス命名規則と組み合わせて、区切り文字 "_" を含むクラス名を使用することにより、クラス ロード管理を完了します
たとえば、Bar クラス ファイル Bar.php があったとします。これを Yaf で使用し、自動的にロードする場合は、次のように構成する必要があります。
Bar.php をライブラリ ディレクトリの下のサブディレクトリ (myclass など) に配置します
そして、Bar.php (通常は Bar) のクラス名を MyClass_Bar に変更します。
つまり、クラス名にはディレクトリ名が含まれている必要があります。
4. エラー処理
Yaf でのエラー処理は、APP_PATH/controllers/Error.php で宣言されているコントローラーを通じて完了できます。
class ErrorController extends Yaf_Controller_Abstract {...}
もちろん、エラー コントローラーが有効になるかどうかは設定の影響を受けます
application.dispatcher.throwException=1 application.dispatcher.catchException=1
詳細については、提供されている公式のサンプルを参照してください。
5. 表示
レンダー ビューにはビュー テンプレート ファイルを指定する必要があります。相対 (アプリケーション/ビュー) パスまたは絶対パスを使用できます
6. ルーティング
Yaf は複数レベルのパスのサポートを提供し、通常のルーティングもサポートされています。設定ファイルを使用してルーティングを記述したり、php スクリプトを使用して Bootstrap.php にルーティングを記述したりすることもできます。
PHP 拡張機能の PHP フレームワーク。データベース アクセスのボトルネックによるバレル効果がなければ、Yaf が最適な形式です
使用Yaf后在某种级别的应用中内存占用应该降低很多
? 7.BUG?发现如下问题,不知道是否是bug
Yaf在匹配配置文件的节(section)的时候,不是对名称完全匹配,比如配置里面有
?
8.MVC
Yaf和大多数框架一样提供了一个默认的MVC行为,对于M(setDefaultModule)我没有找到更改生效的方法。 ? 9.单例模式类,Yaf中
Yaf_Application ? 10.非嵌套Dispatcher(2.x版本以下)
Yaf对请求的处理是非嵌套的,这意味着所有对
Controller转移都是非嵌套的,如果一个Controller没有执行完,发生了转移,那有可能发生不可知的结果甚至错误,Yaf提供的
forward是等待当前Controller执行完毕才处理的,因此如果完全按照MVC的方式对请求进行处理,要达到嵌套处理的效果,需要自己实现代码.流程对应说明 ?[product]
...
new Yaf_Application("conf/app.ini",'p')//照样可以被匹配到
C和V是一一对应的,当然可以名称不同,可以通过Yaf_Dispatcher的setView方法进行设置。
Yaf_Loader
Yaf_Dispatcher
Yaf_Registry
Yaf_Session
类实例
是单例,其他不是
需要注意如果在Yaf_Controller_Abstract继承类action中使用了forward,那将会产生新的实例对象。
mainloopstart
dispatchLoopStartup
preDispatch//其实是个循环受forward控制
这之间request不能发送改变,可以forward但是会被延期执行
postDispatch
forward的request延期执行,循环到preDispatch
dispatchLoopShutdown
可以dispatch一个新的request,会开始新的dispatchLoopStartup
mainloopend