Primo Committ
This commit is contained in:
117
vendor/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php
vendored
Normal file
117
vendor/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php
vendored
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Routing;
|
||||
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
class RouteParameterBinder
|
||||
{
|
||||
/**
|
||||
* The route instance.
|
||||
*
|
||||
* @var \Illuminate\Routing\Route
|
||||
*/
|
||||
protected $route;
|
||||
|
||||
/**
|
||||
* Create a new Route parameter binder instance.
|
||||
*
|
||||
* @param \Illuminate\Routing\Route $route
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($route)
|
||||
{
|
||||
$this->route = $route;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the parameters for the route.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function parameters($request)
|
||||
{
|
||||
$parameters = $this->bindPathParameters($request);
|
||||
|
||||
// If the route has a regular expression for the host part of the URI, we will
|
||||
// compile that and get the parameter matches for this domain. We will then
|
||||
// merge them into this parameters array so that this array is completed.
|
||||
if (! is_null($this->route->compiled->getHostRegex())) {
|
||||
$parameters = $this->bindHostParameters(
|
||||
$request, $parameters
|
||||
);
|
||||
}
|
||||
|
||||
return $this->replaceDefaults($parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the parameter matches for the path portion of the URI.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
protected function bindPathParameters($request)
|
||||
{
|
||||
$path = '/'.ltrim($request->decodedPath(), '/');
|
||||
|
||||
preg_match($this->route->compiled->getRegex(), $path, $matches);
|
||||
|
||||
return $this->matchToKeys(array_slice($matches, 1));
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract the parameter list from the host part of the request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param array $parameters
|
||||
* @return array
|
||||
*/
|
||||
protected function bindHostParameters($request, $parameters)
|
||||
{
|
||||
preg_match($this->route->compiled->getHostRegex(), $request->getHost(), $matches);
|
||||
|
||||
return array_merge($this->matchToKeys(array_slice($matches, 1)), $parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Combine a set of parameter matches with the route's keys.
|
||||
*
|
||||
* @param array $matches
|
||||
* @return array
|
||||
*/
|
||||
protected function matchToKeys(array $matches)
|
||||
{
|
||||
if (empty($parameterNames = $this->route->parameterNames())) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$parameters = array_intersect_key($matches, array_flip($parameterNames));
|
||||
|
||||
return array_filter($parameters, function ($value) {
|
||||
return is_string($value) && strlen($value) > 0;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace null parameters with their defaults.
|
||||
*
|
||||
* @param array $parameters
|
||||
* @return array
|
||||
*/
|
||||
protected function replaceDefaults(array $parameters)
|
||||
{
|
||||
foreach ($parameters as $key => $value) {
|
||||
$parameters[$key] = $value ?? Arr::get($this->route->defaults, $key);
|
||||
}
|
||||
|
||||
foreach ($this->route->defaults as $key => $value) {
|
||||
if (! isset($parameters[$key])) {
|
||||
$parameters[$key] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
return $parameters;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user