Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Slim框架和应用程序键值变量_Php_Dependency Injection_Scope_Slim - Fatal编程技术网

Php Slim框架和应用程序键值变量

Php Slim框架和应用程序键值变量,php,dependency-injection,scope,slim,Php,Dependency Injection,Scope,Slim,我正在尝试,在视图中使用变量时遇到了困难。我了解整个作用域方面,但我不确定如何在不将变量重复放入方法第二个参数的数组中的情况下实现这一点 以下是我所拥有的: $app = new \Slim\Slim(); $app->antiXSS = new \Zend\Escaper\Escaper('UTF-8'); $app->things = new \MyApp\Foo(); $app->get('/fruits', function () use ($app) {

我正在尝试,在视图中使用变量时遇到了困难。我了解整个作用域方面,但我不确定如何在不将变量重复放入方法第二个参数的数组中的情况下实现这一点

以下是我所拥有的:

$app = new \Slim\Slim();

$app->antiXSS = new \Zend\Escaper\Escaper('UTF-8');
$app->things = new \MyApp\Foo();

$app->get('/fruits', function () use ($app) {
    $app->render('_header.php');
    $app->render('fruits.php');
});

// more of the same things and POST and PUT as well

$app->run();
fruits.php
和其他视图中,我想访问Zend Escaper(
$app->antiXSS
),但我不知道如何在不重复任何操作的情况下继续进行

以下是我想要避免的: 我想避免的另一种选择是:
//fruits.php
水果

这两种选择似乎都相当混乱和非正统。显然,我已经将示例简化为两个变量(
antiXSS
things
),但我将在
$app
中存储许多模板和变量(XSS预防、会话、CSRF令牌等等)


解决这个问题的最好办法是什么

您可以使用苗条的单身汉。例如:

$app->container->singleton('v', function() {return new Respect\Validation\Validator;});

// fruits.php

<h1>Fruits</h1>

<p><?php echo $GLOBALS['app']->antiXSS->escapeHtml($textAboutFruits); ?></p>
$app->container->singleton('v', function() {return new Respect\Validation\Validator;});