この記事の例では、Zend Framework チュートリアルでのモデルの基本的なルールと使用法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
ここでは Zend のモデルについて説明します。実際、Zend でのモデル処理は非常に簡単です。
これは主にオートロード機能によるものです。他のフレームワークとは異なり、モデルに対して複雑な基本クラスが定義されます。
モデルを定義する場合は、特定の関数を使用する前にモデルの基本クラスを継承する必要があります。
モデルは Zend にカプセル化されていません。
その理由は、おそらく、モデルが主に特定のビジネス ロジックに関連しており、カプセル化が多すぎると傷が増えるだけであるためです。
Zend は、オートロード関数と名前空間関数を使用して、この問題を巧みに解決します。
zendframework プロジェクト model_demo1 を作成します
エラーを簡単に表示するには、次のように設定ファイル /model_demo1/application/configs/application.ini でエラー メッセージ スイッチをオンにします:
phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1
次に、簡単に説明します。 zend のモデルについて話します:
1. デフォルトのモデル
標準の Web アプリには application/models などのディレクトリがあります。モデル ディレクトリに特定のクラスを定義すると、モデルがアプリのモデルの保存に使用されることがわかります。もちろん、次の条件を満たす場合は、zend が自動的にそれをロードします。
たとえば、zf コマンド ラインを使用して Test
zf create model Test
/www/model_demo1/application/ にモデルを作成します。 models/Test .php
プロジェクト プロファイル '/www/model_demo1/.zfproject.xml' を更新しています
プロジェクト ディレクトリを更新すると、次のファイル /model_demo1/application/models/Test.php が追加されたことがわかります
ファイルの内容は次のとおりです:
<?php class Application_Model_Test {}
Model を使用するには次のルールに従わなければならないことは難しくありません:
1) Application_Model_ で始まり、カスタマイズされたモデルのクラス名が続きます。
つまり、Web アプリケーションのモデルのディレクトリ構造は /model_demo1/application/models/Test.php です
対応する名前空間は Application_Model_Test です。
applicationはApplicationに対応します
modelsはmodelsに対応します
Testはモデルのクラスファイルの名前です。
制約に従ったクラスの名前は次のとおりです: class Application_Model_Test {
Application_Model_ を理解するのは難しくありません。このようなルールは、zend フレームワークの自動ロードと名前空間の規則に従います。
2).Application 名前空間
実際、Application は構成ファイルで構成したアプリケーションの名前空間でもあります。
設定ファイルのappnamespace = "Application"をappnamespace = "App"に変更した場合。
私たちのオリジナルのプログラムはエラーを報告します。理由は自明です。つまり、zend はそれほどスマートではありません。
原理を詳しく調べたい場合は、おそらくこの関数を完成させる次のクラスです:
Zend_Application_Bootstrap_Bootstrap Zend_Application_Module_Autoloader
2. カスタム名前空間
はデフォルトの名前空間です。たとえば、/model_demo1/library/Zend/Test.php
にクラス Zend_Test<?php class Zend_Test{ static public function echoZendTest(){ echo 'ZendTest<br/>'; } }
1) application.ini 設定ファイルを使用します
デフォルトの名前空間
appnamespace = "Application"
カスタム名前空間
autoloadernamespaces.app = "App_" autoloadernamespaces.my = "MyApp_"
または
autoloadernamespaces[] = "App_" autoloadernamespaces[] = "MyApp_"
具体的な実装クラスは、zendapplication.php
rreee2)です。 AppTest/Test.php
public function setOptions(array $options) { if (!empty($options['config'])) { if (is_array($options['config'])) { $_options = array(); foreach ($options['config'] as $tmp) { $_options = $this->mergeOptions($_options, $this->_loadConfig($tmp)); } $options = $this->mergeOptions($_options, $options); } else { $options = $this->mergeOptions($this->_loadConfig($options['config']), $options); } } $this->_options = $options; $options = array_change_key_case($options, CASE_LOWER); $this->_optionKeys = array_keys($options); if (!empty($options['phpsettings'])) { $this->setPhpSettings($options['phpsettings']); } if (!empty($options['includepaths'])) { $this->setIncludePaths($options['includepaths']); } if (!empty($options['autoloadernamespaces'])) { $this->setAutoloaderNamespaces($options['autoloadernamespaces']); }
/model_demo1/application/controllers/IndexController.php
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { $app = $this->getApplication (); $namespaces = array ( 'AppTest' ); $app->setAutoloaderNamespaces ( $namespaces ); return $app; } }
3) 特定のクラスを使用して自動読み込みを完了します
/model_demo1/application/models/ModelTest.php
<?php class AppTest_Test{ static public function echoAppTestTest(){ echo 'AppTestTest<br/>'; } }
/model_demo1/library/AppTest2/Test.php
AppTest_Test::echoAppTestTest();
この記事が PHP プログラミングの皆様のお役に立てれば幸いです。