function PathProcessorLanguage::initProcessors

Same name in other branches
  1. 9 core/modules/language/src/HttpKernel/PathProcessorLanguage.php \Drupal\language\HttpKernel\PathProcessorLanguage::initProcessors()
  2. 10 core/modules/language/src/HttpKernel/PathProcessorLanguage.php \Drupal\language\HttpKernel\PathProcessorLanguage::initProcessors()
  3. 11.x core/modules/language/src/HttpKernel/PathProcessorLanguage.php \Drupal\language\HttpKernel\PathProcessorLanguage::initProcessors()

Initializes the local cache for language path processors.

Parameters

string $scope: The scope of the processors: "inbound" or "outbound".

2 calls to PathProcessorLanguage::initProcessors()
PathProcessorLanguage::processInbound in core/modules/language/src/HttpKernel/PathProcessorLanguage.php
Processes the inbound path.
PathProcessorLanguage::processOutbound in core/modules/language/src/HttpKernel/PathProcessorLanguage.php
Processes the outbound path.

File

core/modules/language/src/HttpKernel/PathProcessorLanguage.php, line 131

Class

PathProcessorLanguage
Processes the inbound path using path alias lookups.

Namespace

Drupal\language\HttpKernel

Code

protected function initProcessors($scope) {
    $interface = '\\Drupal\\Core\\PathProcessor\\' . Unicode::ucfirst($scope) . 'PathProcessorInterface';
    $this->processors[$scope] = [];
    $weights = [];
    foreach ($this->languageManager
        ->getLanguageTypes() as $type) {
        foreach ($this->negotiator
            ->getNegotiationMethods($type) as $method_id => $method) {
            if (!isset($this->processors[$scope][$method_id])) {
                $reflector = new \ReflectionClass($method['class']);
                if ($reflector->implementsInterface($interface)) {
                    $this->processors[$scope][$method_id] = $this->negotiator
                        ->getNegotiationMethodInstance($method_id);
                    $weights[$method_id] = $method['weight'];
                }
            }
        }
    }
    // Sort the processors list, so that their functions are called in the
    // order specified by the weight of the methods.
    uksort($this->processors[$scope], function ($method_id_a, $method_id_b) use ($weights) {
        $a_weight = $weights[$method_id_a];
        $b_weight = $weights[$method_id_b];
        if ($a_weight == $b_weight) {
            return 0;
        }
        return $a_weight < $b_weight ? -1 : 1;
    });
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.