class Candidates in Zircon Profile 8.0
Same name and namespace in other branches
- 8 vendor/symfony-cmf/routing/Candidates/Candidates.php \Symfony\Cmf\Component\Routing\Candidates\Candidates
A straightforward strategy that splits the URL on "/".
If locales is set, additionally generates candidates removing the locale if it is one of the configured locales, for non-locale specific URLs.
@author David Buchmann <mail@davidbu.ch>
Hierarchy
- class \Symfony\Cmf\Component\Routing\Candidates\Candidates implements CandidatesInterface
Expanded class hierarchy of Candidates
1 file declares its use of Candidates
- CandidatesTest.php in vendor/
symfony-cmf/ routing/ Tests/ Candidates/ CandidatesTest.php
File
- vendor/
symfony-cmf/ routing/ Candidates/ Candidates.php, line 24
Namespace
Symfony\Cmf\Component\Routing\CandidatesView source
class Candidates implements CandidatesInterface {
/**
* @var array
*/
protected $locales;
/**
* A limit to apply to the number of candidates generated.
*
* This is to prevent abusive requests with a lot of "/". The limit is per
* batch, that is if a locale matches you could get as many as 2 * $limit
* candidates if the URL has that many slashes.
*
* @var int
*/
protected $limit;
/**
* @param array $locales The locales to support.
* @param int $limit A limit to apply to the candidates generated.
*/
public function __construct(array $locales = array(), $limit = 20) {
$this
->setLocales($locales);
$this->limit = $limit;
}
/**
* Set the locales to support by this strategy.
*
* @param array $locales The locales to support.
*/
public function setLocales(array $locales) {
$this->locales = $locales;
}
/**
* {@inheritDoc}
*
* Always returns true.
*/
public function isCandidate($name) {
return true;
}
/**
* {@inheritDoc}
*
* Does nothing.
*/
public function restrictQuery($queryBuilder) {
}
/**
* {@inheritDoc}
*/
public function getCandidates(Request $request) {
$url = $request
->getPathInfo();
$candidates = $this
->getCandidatesFor($url);
$locale = $this
->determineLocale($url);
if ($locale) {
$candidates = array_unique(array_merge($candidates, $this
->getCandidatesFor(substr($url, strlen($locale) + 1))));
}
return $candidates;
}
/**
* Determine the locale of this URL.
*
* @param string $url The url to determine the locale from.
*
* @return string|boolean The locale if $url starts with one of the allowed locales.
*/
protected function determineLocale($url) {
if (!count($this->locales)) {
return false;
}
$matches = array();
if (preg_match('#(' . implode('|', $this->locales) . ')(/|$)#', $url, $matches)) {
return $matches[1];
}
return false;
}
/**
* Handle a possible format extension and split the $url on "/".
*
* $prefix is prepended to every candidate generated.
*
* @param string $url The URL to split.
* @param string $prefix A prefix to prepend to every pattern.
*
* @return array Paths that could represent routes that match $url and are
* child of $prefix.
*/
protected function getCandidatesFor($url, $prefix = '') {
$candidates = array();
if ('/' !== $url) {
// handle format extension, like .html or .json
if (preg_match('/(.+)\\.[a-z]+$/i', $url, $matches)) {
$candidates[] = $prefix . $url;
$url = $matches[1];
}
$part = $url;
$count = 0;
while (false !== ($pos = strrpos($part, '/'))) {
if (++$count > $this->limit) {
return $candidates;
}
$candidates[] = $prefix . $part;
$part = substr($url, 0, $pos);
}
}
$candidates[] = $prefix ?: '/';
return $candidates;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
Candidates:: |
protected | property | A limit to apply to the number of candidates generated. | |
Candidates:: |
protected | property | ||
Candidates:: |
protected | function | Determine the locale of this URL. | |
Candidates:: |
public | function |
Overrides CandidatesInterface:: |
|
Candidates:: |
protected | function | Handle a possible format extension and split the $url on "/". | |
Candidates:: |
public | function |
Always returns true. Overrides CandidatesInterface:: |
|
Candidates:: |
public | function |
Does nothing. Overrides CandidatesInterface:: |
|
Candidates:: |
public | function | Set the locales to support by this strategy. | |
Candidates:: |
public | function |