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;});