8f9af3a23a
* 2.3: [2.3] [HttpFoundation] [MimeTypeGuesser] Removed dead code and various cleaning [Console] Make it clear that the second argument is not about command options. Added the '-' character for spaceless on tag start and end to be consistent for block, if, set and for nodes [Yaml] fixed parse shortcut Key after unindented collection. [Console] fixed #10531 Make the container considered non-fresh if the environment parameters are changed Conflicts: src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig src/Symfony/Bridge/Twig/Resources/views/Form/form_table_layout.html.twig src/Symfony/Component/Console/Tests/ApplicationTest.php src/Symfony/Component/Security/Core/Authentication/Provider/PreAuthenticatedAuthenticationProvider.php
126 lines
2.2 KiB
PHP
126 lines
2.2 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Symfony\Bridge\Twig\NodeVisitor;
|
|
|
|
/**
|
|
* @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
|
|
*/
|
|
class Scope
|
|
{
|
|
/**
|
|
* @var Scope|null
|
|
*/
|
|
private $parent;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
private $data = array();
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
private $left = false;
|
|
|
|
/**
|
|
* @param Scope $parent
|
|
*/
|
|
public function __construct(Scope $parent = null)
|
|
{
|
|
$this->parent = $parent;
|
|
}
|
|
|
|
/**
|
|
* Opens a new child scope.
|
|
*
|
|
* @return Scope
|
|
*/
|
|
public function enter()
|
|
{
|
|
return new self($this);
|
|
}
|
|
|
|
/**
|
|
* Closes current scope and returns parent one.
|
|
*
|
|
* @return Scope|null
|
|
*/
|
|
public function leave()
|
|
{
|
|
$this->left = true;
|
|
|
|
return $this->parent;
|
|
}
|
|
|
|
/**
|
|
* Stores data into current scope.
|
|
*
|
|
* @param string $key
|
|
* @param mixed $value
|
|
*
|
|
* @throws \LogicException
|
|
*
|
|
* @return Scope Current scope
|
|
*/
|
|
public function set($key, $value)
|
|
{
|
|
if ($this->left) {
|
|
throw new \LogicException('Left scope is not mutable.');
|
|
}
|
|
|
|
$this->data[$key] = $value;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Tests if a data is visible from current scope.
|
|
*
|
|
* @param string $key
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function has($key)
|
|
{
|
|
if (array_key_exists($key, $this->data)) {
|
|
return true;
|
|
}
|
|
|
|
if (null === $this->parent) {
|
|
return false;
|
|
}
|
|
|
|
return $this->parent->has($key);
|
|
}
|
|
|
|
/**
|
|
* Returns data visible from current scope.
|
|
*
|
|
* @param string $key
|
|
* @param mixed $default
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function get($key, $default = null)
|
|
{
|
|
if (array_key_exists($key, $this->data)) {
|
|
return $this->data[$key];
|
|
}
|
|
|
|
if (null === $this->parent) {
|
|
return $default;
|
|
}
|
|
|
|
return $this->parent->get($key, $default);
|
|
}
|
|
}
|