Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php
Строк: 63
<?php

namespace IlluminateRouting;

use 
IlluminateSupportArr;

class 
RouteParameterBinder
{
    
/**
     * The route instance.
     *
     * @var IlluminateRoutingRoute
     */
    
protected $route;

    
/**
     * Create a new Route parameter binder instance.
     *
     * @param  IlluminateRoutingRoute  $route
     * @return void
     */
    
public function __construct($route)
    {
        
$this->route $route;
    }

    
/**
     * Get the parameters for the route.
     *
     * @param  IlluminateHttpRequest  $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  IlluminateHttpRequest  $request
     * @return array
     */
    
protected function bindPathParameters($request)
    {
        
$path '/'.ltrim($request->decodedPath(), '/');

        
preg_match($this->route->compiled->getRegex(), $path$matches);

        return 
$this->matchToKeys(array_slice($matches1));
    }

    
/**
     * Extract the parameter list from the host part of the request.
     *
     * @param  IlluminateHttpRequest  $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($matches1)), $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($matchesarray_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;
    }
}
Онлайн: 0
Реклама