Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/croogo/croogo/Taxonomy/src/Routing/Route/TypeRoute.php
<?php

namespace Croogo\Taxonomy\Routing\Route;

use
Cake\ORM\TableRegistry;
use
Cake\Routing\Route\Route;

/**
 * Class TypeRoute
 */
class TypeRoute extends Route
{
   
/**
     * @param string $type The type to check
     * @return bool
     */
   
protected function _checkType($type)
    {
       
$typeCount = TableRegistry::get('Croogo/Taxonomy.Types')
            ->
findByAlias($type)
            ->
cache(sprintf('%s_count', $type), 'croogo_types')
            ->
count();

        return
$typeCount !== 0;
    }

   
/**
     * Checks to see if the given URL can be parsed by this route.
     *
     * If the route can be parsed an array of parameters will be returned; if not
     * false will be returned. String URLs are parsed if they match a routes regular expression.
     *
     * @param string $url The URL to attempt to parse.
     * @param string $method The HTTP method of the request being parsed.
     * @return array|false An array of request parameters, or false on failure.
     */
   
public function parse($url, $method = '')
    {
       
$url = parent::parse($url, $method);
        if (
$this->_checkType($url['type'])) {
            return
$url;
        }

        return
false;
    }

   
/**
     * Check if a URL array matches this route instance.
     *
     * If the URL matches the route parameters and settings, then
     * return a generated string URL. If the URL doesn't match the route parameters, false will be returned.
     * This method handles the reverse routing or conversion of URL arrays into string URLs.
     *
     * @param array $url An array of parameters to check matching with.
     * @param array $context An array of the current request context.
     *   Contains information such as the current host, scheme, port, base
     *   directory and other url params.
     * @return string|false Either a string URL for the parameters if they match or false.
     */
   
public function match(array $url, array $context = [])
    {
        if (empty(
$url['type'])) {
            return
false;
        }

       
//This is a special case for generating example permalinks
       
if ($url['type'] === '_placeholder') {
            return
parent::match($url, $context);
        }

        if (
$this->_checkType($url['type'])) {
            return
parent::match($url, $context);
        }

        return
false;
    }
}