以下是来自ZF manual的_init
Zend_Bootstrap
方法的示例。最后有return
命令:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initView()
{
// Initialize view
$view = new Zend_View();
$view->doctype('XHTML1_STRICT');
$view->headTitle('My First Zend Framework Application');
// Add it to the ViewRenderer
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
'ViewRenderer'
);
$viewRenderer->setView($view);
// Return it, so that it can be stored by the bootstrap
return $view; // Why return is here?
}
}
可以由bootstrap存储
为什么要回来?引导程序存储在哪里以及为什么?什么对象调用此方法以及谁获得结果?如果不回来会怎么样?
更新
在可用资源插件页面in the section about View
上,它们显示了Zend_View
的以下启动方式:
配置选项按the Zend_View options。
示例#22示例视图资源配置
下面是一个示例INI代码段,展示了如何配置视图 资源。
resources.view .encoding =“UTF-8”
resources.view .basePath = APPLICATION_PATH“/ views /”
从View
文件开始application.ini
以及他们在Zend_Application快速入门页面中编写的所有其他资源似乎方便合理。但同时在同一个Zend_Application快速入门页面上,他们说必须从View
启动Bootstrap
:
现在,我们将添加自定义视图资源。初始化视图时 我们要设置HTML DocType和标题的默认值 在HTML头中使用。这可以通过编辑你的 Bootstrap类添加方法:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initView()
{
// Initialize view
$view = new Zend_View();
$view->doctype('XHTML1_STRICT'); // the same operations, I can set this in application.ini
$view->headTitle('My First Zend Framework Application'); // and this too
// Add it to the ViewRenderer
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
'ViewRenderer'
);
$viewRenderer->setView($view);
// Return it, so that it can be stored by the bootstrap
return $view;
}
}
事件对其他资源更有意思,Request
例如here:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initRequest()
{
// Ensure the front controller is initialized
$this->bootstrap('FrontController'); // why to initialized FC here if it is going to be initialized in application.ini anyway like resource.frontController.etc?
// 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;
}
}
因此,他们似乎可以选择以这种方式或那种方式启动资源。但那是哪一个呢?为什么他们混合他们?哪一个更好用?
事实上,我可以从我的FC
中删除关于application.ini
的所有行:
resources.frontController.baseUrl = // some base url
resources.frontController.defaultModule = "Default"
resources.frontController.params.displayExceptions = 1
并将其重写为:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initFrontController()
{
$this->bootstrap('FrontController');
$front = $this->getResource('FrontController');
$front->set ...
$front->set ... // and here I set all necessary options
return $front;
}
}
application.ini
方式与_initResource
方式有何区别?这种差异是否意味着工作中的某些事情?
答案 0 :(得分:1)
虽然经过一段时间后你会得到你的答案。 但是我会尽力回答你的问题。
1.为什么要回来?
虽然没有必要返回,但它不是强制性的。返回仅用于存储
zend容器中的变量通常是Zend注册表。这个存储的变量可以在任何需要的地方访问。如果你没有返回它唯一的区别就是你将无法在任何地方获取变量。
在撰写答案时,在zend手册中找到以下内容。这肯定会有所帮助。
作为示例,请考虑基本视图资源:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initView()
{
$view = new Zend_View();
// more initialization...
return $view;
}
}
You can then check for it and/or fetch it as follows:
// 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;
}
2.引导程序存储在哪里以及为什么?
我认为第一个回答了这个问题。
3.什么对象调用此方法以及谁获得结果?
Application对象通常(在最开始时)调用引导程序,您也可以通过该对象调用各个资源方法。但是如果在调用bootstrap方法时没有指定任何参数,那么所有资源方法(例如_initView(),_ initRouters())都将被执行
4.如果没有回报将会发生什么。
我认为1回答。
这几乎包含了您正在寻找的所有答案。 http://framework.zend.com/manual/1.12/en/zend.application.theory-of-operation.html
希望它有所帮助。
更新:
看到你的更新.. 实际上,我认为这是一个选择问题。
您想要定义资源的位置取决于您。
正在开发一个项目,其中只在application.ini文件中定义了基本资源,并且大部分资源都是从bootstrap中加载的......
再次选择它,但是在使用引导程序加载资源时会觉得舒适和灵活(例如定义自定义路由等)。
这就是我的感受。