1: <?php
2: /**
3: * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
4: * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
5: *
6: * Licensed under The MIT License
7: * For full copyright and license information, please see the LICENSE.txt
8: * Redistributions of files must retain the above copyright notice.
9: *
10: * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
11: * @link https://cakephp.org CakePHP(tm) Project
12: * @since 3.0.0
13: * @license https://opensource.org/licenses/mit-license.php MIT License
14: */
15: namespace Cake\View\Widget;
16:
17: use Cake\View\Form\ContextInterface;
18:
19: /**
20: * Form 'widget' for creating labels.
21: *
22: * Generally this element is used by other widgets,
23: * and FormHelper itself.
24: */
25: class LabelWidget implements WidgetInterface
26: {
27: /**
28: * Templates
29: *
30: * @var \Cake\View\StringTemplate
31: */
32: protected $_templates;
33:
34: /**
35: * The template to use.
36: *
37: * @var string
38: */
39: protected $_labelTemplate = 'label';
40:
41: /**
42: * Constructor.
43: *
44: * This class uses the following template:
45: *
46: * - `label` Used to generate the label for a radio button.
47: * Can use the following variables `attrs`, `text` and `input`.
48: *
49: * @param \Cake\View\StringTemplate $templates Templates list.
50: */
51: public function __construct($templates)
52: {
53: $this->_templates = $templates;
54: }
55:
56: /**
57: * Render a label widget.
58: *
59: * Accepts the following keys in $data:
60: *
61: * - `text` The text for the label.
62: * - `input` The input that can be formatted into the label if the template allows it.
63: * - `escape` Set to false to disable HTML escaping.
64: *
65: * All other attributes will be converted into HTML attributes.
66: *
67: * @param array $data Data array.
68: * @param \Cake\View\Form\ContextInterface $context The current form context.
69: * @return string
70: */
71: public function render(array $data, ContextInterface $context)
72: {
73: $data += [
74: 'text' => '',
75: 'input' => '',
76: 'hidden' => '',
77: 'escape' => true,
78: 'templateVars' => []
79: ];
80:
81: return $this->_templates->format($this->_labelTemplate, [
82: 'text' => $data['escape'] ? h($data['text']) : $data['text'],
83: 'input' => $data['input'],
84: 'hidden' => $data['hidden'],
85: 'templateVars' => $data['templateVars'],
86: 'attrs' => $this->_templates->formatAttributes($data, ['text', 'input', 'hidden']),
87: ]);
88: }
89:
90: /**
91: * {@inheritDoc}
92: */
93: public function secureFields(array $data)
94: {
95: return [];
96: }
97: }
98: