$_stack
$_stack : array<mixed,\Cake\Routing\DispatcherFilter>
Stack of middleware to apply to dispatchers.
A factory for creating dispatchers with all the desired middleware connected.
$_stack : array<mixed,\Cake\Routing\DispatcherFilter>
Stack of middleware to apply to dispatchers.
add(string|\Cake\Routing\DispatcherFilter $filter, array $options = array()) : \Cake\Routing\DispatcherFilter
Add a new middleware object to the stack of middleware that will be executed.
Instances of filters will be re-used across all sub-requests in a request.
string|\Cake\Routing\DispatcherFilter | $filter | Either the classname of the filter or an instance to use. |
array | $options | Constructor arguments/options for the filter if you are using a string name. If you are passing an instance, this argument will be ignored. |
create() : \Cake\Routing\Dispatcher
Create a dispatcher that has all the configured middleware applied.
filters() : array<mixed,\Cake\Routing\DispatcherFilter>
Get the connected dispatcher filters.
_createFilter(string $name, array $options) : \Cake\Routing\DispatcherFilter
Create an instance of a filter.
string | $name | The name of the filter to build. |
array | $options | Constructor arguments/options for the filter. |
When filters cannot be found.
<?php
/**
* CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* 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\Routing;
use Cake\Core\App;
use Cake\Routing\Exception\MissingDispatcherFilterException;
/**
* A factory for creating dispatchers with all the desired middleware
* connected.
*
* @deprecated 3.6.0 This class is part of the deprecated dispatcher system.
* Use Http\Server instead.
*/
class DispatcherFactory
{
/**
* Stack of middleware to apply to dispatchers.
*
* @var \Cake\Routing\DispatcherFilter[]
*/
protected static $_stack = [];
/**
* Add a new middleware object to the stack of middleware
* that will be executed.
*
* Instances of filters will be re-used across all sub-requests
* in a request.
*
* @param string|\Cake\Routing\DispatcherFilter $filter Either the classname of the filter
* or an instance to use.
* @param array $options Constructor arguments/options for the filter if you are using a string name.
* If you are passing an instance, this argument will be ignored.
* @return \Cake\Routing\DispatcherFilter
*/
public static function add($filter, array $options = [])
{
if (is_string($filter)) {
$filter = static::_createFilter($filter, $options);
}
static::$_stack[] = $filter;
return $filter;
}
/**
* Create an instance of a filter.
*
* @param string $name The name of the filter to build.
* @param array $options Constructor arguments/options for the filter.
* @return \Cake\Routing\DispatcherFilter
* @throws \Cake\Routing\Exception\MissingDispatcherFilterException When filters cannot be found.
*/
protected static function _createFilter($name, $options)
{
$className = App::className($name, 'Routing/Filter', 'Filter');
if (!$className) {
$msg = sprintf('Cannot locate dispatcher filter named "%s".', $name);
throw new MissingDispatcherFilterException($msg);
}
return new $className($options);
}
/**
* Create a dispatcher that has all the configured middleware applied.
*
* @return \Cake\Routing\Dispatcher
*/
public static function create()
{
$dispatcher = new Dispatcher();
foreach (static::$_stack as $middleware) {
$dispatcher->addFilter($middleware);
}
return $dispatcher;
}
/**
* Get the connected dispatcher filters.
*
* @return \Cake\Routing\DispatcherFilter[]
*/
public static function filters()
{
return static::$_stack;
}
/**
* Clear the middleware stack.
*
* @return void
*/
public static function clear()
{
static::$_stack = [];
}
}