gpt4 book ai didi

php - 不使用 Zend_Application 的 Zend Framework 项目

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:09:34 26 4
gpt4 key购买 nike

我一直在阅读许多 sites甚至 here为了提高 Zend Framework 应用程序的性能,不在 bootstrap 中使用 Zend_Application,但一直没能找到有此演示的站点。

你们知道有什么地方描述了这种方法并且可能会为我提供一些代码示例吗?

谢谢

最佳答案

我只是把它放在一起:

https://gist.github.com/2822456

为完成转载如下。未经测试,只是一些关于我认为它通常 (!) 可能有效的想法。现在我已经稍微了解了它,我对 Zend_Application、它的 Bootstrap 类和它的可配置/可重用应用程序资源有了更大的赞赏。 ;-)

// Do your PHP settings like timezone, error reporting
// ..

// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/_zf/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(),
)));

// Get autoloading in place
require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
// Any additional configs to autoloader, like custom autoloaders

// Read config
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', APPLICATION_ENV);

// bootstrap resources manually:
// * create db adapter
// * create resource autoloaders with the mappings you need
// * etc

// Get the singleton front controller
$front = Zend_Controller_Front::getInstance();

// Set controller directory
$front->setControllerDirectory(APPLICATION_PATH . '/controllers');

// Or set module directory
$front->setModuleDirectory(APPLICATION_PATH . '/modules');

// Other front config, like throw exceptions, etc.
// ...
//
// Create a router
$router = new Zend_Controller_Router_Rewrite();

// Add routes to the router
$router->addRoute('myRoute', new Zend_Controller_Router_Route(array(
// your routing params
)));
// More routes...
// Alternatively, the routes can all be in an xml or ini file and you can add
// them all at once.

// Tell front to use our configured router
$front->setRouter($router);

// Add an plugins to your $front
$front->registerPlugin(new My_Plugin());
// other plugins...

// Dispatch the request
$front->dispatch();

可能还有一些 View/ViewRenderer 的事情要做。但正如在其他地方指出的那样,ViewRenderer 会导致严重的性能损失。如果性能是问题,那么您需要禁用 ViewRenderer 并使用 $this->view->render('my/view-script.phtml') 让您的 Action Controller 调用它们自己的渲染>

当您调用$front->dispatch() 时,$request$response 对象将自动创建。如果你想在 Bootstrap 中做一些特定于它们的事情——比如在响应的 Content-Type 头中设置字符集——那么你可以自己创建你的请求/响应对象,做你想做的,然后将它附加到前面与 $front->setResponse($response); 请求对象相同。

尽管我看到我的示例使用了 Zend_Loader_AutoloaderZend_config_Ini,但 Padraic 指出这会导致性能下降。下一步将通过使用数组进行配置、从框架中剥离 require_once 调用、注册不同的自动加载器等来解决这些问题,这是留给读者的练习……;-)

关于php - 不使用 Zend_Application 的 Zend Framework 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10791540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com