Primo Committ
This commit is contained in:
223
vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php
vendored
Normal file
223
vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php
vendored
Normal file
@@ -0,0 +1,223 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Routing;
|
||||
|
||||
use BadMethodCallException;
|
||||
use Closure;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Reflector;
|
||||
use InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @method \Illuminate\Routing\Route get(string $uri, \Closure|array|string|null $action = null)
|
||||
* @method \Illuminate\Routing\Route post(string $uri, \Closure|array|string|null $action = null)
|
||||
* @method \Illuminate\Routing\Route put(string $uri, \Closure|array|string|null $action = null)
|
||||
* @method \Illuminate\Routing\Route delete(string $uri, \Closure|array|string|null $action = null)
|
||||
* @method \Illuminate\Routing\Route patch(string $uri, \Closure|array|string|null $action = null)
|
||||
* @method \Illuminate\Routing\Route options(string $uri, \Closure|array|string|null $action = null)
|
||||
* @method \Illuminate\Routing\Route any(string $uri, \Closure|array|string|null $action = null)
|
||||
* @method \Illuminate\Routing\RouteRegistrar as(string $value)
|
||||
* @method \Illuminate\Routing\RouteRegistrar domain(string $value)
|
||||
* @method \Illuminate\Routing\RouteRegistrar middleware(array|string|null $middleware)
|
||||
* @method \Illuminate\Routing\RouteRegistrar name(string $value)
|
||||
* @method \Illuminate\Routing\RouteRegistrar namespace(string $value)
|
||||
* @method \Illuminate\Routing\RouteRegistrar prefix(string $prefix)
|
||||
* @method \Illuminate\Routing\RouteRegistrar where(array $where)
|
||||
*/
|
||||
class RouteRegistrar
|
||||
{
|
||||
/**
|
||||
* The router instance.
|
||||
*
|
||||
* @var \Illuminate\Routing\Router
|
||||
*/
|
||||
protected $router;
|
||||
|
||||
/**
|
||||
* The attributes to pass on to the router.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $attributes = [];
|
||||
|
||||
/**
|
||||
* The methods to dynamically pass through to the router.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $passthru = [
|
||||
'get', 'post', 'put', 'patch', 'delete', 'options', 'any',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that can be set through this class.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $allowedAttributes = [
|
||||
'as', 'domain', 'middleware', 'name', 'namespace', 'prefix', 'where',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that are aliased.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aliases = [
|
||||
'name' => 'as',
|
||||
];
|
||||
|
||||
/**
|
||||
* Create a new route registrar instance.
|
||||
*
|
||||
* @param \Illuminate\Routing\Router $router
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(Router $router)
|
||||
{
|
||||
$this->router = $router;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value for a given attribute.
|
||||
*
|
||||
* @param string $key
|
||||
* @param mixed $value
|
||||
* @return $this
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function attribute($key, $value)
|
||||
{
|
||||
if (! in_array($key, $this->allowedAttributes)) {
|
||||
throw new InvalidArgumentException("Attribute [{$key}] does not exist.");
|
||||
}
|
||||
|
||||
$this->attributes[Arr::get($this->aliases, $key, $key)] = $value;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Route a resource to a controller.
|
||||
*
|
||||
* @param string $name
|
||||
* @param string $controller
|
||||
* @param array $options
|
||||
* @return \Illuminate\Routing\PendingResourceRegistration
|
||||
*/
|
||||
public function resource($name, $controller, array $options = [])
|
||||
{
|
||||
return $this->router->resource($name, $controller, $this->attributes + $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Route an API resource to a controller.
|
||||
*
|
||||
* @param string $name
|
||||
* @param string $controller
|
||||
* @param array $options
|
||||
* @return \Illuminate\Routing\PendingResourceRegistration
|
||||
*/
|
||||
public function apiResource($name, $controller, array $options = [])
|
||||
{
|
||||
return $this->router->apiResource($name, $controller, $this->attributes + $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a route group with shared attributes.
|
||||
*
|
||||
* @param \Closure|string $callback
|
||||
* @return void
|
||||
*/
|
||||
public function group($callback)
|
||||
{
|
||||
$this->router->group($this->attributes, $callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a new route with the given verbs.
|
||||
*
|
||||
* @param array|string $methods
|
||||
* @param string $uri
|
||||
* @param \Closure|array|string|null $action
|
||||
* @return \Illuminate\Routing\Route
|
||||
*/
|
||||
public function match($methods, $uri, $action = null)
|
||||
{
|
||||
return $this->router->match($methods, $uri, $this->compileAction($action));
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a new route with the router.
|
||||
*
|
||||
* @param string $method
|
||||
* @param string $uri
|
||||
* @param \Closure|array|string|null $action
|
||||
* @return \Illuminate\Routing\Route
|
||||
*/
|
||||
protected function registerRoute($method, $uri, $action = null)
|
||||
{
|
||||
if (! is_array($action)) {
|
||||
$action = array_merge($this->attributes, $action ? ['uses' => $action] : []);
|
||||
}
|
||||
|
||||
return $this->router->{$method}($uri, $this->compileAction($action));
|
||||
}
|
||||
|
||||
/**
|
||||
* Compile the action into an array including the attributes.
|
||||
*
|
||||
* @param \Closure|array|string|null $action
|
||||
* @return array
|
||||
*/
|
||||
protected function compileAction($action)
|
||||
{
|
||||
if (is_null($action)) {
|
||||
return $this->attributes;
|
||||
}
|
||||
|
||||
if (is_string($action) || $action instanceof Closure) {
|
||||
$action = ['uses' => $action];
|
||||
}
|
||||
|
||||
if (is_array($action) &&
|
||||
! Arr::isAssoc($action) &&
|
||||
Reflector::isCallable($action)) {
|
||||
$action = [
|
||||
'uses' => $action[0].'@'.$action[1],
|
||||
'controller' => $action[0].'@'.$action[1],
|
||||
];
|
||||
}
|
||||
|
||||
return array_merge($this->attributes, $action);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dynamically handle calls into the route registrar.
|
||||
*
|
||||
* @param string $method
|
||||
* @param array $parameters
|
||||
* @return \Illuminate\Routing\Route|$this
|
||||
*
|
||||
* @throws \BadMethodCallException
|
||||
*/
|
||||
public function __call($method, $parameters)
|
||||
{
|
||||
if (in_array($method, $this->passthru)) {
|
||||
return $this->registerRoute($method, ...$parameters);
|
||||
}
|
||||
|
||||
if (in_array($method, $this->allowedAttributes)) {
|
||||
if ($method === 'middleware') {
|
||||
return $this->attribute($method, is_array($parameters[0]) ? $parameters[0] : $parameters);
|
||||
}
|
||||
|
||||
return $this->attribute($method, $parameters[0]);
|
||||
}
|
||||
|
||||
throw new BadMethodCallException(sprintf(
|
||||
'Method %s::%s does not exist.', static::class, $method
|
||||
));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user