zend application.php,Zend Framework教程之Application和Bootstrap用法详解_PHP

2.配置文件

│ ├── configs

│ │ └── 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

3.项目入口文件

├── public

│ └── index.php

bootstrap()

->run();

以上代码就是基本的使用Zend_Application方式,完成了环境变量的初始化,加载配置文件,初始化环境,加载模块,完成web应用程序的引导功能。

资源插件

资源插件只需要实现Zend_Application_Resource_Resource,或者,更简单的是,继承Zend_Application_Resource_ResourceAbstract。接口如下:

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;

}

}

加载使用资源插件

我了提供资源的重用性,可以将资源方法定义为资源插件。。

为了让bootstrap能够识别资源插件,定义资源插件时,需要实现Zend_Application_Bootstrap_ResourceBootstrapper. 接口定义了查找插件,注册插件和加载插件的api:

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();

}

采用资源插件,不仅可以让资源可以重复利用,同时让bootstrap更简洁,如果要修改,新增资源也无需修改你的bootstrap。

通过实现Zend_Application_Bootstrap_BootstrapAbstract (被 Zend_Application_Bootstrap_Bootstrap 继承) ,才可以使用定义的资源插件

通过将指定的选项传递到application object and/or bootstrap,来注册使用资源插件。这些选项可能会从一个配置文件,或通过手动指定。规则是选项​​必须是键值对,键代表资源名称。资源名称,是资源插件类的类前缀。例如,Zend框架自带的资源类前缀“Zend_Application_Resource_”;任何以下,这都是资源的名称。例如,

$application = new Zend_Application(APPLICATION_ENV, array(

'resources' => array(

'FrontController' => array(

'controllerDirectory' => APPLICATION_PATH . '/controllers',

),

),

));

"FrontController"资源是个特例。他的选项比较特殊。

无论是使用自己的写的资源插件还是使用第三方的资源插件。你必须保证bootstrap能找到他们,bootstrap 内部通过 Zend_Loader_PluginLoader可以让我们只需要指定资源插件的类前缀,值为资源类的类路径便可以轻松注册资源插件。

例如,如果编写的资源插件存放在APPLICATION_PATH/resources/ 下,类前缀为My_Resource. 可以使用如下方法注册加载:

$application = new Zend_Application(APPLICATION_ENV, array(

'pluginPaths' => array(

'My_Resource' => APPLICATION_PATH . '/resources/',

),

'resources' => array(

'FrontController' => array(

'controllerDirectory' => APPLICATION_PATH . '/controllers',

),

),

));

在应用程序中比可以使用指定目录下的资源。

和资源方法类似,通过使用 the bootstrap() 方法可以加载资源插件。加载单一,多个,全部的资源插件的配置方式也类似.

例如:

// Execute one:

$bootstrap->bootstrap('FrontController');

// Execute several:

$bootstrap->bootstrap(array('FrontController', 'Foo'));

// Execute all resource methods and plugins:

$bootstrap->bootstrap();

资源注册表

为了避免资源的重复注册,导致不必要的浪费Zend_Application_Bootstrap_BootstrapAbstract 提供了一个本地注册表对象存储这些资源对象.当你想要存放一个资源的时候,只需要在方法中返回这个资源即可。

为了灵活性,注册表是作为一个内部“容器”存在的。只要是对象都可以存入到容器中。资源名称对应为容器的属性。默认情况下,可以通过Zend_Registry获取实例使用,也可以自定义其他对象。 setContainer() and getContainer() 方法可用于操纵容器本身。getResource($resource) 可用于获取一个指定资源。hasResource($resource) 可以检查资源是否已经注册存在

例如,注册一个view资源:

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;

}

请注意:注册表容器是不是全局的。这意味着你需要通过访问的bootstrap来获取资源。 Zend_Application_Bootstrap_Bootstrap提供了 run() , 执行了 run() 之后,它会注册为前端控制器参数的“bootstrap”,通过他可以获取路由器,分发器,插件和动作控制器。

具体使用方法:

class FooController extends Zend_Controller_Action

{

public function init()

{

$bootstrap = $this->getInvokeArg('bootstrap');

$view = $bootstrap->getResource('view');

// ...

}

}

为了防止重复注册加载资源方法和插件或一些资源可能依赖于其他资源。为了解决这两个问题,Zend_Application_Bootstrap_BootstrapAbstract提供了一个简单的依赖性跟踪机制。

如前所述,所有的资源 - 无论是方法或插件 - 是通过 bootstrap($resource)加载运行的,其中 $resource是资源的名称,或者资源名称数组,或者为空,为空表示加载运行所有资源。

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;

}

}

更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值