この記事では、Zend Framework チュートリアルでのアプリケーションとブートストラップの使用方法について例を示して説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
MVC アプリケーションでは、データベース リンクの初期化と確立、ビューとビュー アシスタントの構成、レイアウトの構成、関連プラグインの登録、アクション アシスタントの登録などを行う必要があります。これらの構成と準備を 1 つずつ完了する必要があります。場合によっては、いくつかの初期化操作が必要になることがありますが、場合によっては、これらの初期化が必要ない場合もあります。 Zend_Application は、これらの操作を完了するだけでなく、これらの構成および初期化タスクをより統合され、より秩序正しく、再利用性を高めることもできます。
Zend_Application の使用法は 3 つのタイプに細分できます:
Zend_Application: include_paths と自動ロードを含む PHP 環境をロードし、ブート クラスをインスタンス化します。
Zend_Application_Bootstrap: ブート クラスのインターフェイスを提供します。
Zend_Application_Bootstrap_Bootstrap は、依存関係のチェックやオンデマンドでのブート リソースのロードなど、ブートが提供する必要がある最も一般的な機能を完了します。
Zend_Application_Resource はオンデマンドのリソース読み込み機能を提供します
開発者は、必要に応じて Zend_Application_Bootstrap_Bootstrap を継承したり、Zend_Application_Bootstrap_Bootstrapper インターフェースを実装したりできます。 Zend_Application はエントリ ファイル (public/index.php など) にロードされ、ブート オプションと現在の環境構成に従ってインスタンス化されます。
ブート オプションには、指定されたブート クラス ファイルとブート クラス パスが含まれます。オプションは次のとおりです。
必須の include_paths登録された名前空間を追加ロードする自動ロード機能
php.iniの初期化設定
「Bootstrap」でない場合は、ブートストラップクラス名を指定します
リソースのプレフィックスのキーと値のペアはリソースのプレフィックス名を表します
リソースのクラス名またはエイリアス
ロードされた設定ファイルのパスを追加します
追加の構成オプション
オプションは、配列、Zend_Config オブジェクト、または指定された場所にある構成ファイルです
ブートストラップ
Zend_Application の 2 番目の機能は、アプリケーションをブートストラップすることです。ブートストラップは Zend_Application_Bootstrap_Bootstrapper インターフェイスを実装する必要があります。特定のインターフェイス API は次のとおりです。 リーリー
api は主に環境設定、ブートローディング リソースの取得、ブートローダーを提供しますインターフェースを実装することも、Zend_Application_Bootstrap_BootstrapAbstract または Zend_Application_Bootstrap_Bootstrap を継承することもできます。 リソースメソッド
Zend_Application_Bootstrap_BootstrapAbstract インターフェースを実装するリソース メソッドは、次の規則に従う必要があります。メソッドの種類は保護されており、メソッドのプレフィックスは _init will で始まる必要があります。
リソース メソッドをロードして使用する場合は、bootstrap() にリソース名を追加するだけです。リソース名は、_init プレフィックスを除いたリソース メソッドです。複数のリソースメソッドをロードしたい場合は、配列を通じてそれらを指定できます。
ブートストラップクラスの例:
リーリー
_initFoo() を使用してのみロードします:リーリー
_initFoo() と _initBar() を使用してロードします:リーリー
すべてのリソースメソッドをロードして使用し、パラメータなしで bootstrap() を使用します:リーリー
新しい first_web プロジェクトを作成する
root@coder-671T-M:/mydev_src/zend_framework_learn/www# ツリー first_web/
first_web/
§──アプリ
│ §── Bootstrap.php 默认新建项目后,会给出如下的几个文件: 1.项目的Bootstrap first_web/ 具体代码如下: 2.配置文件 │ ├── configs 具体代码如下: 3.项目入口文件 ├── public 以上代码就是基本的使用Zend_Application方式,完成了环境变量的初始化,加载配置文件,初始化环境,加载模块,完成web应用程序的引导功能。 资源插件 资源插件只需要实现Zend_Application_Resource_Resource,或者,更简单的是,继承Zend_Application_Resource_ResourceAbstract。接口如下: 例如 加载使用资源插件 我了提供资源的重用性,可以将资源方法定义为资源插件。。 为了让bootstrap能够识别资源插件,定义资源插件时,需要实现Zend_Application_Bootstrap_ResourceBootstrapper. 接口定义了查找插件,注册插件和加载插件的api: 采用资源插件,不仅可以让资源可以重复利用,同时让bootstrap更简洁,如果要修改,新增资源也无需修改你的bootstrap。 通过实现Zend_Application_Bootstrap_BootstrapAbstract (被 Zend_Application_Bootstrap_Bootstrap 继承) ,才可以使用定义的资源插件 通过将指定的选项传递到application object and/or bootstrap,来注册使用资源插件。这些选项可能会从一个配置文件,或通过手动指定。规则是选项必须是键值对,键代表资源名称。资源名称,是资源插件类的类前缀。例如,Zend框架自带的资源类前缀“Zend_Application_Resource_”;任何以下,这都是资源的名称。例如, "FrontController"资源是个特例。他的选项比较特殊。 无论是使用自己的写的资源插件还是使用第三方的资源插件。你必须保证bootstrap能找到他们,bootstrap 内部通过 Zend_Loader_PluginLoader可以让我们只需要指定资源插件的类前缀,值为资源类的类路径便可以轻松注册资源插件。 例如,如果编写的资源插件存放在APPLICATION_PATH/resources/ 下,类前缀为My_Resource. 可以使用如下方法注册加载: 在应用程序中比可以使用指定目录下的资源。 和资源方法类似,通过使用 the bootstrap() 方法可以加载资源插件。加载单一,多个,全部的资源插件的配置方式也类似. 例如: 资源注册表 为了避免资源的重复注册,导致不必要的浪费Zend_Application_Bootstrap_BootstrapAbstract 提供了一个本地注册表对象存储这些资源对象.当你想要存放一个资源的时候,只需要在方法中返回这个资源即可。 为了灵活性,注册表是作为一个内部“容器”存在的。只要是对象都可以存入到容器中。资源名称对应为容器的属性。默认情况下,可以通过Zend_Registry获取实例使用,也可以自定义其他对象。 setContainer() and getContainer() 方法可用于操纵容器本身。getResource($resource) 可用于获取一个指定资源。hasResource($resource) 可以检查资源是否已经注册存在 例如,注册一个view资源: 资源的相关操作: 请注意:注册表容器是不是全局的。这意味着你需要通过访问的bootstrap来获取资源。 Zend_Application_Bootstrap_Bootstrap提供了 run() , 执行了 run() 之后,它会注册为前端控制器参数的“bootstrap”,通过他可以获取路由器,分发器,插件和动作控制器。 具体使用方法: 为了防止重复注册加载资源方法和插件或一些资源可能依赖于其他资源。为了解决这两个问题,Zend_Application_Bootstrap_BootstrapAbstract提供了一个简单的依赖性跟踪机制。 如前所述,所有的资源 - 无论是方法或插件 - 是通过 bootstrap($resource)加载运行的,其中 $resource是资源的名称,或者资源名称数组,或者为空,为空表示加载运行所有资源。 更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 この記事が PHP プログラミングのすべての人に役立つことを願っています。
│ §── 設定
│ │ └─ application.ini
│ §── コントローラー
│ │ §── ErrorController.php
│ │ └─ IndexController.php
│ §── モデル
│ └── 閲覧数
│ §── ヘルパー
│ └── スクリプト
│ §──エラー
|
│ └──インデックス
│ └──index.phtml
§── ドキュメント
│ └── README.txt
§── 図書館
§──公開
│ └──index.php
└── テスト
§──アプリ
│ └──コントローラー
│ └── IndexControllerTest.php
§── bootstrap.php
§── 図書館
└── phpunit.xml
16 ディレクトリ、11 ファイル
zend フレームワークの新しいバージョンでは、Zend_Application と Bootstrap が導入されています。 Zend_Application は、再利用可能なリソースのブートストラップ、汎用およびモジュール式のブートストラップ クラス、および依存関係チェックを提供します。 また、デフォルトで PHP 環境変数と自動ロード機能を設定する役割もあります。
├── application
│ ├── Bootstrap.php
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
│ │ └── application.ini
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
│ └── index.php
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
->run();
interface Zend_Application_Resource_Resource
{
public function __construct($options = null);
public function setBootstrap(
Zend_Application_Bootstrap_Bootstrapper $bootstrap
);
public function getBootstrap();
public function setOptions(array $options);
public function getOptions();
public function init();
}
class My_Resource_View extends Zend_Application_Resource_ResourceAbstract
{
protected $_view;
public function init()
{
// Return view so bootstrap will store it in the registry
return $this->getView();
}
public function getView()
{
if (null === $this->_view) {
$options = $this->getOptions();
$title = '';
if (array_key_exists('title', $options)) {
$title = $options['title'];
unset($options['title']);
}
$view = new Zend_View($options);
$view->doctype('XHTML1_STRICT');
$view->headTitle($title);
$view->headLink()->appendStylesheet('/css/site.css');
$view->headScript()->appendfile('/js/analytics.js');
$viewRenderer =
Zend_Controller_Action_HelperBroker::getStaticHelper(
'ViewRenderer'
);
$viewRenderer->setView($view);
$this->_view = $view;
}
return $this->_view;
}
}
interface Zend_Application_Bootstrap_ResourceBootstrapper
{
public function registerPluginResource($resource, $options = null);
public function unregisterPluginResource($resource);
public function hasPluginResource($resource);
public function getPluginResource($resource);
public function getPluginResources();
public function getPluginResourceNames();
public function setPluginLoader(Zend_Loader_PluginLoader_Interface $loader);
public function getPluginLoader();
}
$application = new Zend_Application(APPLICATION_ENV, array(
'resources' => array(
'FrontController' => array(
'controllerDirectory' => APPLICATION_PATH . '/controllers',
),
),
));
$application = new Zend_Application(APPLICATION_ENV, array(
'pluginPaths' => array(
'My_Resource' => APPLICATION_PATH . '/resources/',
),
'resources' => array(
'FrontController' => array(
'controllerDirectory' => APPLICATION_PATH . '/controllers',
),
),
));
// Execute one:
$bootstrap->bootstrap('FrontController');
// Execute several:
$bootstrap->bootstrap(array('FrontController', 'Foo'));
// Execute all resource methods and plugins:
$bootstrap->bootstrap();
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initView()
{
$view = new Zend_View();
// more initialization...
return $view;
}
}
// Using the has/getResource() pair:
if ($bootstrap->hasResource('view')) {
$view = $bootstrap->getResource('view');
}
// Via the container:
$container = $bootstrap->getContainer();
if (isset($container->view)) {
$view = $container->view;
}
class FooController extends Zend_Controller_Action
{
public function init()
{
$bootstrap = $this->getInvokeArg('bootstrap');
$view = $bootstrap->getResource('view');
// ...
}
}
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initRequest()
{
// Ensure the front controller is initialized
$this->bootstrap('FrontController');
// Retrieve the front controller from the bootstrap registry
$front = $this->getResource('FrontController');
$request = new Zend_Controller_Request_Http();
$request->setBaseUrl('/foo');
$front->setRequest($request);
// Ensure the request is stored in the bootstrap registry
return $request;
}
}
興味がありそうな記事: