我正在使用 Symfony v 2.8,它使用捆绑类函数来处理网页请求。
我创建了一个包含文件,我使用require语句加载该文件,该语句隔离了我用来创建通过我的网络应用程序使用的几个变量的代码,例如我的网络应用程序的路径,网站是否正在运行在开发或生产环境中,以及导航到我的网站中的页面或我的网站中的页面之间的网站的 URI。目前,这些变量是需要包含文件的函数的本地变量,因此我必须在需要这些变量的每个函数中重新包含文件。
我的目标是:
仅将此文件包含在为处理网页请求而执行的捆绑 xxxxAction 函数中。
在 bundle xxxxAction 函数中创建后,在 bundle xxxAction 函数调用的所有函数或它们调用的函数中都可以看到变量,而无需像_POST一样将它们前缀为SELF::。
在 xxxAction 捆绑函数以外的函数中,我宁愿不必使用全局语句或 $GLOBALS 关联数组。
将这些变量设为只读或常量,以便在包含文件中设置后无法修改。
我的网站有很多页面,每个页面都有自己的捆绑操作功能,每个都需要包含文件。
我已经在 php.net 网站上查看了变量范围,但除非我错过了什么,否则我没有看到如何创建 Supper-Global 只读变量。
这是我用来创建局部变量的代码:
$request = $this->get( 'request_stack' )->getCurrentRequest();
$session = $request->getSession();
$context = $this->container->get( 'router' )->getContext();
$site = $this->get( 'request' )->getSchemeAndHttpHost();
//
// The regular expression checks if the referring web-spage's URL matches one of
// following:
//
// http://mysite.name.com/app.php or
// http://mysite.dev.name.com/app_dev.php or
// https://mysite.name.com/app.php or
// https://mysite.dev.name.com/app_dev.php.
//
$isFromMySite = ( preg_match( '/https?:\/\/mysite.(dev\.)?name.com\/app(_dev)?.php/',
$_SERVER[ 'HTTP_REFERER' ] ) === 1 );
// baseURL: /app{_dev}.php True = Development Environment, False = Production Environment.
$baseURL = $context->getBaseUrl();
$isDev = ( $baseURL == '/app_dev.php' );
$isProd = ( $baseURL == '/app.php' );
谢谢你。