Class WidgetLocator
A registry/factory for input widgets.
Can be used by helpers/view logic to build form widgets and other HTML widgets.
This class handles the mapping between names and concrete classes. It also has a basic name based dependency resolver that allows widgets to depend on each other.
Each widget should expect a StringTemplate instance as their first argument. All other dependencies will be included after.
Widgets can ask for the current view by using the _view widget.
Property Summary
- 
        $_templates protectedCake\View\StringTemplateTemplates to use. 
- 
        $_view protectedCake\View\ViewView instance. 
- 
        $_widgets protectedarrayArray of widgets + widget configuration. 
Method Summary
- 
          __construct() publicConstructor 
- 
          _resolveWidget() protectedResolves a widget spec into an instance. 
- 
          add() publicAdds or replaces existing widget instances/configuration with new ones. 
- 
          clear() publicClear the registry and reset the widgets. 
- 
          get() publicGet a widget. 
- 
          load() publicLoad a config file containing widgets. 
Method Detail
__construct() ¶ public
__construct(Cake\View\StringTemplate $templates, Cake\View\View $view, array $widgets = [])Constructor
Parameters
- 
                Cake\View\StringTemplate$templates
- Templates instance to use. 
- 
                Cake\View\View$view
- The view instance to set as a widget. 
- 
                array$widgets optional
- See add() method for more information. 
_resolveWidget() ¶ protected
_resolveWidget(mixed $config): Cake\View\Widget\WidgetInterfaceResolves a widget spec into an instance.
Parameters
- 
                mixed$config
- The widget config. 
Returns
Cake\View\Widget\WidgetInterfaceWidget instance.
Throws
ReflectionExceptionadd() ¶ public
add(array $widgets): voidAdds or replaces existing widget instances/configuration with new ones.
Widget arrays can either be descriptions or instances. For example:
$registry->add([
  'label' => new MyLabelWidget($templates),
  'checkbox' => ['Fancy.MyCheckbox', 'label']
]);The above shows how to define widgets as instances or as descriptions including dependencies. Classes can be defined with plugin notation, or fully namespaced class names.
Parameters
- 
                array$widgets
- Array of widgets to use. 
Returns
voidThrows
RuntimeExceptionWhen class does not implement WidgetInterface.
get() ¶ public
get(string $name): Cake\View\Widget\WidgetInterfaceGet a widget.
Will either fetch an already created widget, or create a new instance
if the widget has been defined. If the widget is undefined an instance of
the _default widget will be returned. An exception will be thrown if
the _default widget is undefined.
Parameters
- 
                string$name
- The widget name to get. 
Returns
Cake\View\Widget\WidgetInterfaceWidgetInterface instance.
Throws
RuntimeExceptionwhen widget is undefined.
load() ¶ public
load(string $file): voidLoad a config file containing widgets.
Widget files should define a $config variable containing
all the widgets to load. Loaded widgets will be merged with existing
widgets.
Parameters
- 
                string$file
- The file to load 
Returns
void