Linux cesa-www-main 6.1.0-49-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
Apache/2.4.68 (Debian)
Server IP : 10.218.0.2 & Your IP : 216.73.217.117
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
var /
www /
v3.cesa.co.za /
vendor /
symfony /
form /
Delete
Unzip
Name
Size
Permission
Date
Action
ChoiceList
[ DIR ]
drwxrwxr-x
2026-08-17 03:12
Command
[ DIR ]
drwxrwxr-x
2026-08-17 03:12
Console
[ DIR ]
drwxrwxr-x
2026-08-17 03:12
DependencyInjection
[ DIR ]
drwxrwxr-x
2026-08-17 03:12
Event
[ DIR ]
drwxrwxr-x
2026-08-17 03:12
Exception
[ DIR ]
drwxrwxr-x
2026-08-17 03:12
Extension
[ DIR ]
drwxrwxr-x
2026-08-17 03:12
Guess
[ DIR ]
drwxrwxr-x
2026-08-17 03:12
Resources
[ DIR ]
drwxrwxr-x
2026-08-17 03:12
Test
[ DIR ]
drwxrwxr-x
2026-08-17 03:12
Util
[ DIR ]
drwxrwxr-x
2026-08-17 03:12
.htaccess
237
B
-r-xr-xr-x
2026-08-17 03:12
AbstractExtension.php
4.46
KB
-rwxrwxr-x
2026-03-13 14:59
AbstractRendererEngine.php
7.79
KB
-rwxrwxr-x
2026-03-13 14:59
AbstractType.php
1.3
KB
-rwxrwxr-x
2026-03-13 14:59
AbstractTypeExtension.php
970
B
-rwxrwxr-x
2026-03-13 14:59
Button.php
7.93
KB
-rwxrwxr-x
2026-03-13 14:59
ButtonBuilder.php
15.71
KB
-rwxrwxr-x
2026-03-13 14:59
ButtonTypeInterface.php
462
B
-rwxrwxr-x
2026-03-13 14:59
CHANGELOG.md
32.58
KB
-rwxrwxr-x
2026-03-13 14:59
CallbackTransformer.php
832
B
-rwxrwxr-x
2026-03-13 14:59
ClearableErrorsInterface.php
648
B
-rwxrwxr-x
2026-03-13 14:59
ClickableInterface.php
501
B
-rwxrwxr-x
2026-03-13 14:59
DataAccessorInterface.php
1.57
KB
-rwxrwxr-x
2026-03-13 14:59
DataMapperInterface.php
2.47
KB
-rwxrwxr-x
2026-03-13 14:59
DataTransformerInterface.php
3.89
KB
-rwxrwxr-x
2026-03-13 14:59
FileUploadError.php
338
B
-rwxrwxr-x
2026-03-13 14:59
Form.php
36.11
KB
-rwxrwxr-x
2026-03-13 14:59
FormBuilder.php
6.85
KB
-rwxrwxr-x
2026-03-13 14:59
FormBuilderInterface.php
1.86
KB
-rwxrwxr-x
2026-03-13 14:59
FormConfigBuilder.php
18.16
KB
-rwxrwxr-x
2026-03-13 14:59
FormConfigBuilderInterface.php
7.15
KB
-rwxrwxr-x
2026-03-13 14:59
FormConfigInterface.php
5.13
KB
-rwxrwxr-x
2026-03-13 14:59
FormError.php
3.14
KB
-rwxrwxr-x
2026-03-13 14:59
FormErrorIterator.php
7.39
KB
-rwxrwxr-x
2026-03-13 14:59
FormEvent.php
1.05
KB
-rwxrwxr-x
2026-03-13 14:59
FormEvents.php
4.02
KB
-rwxrwxr-x
2026-03-13 14:59
FormExtensionInterface.php
1.4
KB
-rwxrwxr-x
2026-03-13 14:59
FormFactory.php
3.76
KB
-rwxrwxr-x
2026-03-13 14:59
FormFactoryBuilder.php
3.85
KB
-rwxrwxr-x
2026-03-13 14:59
FormFactoryBuilderInterface.php
2.35
KB
-rwxrwxr-x
2026-03-13 14:59
FormFactoryInterface.php
3.06
KB
-rwxrwxr-x
2026-03-13 14:59
FormInterface.php
9.26
KB
-rwxrwxr-x
2026-03-13 14:59
FormRegistry.php
4.57
KB
-rwxrwxr-x
2026-03-13 14:59
FormRegistryInterface.php
1.13
KB
-rwxrwxr-x
2026-03-13 14:59
FormRenderer.php
11.84
KB
-rwxrwxr-x
2026-03-13 14:59
FormRendererEngineInterface.php
6.11
KB
-rwxrwxr-x
2026-03-13 14:59
FormRendererInterface.php
3
KB
-rwxrwxr-x
2026-03-13 14:59
FormTypeExtensionInterface.php
1.71
KB
-rwxrwxr-x
2026-03-13 14:59
FormTypeGuesserChain.php
2.55
KB
-rwxrwxr-x
2026-03-13 14:59
FormTypeGuesserInterface.php
1.09
KB
-rwxrwxr-x
2026-03-13 14:59
FormTypeInterface.php
2.89
KB
-rwxrwxr-x
2026-03-13 14:59
FormView.php
3.46
KB
-rwxrwxr-x
2026-03-13 14:59
Forms.php
2.73
KB
-rwxrwxr-x
2026-03-13 14:59
LICENSE
1.04
KB
-rwxrwxr-x
2026-03-13 14:59
NativeRequestHandler.php
7.33
KB
-rwxrwxr-x
2026-03-13 14:59
PreloadedExtension.php
1.97
KB
-rwxrwxr-x
2026-03-13 14:59
README.md
483
B
-rwxrwxr-x
2026-03-13 14:59
RequestHandlerInterface.php
705
B
-rwxrwxr-x
2026-03-13 14:59
ResolvedFormType.php
5.32
KB
-rwxrwxr-x
2026-03-13 14:59
ResolvedFormTypeFactory.php
649
B
-rwxrwxr-x
2026-03-13 14:59
ResolvedFormTypeFactoryInterface.php
1.15
KB
-rwxrwxr-x
2026-03-13 14:59
ResolvedFormTypeInterface.php
2.17
KB
-rwxrwxr-x
2026-03-13 14:59
ReversedTransformer.php
1008
B
-rwxrwxr-x
2026-03-13 14:59
SubmitButton.php
1.07
KB
-rwxrwxr-x
2026-03-13 14:59
SubmitButtonBuilder.php
592
B
-rwxrwxr-x
2026-03-13 14:59
SubmitButtonTypeInterface.php
474
B
-rwxrwxr-x
2026-03-13 14:59
composer.json
2.25
KB
-rwxrwxr-x
2026-03-13 14:59
Save
Rename
<?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\Component\Form; use Symfony\Component\Form\Exception\BadMethodCallException; use Symfony\Component\Form\Exception\LogicException; use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; use Twig\Environment; /** * Renders a form into HTML using a rendering engine. * * @author Bernhard Schussek <bschussek@gmail.com> */ class FormRenderer implements FormRendererInterface { public const CACHE_KEY_VAR = 'unique_block_prefix'; private FormRendererEngineInterface $engine; private ?CsrfTokenManagerInterface $csrfTokenManager; private array $blockNameHierarchyMap = []; private array $hierarchyLevelMap = []; private array $variableStack = []; public function __construct(FormRendererEngineInterface $engine, ?CsrfTokenManagerInterface $csrfTokenManager = null) { $this->engine = $engine; $this->csrfTokenManager = $csrfTokenManager; } public function getEngine(): FormRendererEngineInterface { return $this->engine; } /** * @return void */ public function setTheme(FormView $view, mixed $themes, bool $useDefaultThemes = true) { $this->engine->setTheme($view, $themes, $useDefaultThemes); } public function renderCsrfToken(string $tokenId): string { if (null === $this->csrfTokenManager) { throw new BadMethodCallException('CSRF tokens can only be generated if a CsrfTokenManagerInterface is injected in FormRenderer::__construct(). Try running "composer require symfony/security-csrf".'); } return $this->csrfTokenManager->getToken($tokenId)->getValue(); } public function renderBlock(FormView $view, string $blockName, array $variables = []): string { $resource = $this->engine->getResourceForBlockName($view, $blockName); if (!$resource) { throw new LogicException(\sprintf('No block "%s" found while rendering the form.', $blockName)); } $viewCacheKey = $view->vars[self::CACHE_KEY_VAR]; // The variables are cached globally for a view (instead of for the // current suffix) if (!isset($this->variableStack[$viewCacheKey])) { $this->variableStack[$viewCacheKey] = []; // The default variable scope contains all view variables, merged with // the variables passed explicitly to the helper $scopeVariables = $view->vars; $varInit = true; } else { // Reuse the current scope and merge it with the explicitly passed variables $scopeVariables = end($this->variableStack[$viewCacheKey]); $varInit = false; } // Merge the passed with the existing attributes if (isset($variables['attr']) && isset($scopeVariables['attr'])) { $variables['attr'] = array_replace($scopeVariables['attr'], $variables['attr']); } // Merge the passed with the exist *label* attributes if (isset($variables['label_attr']) && isset($scopeVariables['label_attr'])) { $variables['label_attr'] = array_replace($scopeVariables['label_attr'], $variables['label_attr']); } // Do not use array_replace_recursive(), otherwise array variables // cannot be overwritten $variables = array_replace($scopeVariables, $variables); $this->variableStack[$viewCacheKey][] = $variables; // Do the rendering $html = $this->engine->renderBlock($view, $resource, $blockName, $variables); // Clear the stack array_pop($this->variableStack[$viewCacheKey]); if ($varInit) { unset($this->variableStack[$viewCacheKey]); } return $html; } public function searchAndRenderBlock(FormView $view, string $blockNameSuffix, array $variables = []): string { $renderOnlyOnce = 'row' === $blockNameSuffix || 'widget' === $blockNameSuffix; if ($renderOnlyOnce && $view->isRendered()) { // This is not allowed, because it would result in rendering same IDs multiple times, which is not valid. throw new BadMethodCallException(\sprintf('Field "%s" has already been rendered, save the result of previous render call to a variable and output that instead.', $view->vars['name'])); } // The cache key for storing the variables and types $viewCacheKey = $view->vars[self::CACHE_KEY_VAR]; $viewAndSuffixCacheKey = $viewCacheKey.$blockNameSuffix; // In templates, we have to deal with two kinds of block hierarchies: // // +---------+ +---------+ // | Theme B | -------> | Theme A | // +---------+ +---------+ // // form_widget -------> form_widget // ^ // | // choice_widget -----> choice_widget // // The first kind of hierarchy is the theme hierarchy. This allows to // override the block "choice_widget" from Theme A in the extending // Theme B. This kind of inheritance needs to be supported by the // template engine and, for example, offers "parent()" or similar // functions to fall back from the custom to the parent implementation. // // The second kind of hierarchy is the form type hierarchy. This allows // to implement a custom "choice_widget" block (no matter in which theme), // or to fallback to the block of the parent type, which would be // "form_widget" in this example (again, no matter in which theme). // If the designer wants to explicitly fallback to "form_widget" in their // custom "choice_widget", for example because they only want to wrap // a <div> around the original implementation, they can call the // widget() function again to render the block for the parent type. // // The second kind is implemented in the following blocks. if (!isset($this->blockNameHierarchyMap[$viewAndSuffixCacheKey])) { // INITIAL CALL // Calculate the hierarchy of template blocks and start on // the bottom level of the hierarchy (= "_<id>_<section>" block) $blockNameHierarchy = []; foreach ($view->vars['block_prefixes'] as $blockNamePrefix) { $blockNameHierarchy[] = $blockNamePrefix.'_'.$blockNameSuffix; } $hierarchyLevel = \count($blockNameHierarchy) - 1; $hierarchyInit = true; } else { // RECURSIVE CALL // If a block recursively calls searchAndRenderBlock() again, resume rendering // using the parent type in the hierarchy. $blockNameHierarchy = $this->blockNameHierarchyMap[$viewAndSuffixCacheKey]; $hierarchyLevel = $this->hierarchyLevelMap[$viewAndSuffixCacheKey] - 1; $hierarchyInit = false; } // The variables are cached globally for a view (instead of for the // current suffix) if (!isset($this->variableStack[$viewCacheKey])) { $this->variableStack[$viewCacheKey] = []; // The default variable scope contains all view variables, merged with // the variables passed explicitly to the helper $scopeVariables = $view->vars; $varInit = true; } else { // Reuse the current scope and merge it with the explicitly passed variables $scopeVariables = end($this->variableStack[$viewCacheKey]); $varInit = false; } // Load the resource where this block can be found $resource = $this->engine->getResourceForBlockNameHierarchy($view, $blockNameHierarchy, $hierarchyLevel); // Update the current hierarchy level to the one at which the resource was // found. For example, if looking for "choice_widget", but only a resource // is found for its parent "form_widget", then the level is updated here // to the parent level. $hierarchyLevel = $this->engine->getResourceHierarchyLevel($view, $blockNameHierarchy, $hierarchyLevel); // The actually existing block name in $resource $blockName = $blockNameHierarchy[$hierarchyLevel]; // Escape if no resource exists for this block if (!$resource) { if (\count($blockNameHierarchy) !== \count(array_unique($blockNameHierarchy))) { throw new LogicException(\sprintf('Unable to render the form because the block names array contains duplicates: "%s".', implode('", "', array_reverse($blockNameHierarchy)))); } throw new LogicException(\sprintf('Unable to render the form as none of the following blocks exist: "%s".', implode('", "', array_reverse($blockNameHierarchy)))); } // Merge the passed with the existing attributes if (isset($variables['attr']) && isset($scopeVariables['attr'])) { $variables['attr'] = array_replace($scopeVariables['attr'], $variables['attr']); } // Merge the passed with the exist *label* attributes if (isset($variables['label_attr']) && isset($scopeVariables['label_attr'])) { $variables['label_attr'] = array_replace($scopeVariables['label_attr'], $variables['label_attr']); } // Do not use array_replace_recursive(), otherwise array variables // cannot be overwritten $variables = array_replace($scopeVariables, $variables); // In order to make recursive calls possible, we need to store the block hierarchy, // the current level of the hierarchy and the variables so that this method can // resume rendering one level higher of the hierarchy when it is called recursively. // // We need to store these values in maps (associative arrays) because within a // call to widget() another call to widget() can be made, but for a different view // object. These nested calls should not override each other. $this->blockNameHierarchyMap[$viewAndSuffixCacheKey] = $blockNameHierarchy; $this->hierarchyLevelMap[$viewAndSuffixCacheKey] = $hierarchyLevel; // We also need to store the variables for the view so that we can render other // blocks for the same view using the same variables as in the outer block. $this->variableStack[$viewCacheKey][] = $variables; // Do the rendering $html = $this->engine->renderBlock($view, $resource, $blockName, $variables); // Clear the stack array_pop($this->variableStack[$viewCacheKey]); // Clear the caches if they were filled for the first time within // this function call if ($hierarchyInit) { unset($this->blockNameHierarchyMap[$viewAndSuffixCacheKey], $this->hierarchyLevelMap[$viewAndSuffixCacheKey]); } if ($varInit) { unset($this->variableStack[$viewCacheKey]); } if ($renderOnlyOnce) { $view->setRendered(); } return $html; } public function humanize(string $text): string { return ucfirst(strtolower(trim(preg_replace(['/([A-Z])/', '/[_\s]+/'], ['_$1', ' '], $text)))); } /** * @internal */ public function encodeCurrency(Environment $environment, string $text, string $widget = ''): string { if ('UTF-8' === $charset = $environment->getCharset()) { $text = htmlspecialchars($text, \ENT_QUOTES | \ENT_SUBSTITUTE, 'UTF-8'); } else { $text = htmlentities($text, \ENT_QUOTES | \ENT_SUBSTITUTE, 'UTF-8'); $text = iconv('UTF-8', $charset, $text); $widget = iconv('UTF-8', $charset, $widget); } return str_replace('{{ widget }}', $widget, $text); } }