Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
FormExtension.php
001 <?php
002
003 /*
004 * This file is part of the Symfony package.
005 *
006 * (c) Fabien Potencier <fabien@symfony.com>
007 *
008 * For the full copyright and license information, please view the LICENSE
009 * file that was distributed with this source code.
010 */
011
012 namespace Symfony\Bridge\Twig\Extension;
013
014 use Symfony\Bridge\Twig\TokenParser\FormThemeTokenParser;
015 use Symfony\Bridge\Twig\Form\TwigRendererInterface;
016 use Symfony\Component\Form\Extension\Core\View\ChoiceView;
017
018 /**
019 * FormExtension extends Twig with form capabilities.
020 *
021 * @author Fabien Potencier <fabien@symfony.com>
022 * @author Bernhard Schussek <bschussek@gmail.com>
023 */
024 class FormExtension extends \Twig_Extension implements \Twig_Extension_InitRuntimeInterface
025 {
026 /**
027 * This property is public so that it can be accessed directly from compiled
028 * templates without having to call a getter, which slightly decreases performance.
029 *
030 * @var TwigRendererInterface
031 */
032 public $renderer;
033
034 public function __construct(TwigRendererInterface $renderer)
035 {
036 $this->renderer = $renderer;
037 }
038
039 /**
040 * {@inheritdoc}
041 */
042 public function initRuntime(\Twig_Environment $environment)
043 {
044 $this->renderer->setEnvironment($environment);
045 }
046
047 /**
048 * {@inheritdoc}
049 */
050 public function getTokenParsers()
051 {
052 return array(
053 // {% form_theme form "SomeBundle::widgets.twig" %}
054 new FormThemeTokenParser(),
055 );
056 }
057
058 /**
059 * {@inheritdoc}
060 */
061 public function getFunctions()
062 {
063 return array(
064 new \Twig_SimpleFunction('form_enctype', null, array('node_class' => 'Symfony\Bridge\Twig\Node\FormEnctypeNode', 'is_safe' => array('html'), 'deprecated' => true, 'alternative' => 'form_start')),
065 new \Twig_SimpleFunction('form_widget', null, array('node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', 'is_safe' => array('html'))),
066 new \Twig_SimpleFunction('form_errors', null, array('node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', 'is_safe' => array('html'))),
067 new \Twig_SimpleFunction('form_label', null, array('node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', 'is_safe' => array('html'))),
068 new \Twig_SimpleFunction('form_row', null, array('node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', 'is_safe' => array('html'))),
069 new \Twig_SimpleFunction('form_rest', null, array('node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', 'is_safe' => array('html'))),
070 new \Twig_SimpleFunction('form', null, array('node_class' => 'Symfony\Bridge\Twig\Node\RenderBlockNode', 'is_safe' => array('html'))),
071 new \Twig_SimpleFunction('form_start', null, array('node_class' => 'Symfony\Bridge\Twig\Node\RenderBlockNode', 'is_safe' => array('html'))),
072 new \Twig_SimpleFunction('form_end', null, array('node_class' => 'Symfony\Bridge\Twig\Node\RenderBlockNode', 'is_safe' => array('html'))),
073 new \Twig_SimpleFunction('csrf_token', array($this, 'renderCsrfToken')),
074 );
075 }
076
077 /**
078 * {@inheritdoc}
079 */
080 public function getFilters()
081 {
082 return array(
083 new \Twig_SimpleFilter('humanize', array($this, 'humanize')),
084 );
085 }
086
087 /**
088 * {@inheritdoc}
089 */
090 public function getTests()
091 {
092 return array(
093 new \Twig_SimpleTest('selectedchoice', array($this, 'isSelectedChoice')),
094 );
095 }
096
097 /**
098 * Renders a CSRF token.
099 *
100 * @param string $intention The intention of the protected action
101 *
102 * @return string A CSRF token
103 */
104 public function renderCsrfToken($intention)
105 {
106 return $this->renderer->renderCsrfToken($intention);
107 }
108
109 /**
110 * Makes a technical name human readable.
111 *
112 * @param string $text The text to humanize
113 *
114 * @return string The humanized text
115 */
116 public function humanize($text)
117 {
118 return $this->renderer->humanize($text);
119 }
120
121 /**
122 * Returns whether a choice is selected for a given form value.
123 *
124 * Unfortunately Twig does not support an efficient way to execute the
125 * "is_selected" closure passed to the template by ChoiceType. It is faster
126 * to implement the logic here (around 65ms for a specific form).
127 *
128 * Directly implementing the logic here is also faster than doing so in
129 * ChoiceView (around 30ms).
130 *
131 * The worst option tested so far is to implement the logic in ChoiceView
132 * and access the ChoiceView method directly in the template. Doing so is
133 * around 220ms slower than doing the method call here in the filter. Twig
134 * seems to be much more efficient at executing filters than at executing
135 * methods of an object.
136 *
137 * @param ChoiceView $choice The choice to check
138 * @param string|array $selectedValue The selected value to compare
139 *
140 * @return bool Whether the choice is selected
141 *
142 * @see ChoiceView::isSelected()
143 */
144 public function isSelectedChoice(ChoiceView $choice, $selectedValue)
145 {
146 if (is_array($selectedValue)) {
147 return in_array($choice->value, $selectedValue, true);
148 }
149
150 return $choice->value === $selectedValue;
151 }
152
153 /**
154 * {@inheritdoc}
155 */
156 public function getName()
157 {
158 return 'form';
159 }
160 }
161