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: /**
29: * Templates
30: *
31: * @var \Cake\View\StringTemplate
32: */
33: protected $_templates;
34:
35: /**
36: * The template to use.
37: *
38: * @var string
39: */
40: protected $_labelTemplate = 'label';
41:
42: /**
43: * Constructor.
44: *
45: * This class uses the following template:
46: *
47: * - `label` Used to generate the label for a radio button.
48: * Can use the following variables `attrs`, `text` and `input`.
49: *
50: * @param \Cake\View\StringTemplate $templates Templates list.
51: */
52: public function __construct($templates)
53: {
54: $this->_templates = $templates;
55: }
56:
57: /**
58: * Render a label widget.
59: *
60: * Accepts the following keys in $data:
61: *
62: * - `text` The text for the label.
63: * - `input` The input that can be formatted into the label if the template allows it.
64: * - `escape` Set to false to disable HTML escaping.
65: *
66: * All other attributes will be converted into HTML attributes.
67: *
68: * @param array $data Data array.
69: * @param \Cake\View\Form\ContextInterface $context The current form context.
70: * @return string
71: */
72: public function render(array $data, ContextInterface $context)
73: {
74: $data += [
75: 'text' => '',
76: 'input' => '',
77: 'hidden' => '',
78: 'escape' => true,
79: 'templateVars' => []
80: ];
81:
82: return $this->_templates->format($this->_labelTemplate, [
83: 'text' => $data['escape'] ? h($data['text']) : $data['text'],
84: 'input' => $data['input'],
85: 'hidden' => $data['hidden'],
86: 'templateVars' => $data['templateVars'],
87: 'attrs' => $this->_templates->formatAttributes($data, ['text', 'input', 'hidden']),
88: ]);
89: }
90:
91: /**
92: * {@inheritDoc}
93: */
94: public function secureFields(array $data)
95: {
96: return [];
97: }
98: }
99: