이 글은 주로 Zend Framework 튜토리얼에서 Application과 Bootstrap의 사용법을 예시로 자세하게 분석하고, 사용법과 관련 주의사항이 필요한 친구들이 참고할 수 있습니다. Zend Framework 튜토리얼을 애플리케이션 및 부트스트랩 사용법에 대해 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
MVC 애플리케이션에서는 데이터베이스 링크를 초기화 및 설정하고, 보기 및 보기 도우미를 구성하고, 레이아웃을 구성하고, 관련 플러그인을 등록하고, 작업 도우미를 등록하고, 등등 이런 구성과 준비는 우리 모두가 하나씩 해야 합니다. 때로는 일부 초기화 작업이 필요할 수도 있지만 어떤 경우에는 이러한 초기화가 필요하지 않을 수도 있습니다. Zend_Application은 이러한 작업을 완료할 수 있을 뿐만 아니라 이러한 구성 및 초기화 작업을 보다 통합되고 질서 있게 만들어 재사용성을 높일 수 있습니다.
Zend_Application 사용법은 세 가지 유형으로 나눌 수 있습니다.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 초기화 설정
부트스트랩 클래스 이름을 지정합니다. is not "Bootstrap"
리소스의 접두사 키-값 쌍은 리소스 접두사 이름을 나타냅니다.
리소스의 클래스 이름 또는 별칭
추가 로드된 구성 파일 경로
추가 구성 옵션
옵션은 다음과 같을 수 있습니다. 배열 또는 Zend_Config 개체 또는 지정된 위치의 구성 파일
BootstrapZend_Application의 두 번째 기능은 애플리케이션을 안내하는 것입니다. 부트스트랩은 Zend_Application_Bootstrap_Bootstrapper 인터페이스를 구현해야 합니다.
interface Zend_Application_Bootstrap_Bootstrapper { public function __construct($application); public function setOptions(array $options); public function getApplication(); public function getEnvironment(); public function getClassResources(); public function getClassResourceNames(); public function bootstrap($resource = null); public function run(); }
api는 주로 환경 구성을 제공하고 지침을 얻습니다. 로드된 리소스 및 bootstrap
인터페이스를 구현하거나 Zend_Application_Bootstrap_BootstrapAbstract 또는 Zend_Application_Bootstrap_Bootstrap을 상속할 수 있습니다.
Resource 메서드Zend_Application_Bootstrap_BootstrapAbstract 인터페이스를 구현하는 리소스 메서드는 다음 규칙을 따라야 합니다. . 메서드 유형은 보호됩니다. 접두사는 _이어야 합니다. init will로 시작합니다.
리소스 메서드를 로드하여 사용하려면 bootstrap()에 리소스 이름을 추가하면 됩니다. 리소스 이름은 _init 접두사가 없는 리소스 메서드입니다. .
여러 리소스 메서드를 로드하려면 배열을 통해 지정할 수 있습니다.
예를 들어 bootstrap 클래스:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initFoo() { // ... } protected function _initBar() { // ... } protected function _initBaz() { // ... } }
_initFoo()만 사용하여 로드:
$bootstrap->bootstrap('foo');
_initFoo() 및 _initBar()를 사용하여 로드:
$bootstrap->bootstrap(array('foo', 'bar'));
모든 리소스 메서드를 사용하여 로드, 매개 변수 없이 bootstrap() 사용:
$bootstrap->bootstrap();
새로운 first_web 프로젝트
root@coder-671T-M:/mydev_src/zend_framework_learn/www# tree first_web/first_web/├── application
│ ├── Bootstrap.php
│ ├── configs
│ │ └ ── application.ini
│ ├── 컨트롤러
│ │ ├── ErrorController.php
│ │ └── IndexController.php
│ ├── models
│ └── views
│ ├── 헬퍼
│ └ ── scripts
│ ├── error
│ │ └── error.phtml
│ └── index
│
├── docs
│ └── README.txt
├── library
├── public
│ └── index.php
└── 테스트
├── 애플리케이션
│ └── 컨트롤러
│ └── IndexControllerTest.php
├── bootstrap.php
├── 라이브러리
└── phpunit.xml
디렉터리 16개, 파일 11개
최신 버전의 zend 프레임워크에는 Zend_Application 및 Bootstrap이 도입되었습니다. Zend_Application은 재사용 가능한 리소스의 부트스트랩, 일반 및 모듈식 부트스트랩 클래스 및 종속성 검사를 제공합니다. 또한 기본적으로 PHP 환경 변수 및 자동 로딩 기능을 설정하는 역할도 담당합니다.
默认新建项目后,会给出如下的几个文件:
1.项目的Bootstrap
first_web/
├── application
│ ├── Bootstrap.php
具体代码如下:
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }
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
<?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();
以上代码就是基本的使用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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
Zend Framework中Zend_View组件的用法解析
사용 분석
위 내용은 Zend Framework의 애플리케이션 및 부트스트랩 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!