在我的zend框架应用程序引导并运行之前,我需要运行一次php脚本。现在通过在/public/index.php中调用此初始脚本来工作,但是脚本也会针对所有后续的zend框架页面请求运行。我需要这个脚本只在初始请求上运行一次,而不是在通过ajax加载其他页面时再次运行。
我最初的尝试是在/public/index.php文件中设置一些php常量,如下所示:
if(!defined('SOME_VAR'))require_once'path / to / script / to / run / once.php'; define('SOME_VAR','1);
但是,当通过ajax加载另一个页面时,即使我已经定义了'SOME_VAR',它也不会持久存在并保持定义,并且脚本会再次执行。
我正在使用Zend Framework 1.11,Apache(Xampp)。
在Zend被引导并运行(Zend Framework内部)之后执行此脚本不是一个选项。
答案 0 :(得分:1)
根据Zend Framework Documentation:
但是,如果需要自定义初始化,您有两种选择。首先,您可以编写以_init为前缀的方法来指定用于引导的离散代码。这些方法将由bootstrap()调用,也可以像调用公共方法一样调用:bootstrap()。他们应该接受一个可选的选项数组。 如果您的资源方法返回一个值,它将存储在引导程序的容器中。当不同的资源需要交互时(例如一个资源将自身注入另一个资源),这可能很有用。然后可以使用方法getResource()来检索这些值。
另一种选择是使用资源插件。资源插件是执行特定初始化的对象,可以指定:
资源插件实现了Zend_Application_Resource_ResourceAbstract,它简单地定义了它们允许注入调用者和选项,并且他们有一个init()方法。
答案 1 :(得分:1)
常量不起作用,因为它们仅在请求期间存在。
听起来您想知道当前请求是常规请求还是XmlHttpRequest(AJAX)请求。
你可以在index.php的顶部尝试类似的东西:
<?php
define('IS_AJAX_REQUEST', isset($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
if (! IS_AJAX_REQUEST){
// run your code.
}
如果你正在使用会话,你也可以在运行特殊代码后在会话中设置一个标志,并测试它。