a1366a608492819121c57a64872778a196f139d9
[yaffs-website] / web / core / lib / Drupal / Core / Routing / CompiledRoute.php
1 <?php
2
3 namespace Drupal\Core\Routing;
4
5 use Drupal\Component\Utility\Unicode;
6 use Symfony\Component\Routing\CompiledRoute as SymfonyCompiledRoute;
7
8 /**
9  * A compiled route contains derived information from a route object.
10  */
11 class CompiledRoute extends SymfonyCompiledRoute {
12
13   /**
14    * The fitness of this route.
15    *
16    * @var int
17    */
18   protected $fit;
19
20   /**
21    * The pattern outline of this route.
22    *
23    * @var string
24    */
25   protected $patternOutline;
26
27   /**
28    * The number of parts in the path of this route.
29    *
30    * @var int
31    */
32   protected $numParts;
33
34   /**
35    * Constructs a new compiled route object.
36    *
37    * This is a ridiculously long set of constructor parameters, but as this
38    * object is little more than a collection of values it's not a serious
39    * problem. The parent Symfony class does the same, as well, making it
40    * difficult to override differently.
41    *
42    * @param int $fit
43    *   The fitness of the route.
44    * @param string $pattern_outline
45    *   The pattern outline for this route.
46    * @param int $num_parts
47    *   The number of parts in the path.
48    * @param string $staticPrefix
49    *   The static prefix of the compiled route
50    * @param string $regex
51    *   The regular expression to use to match this route
52    * @param array $tokens
53    *   An array of tokens to use to generate URL for this route
54    * @param array $pathVariables
55    *   An array of path variables
56    * @param string|null $hostRegex
57    *   Host regex
58    * @param array $hostTokens
59    *   Host tokens
60    * @param array $hostVariables
61    *   An array of host variables
62    * @param array $variables
63    *   An array of variables (variables defined in the path and in the host patterns)
64    */
65   public function __construct($fit, $pattern_outline, $num_parts, $staticPrefix, $regex, array $tokens, array $pathVariables, $hostRegex = NULL, array $hostTokens = [], array $hostVariables = [], array $variables = []) {
66     parent::__construct($staticPrefix, $regex, $tokens, $pathVariables, $hostRegex, $hostTokens, $hostVariables, $variables);
67
68     $this->fit = $fit;
69     // Support case-insensitive route matching by ensuring the pattern outline
70     // is lowercase.
71     // @see \Drupal\Core\Routing\RouteProvider::getRoutesByPath()
72     $this->patternOutline = Unicode::strtolower($pattern_outline);
73     $this->numParts = $num_parts;
74   }
75
76   /**
77    * Returns the fit of this route.
78    *
79    * See RouteCompiler for a definition of how the fit is calculated.
80    *
81    * @return int
82    *   The fit of the route.
83    */
84   public function getFit() {
85     return $this->fit;
86   }
87
88   /**
89    * Returns the number of parts in this route's path.
90    *
91    * The string "foo/bar/baz" has 3 parts, regardless of how many of them are
92    * placeholders.
93    *
94    * @return int
95    *   The number of parts in the path.
96    */
97   public function getNumParts() {
98     return $this->numParts;
99   }
100
101   /**
102    * Returns the pattern outline of this route.
103    *
104    * The pattern outline of a route is the path pattern of the route, but
105    * normalized such that all placeholders are replaced with %.
106    *
107    * @return string
108    *   The normalized path pattern.
109    */
110   public function getPatternOutline() {
111     return $this->patternOutline;
112   }
113
114   /**
115    * Returns the options.
116    *
117    * @return array
118    *   The options.
119    */
120   public function getOptions() {
121     return $this->route->getOptions();
122   }
123
124   /**
125    * Returns the defaults.
126    *
127    * @return array
128    *   The defaults.
129    */
130   public function getDefaults() {
131     return $this->route->getDefaults();
132   }
133
134   /**
135    * Returns the requirements.
136    *
137    * @return array
138    *   The requirements.
139    */
140   public function getRequirements() {
141     return $this->route->getRequirements();
142   }
143
144   /**
145    * {@inheritdoc}
146    */
147   public function serialize() {
148     // Calling the parent method is safer than trying to optimize out the extra
149     // function calls.
150     $data = unserialize(parent::serialize());
151     $data['fit'] = $this->fit;
152     $data['patternOutline'] = $this->patternOutline;
153     $data['numParts'] = $this->numParts;
154
155     return serialize($data);
156   }
157
158   /**
159    * {@inheritdoc}
160    */
161   public function unserialize($serialized) {
162     parent::unserialize($serialized);
163     $data = unserialize($serialized);
164
165     $this->fit = $data['fit'];
166     $this->patternOutline = $data['patternOutline'];
167     $this->numParts = $data['numParts'];
168   }
169
170 }