Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/cakephp/cakephp/src/View/ViewVarsTrait.php
<?php
/**
 * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c), Cake Software Foundation, Inc. (https://cakefoundation.org)
 * @link          https://cakephp.org CakePHP(tm) Project
 * @since         3.0.0
 * @license       https://opensource.org/licenses/mit-license.php MIT License
 */
namespace Cake\View;

use
Cake\Event\EventDispatcherInterface;

/**
 * Provides the set() method for collecting template context.
 *
 * Once collected context data can be passed to another object.
 * This is done in Controller, TemplateTask and View for example.
 *
 * @property array $_validViewOptions
 */
trait ViewVarsTrait
{
   
/**
     * The name of default View class.
     *
     * @var string|null
     * @deprecated 3.1.0 Use `$this->viewBuilder()->getClassName()`/`$this->viewBuilder()->setClassName()` instead.
     */
   
public $viewClass;

   
/**
     * Variables for the view.
     *
     * Deprecated: This property will be removed in 4.x.
     * Inside controller context use `$this->set()` instead, also see `$this->viewBuilder()->getVar()`.
     * In view context it will be a protected property `View::$viewVars`.
     *
     * @var array
     */
   
public $viewVars = [];

   
/**
     * The view builder instance being used.
     *
     * @var \Cake\View\ViewBuilder
     */
   
protected $_viewBuilder;

   
/**
     * Get the view builder being used.
     *
     * @return \Cake\View\ViewBuilder
     */
   
public function viewBuilder()
    {
        if (!isset(
$this->_viewBuilder)) {
           
$this->_viewBuilder = new ViewBuilder();
        }

        return
$this->_viewBuilder;
    }

   
/**
     * Constructs the view class instance based on the current configuration.
     *
     * @param string|null $viewClass Optional namespaced class name of the View class to instantiate.
     * @return \Cake\View\View
     * @throws \Cake\View\Exception\MissingViewException If view class was not found.
     */
   
public function createView($viewClass = null)
    {
       
$builder = $this->viewBuilder();
        if (
$viewClass === null && $builder->getClassName() === null) {
           
$builder->setClassName($this->viewClass);
           
$this->viewClass = null;
        }
        if (
$viewClass) {
           
$builder->setClassName($viewClass);
        }

       
$validViewOptions = isset($this->_validViewOptions) ? $this->_validViewOptions : [];
       
$viewOptions = [];
        foreach (
$validViewOptions as $option) {
            if (
property_exists($this, $option)) {
               
$viewOptions[$option] = $this->{$option};
            }
        }

       
$deprecatedOptions = [
           
'layout' => 'setLayout',
           
'view' => 'setTemplate',
           
'theme' => 'setTheme',
           
'autoLayout' => 'enableAutoLayout',
           
'viewPath' => 'setTemplatePath',
           
'layoutPath' => 'setLayoutPath',
        ];
        foreach (
$deprecatedOptions as $old => $new) {
            if (
property_exists($this, $old)) {
               
$builder->{$new}($this->{$old});
               
$message = sprintf(
                   
'Property $%s is deprecated. Use $this->viewBuilder()->%s() instead in beforeRender().',
                   
$old,
                   
$new
               
);
               
deprecationWarning($message);
            }
        }

        foreach ([
'name', 'helpers', 'plugin'] as $prop) {
            if (isset(
$this->{$prop})) {
               
$method = 'set' . ucfirst($prop);
               
$builder->{$method}($this->{$prop});
            }
        }
       
$builder->setOptions($viewOptions);

        return
$builder->build(
           
$this->viewVars,
            isset(
$this->request) ? $this->request : null,
            isset(
$this->response) ? $this->response : null,
           
$this instanceof EventDispatcherInterface ? $this->getEventManager() : null
       
);
    }

   
/**
     * Saves a variable or an associative array of variables for use inside a template.
     *
     * @param string|array $name A string or an array of data.
     * @param mixed $value Value in case $name is a string (which then works as the key).
     *   Unused if $name is an associative array, otherwise serves as the values to $name's keys.
     * @return $this
     */
   
public function set($name, $value = null)
    {
        if (
is_array($name)) {
            if (
is_array($value)) {
               
$data = array_combine($name, $value);
            } else {
               
$data = $name;
            }
        } else {
           
$data = [$name => $value];
        }
       
$this->viewVars = $data + $this->viewVars;

        return
$this;
    }

   
/**
     * Get/Set valid view options in the object's _validViewOptions property. The property is
     * created as an empty array if it is not set. If called without any parameters it will
     * return the current list of valid view options. See `createView()`.
     *
     * @param string|array|null $options string or array of string to be appended to _validViewOptions.
     * @param bool $merge Whether to merge with or override existing valid View options.
     *   Defaults to `true`.
     * @return array The updated view options as an array.
     * @deprecated 3.7.0 Use ViewBuilder::setOptions() or any one of it's setter methods instead.
     */
   
public function viewOptions($options = null, $merge = true)
    {
       
deprecationWarning(
           
'ViewVarsTrait::viewOptions() is deprecated, used ViewBuilder::setOptions() instead.'
       
);

        if (!isset(
$this->_validViewOptions)) {
           
$this->_validViewOptions = [];
        }

        if (
$options === null) {
            return
$this->_validViewOptions;
        }

        if (!
$merge) {
            return
$this->_validViewOptions = (array)$options;
        }

        return
$this->_validViewOptions = array_merge($this->_validViewOptions, (array)$options);
    }
}