Zend Framework - Router - Создание псевдонимов - PullRequest
0 голосов
/ 27 марта 2012

Я создаю приложение Zend Framework 1.11.11 и хотел бы использовать базу данных маршрутов и контента.

Я написал плагин FrontController, который извлекает «пути» из базы данных и создает запись в маршрутизаторе для каждого с соответствующим контроллером и действием.

Однако я хотел бы иметь возможность использовать псевдонимы - URL, который ведет себя как обычный URL, но является псевдонимом.

Например, если я создам следующее:

// Create the Zend Route
$entry = new Zend_Controller_Router_Route_Static(
    $route->getUrl(), // The string/url to match
    array('controller'  => $route->getControllers()->getName(),
            'action'    => $route->getActions()->getName())
);                    
// Add the route to the router
$router->addRoute($route->getUrl(), $entry); 

Тогда маршрут для /about/, например, может перейти к staticController, indexAction.

Однако, как мне лучше создать псевдоним этого маршрута? Так что, если бы я перешел на /abt/, он бы отобразил тот же контроллер и действие?

Для меня не имеет смысла воссоздавать тот же маршрут, который я буду использовать в качестве идентификатора страницы, чтобы затем загружать содержимое из базы данных для страницы ...

1 Ответ

1 голос
/ 28 марта 2012

Вы можете расширить статический маршрутизатор:

class My_Route_ArrayStatic extends Zend_Controller_Router_Route_Static
{
    protected $_routes = array();

    /**
     * Prepares the array of routes for mapping
     * first route in array will become primary, all others
     * aliases
     * 
     * @param array $routes array of routes
     * @param array $defaults 
     */
    public function __construct(array $routes, $defaults = array())
    {
        $this->_routes = $routes;
        $route = reset($routes);
        parent::__construct($route, $defaults);
    }

    /**
     * Matches a user submitted path with a previously specified array of routes
     * 
     * @param string $path
     * @param boolean $partial
     * @return array|false 
     */
    public function match($path, $partial = false)
    {
        $return = false;

        foreach ($this->_routes as $route) {
            $this->setRoute($route);
            $success = parent::match($path, $partial);
            if (false !== $success) {
                $return = $success;
                break;
            }
        }

        $this->setRoute(reset($this->_routes));
        return $return;
    }

    public function setRoute($route)
    {
        $this->_route = trim($route, '/');
    }
}

и добавьте новый маршрутизатор следующим образом:

$r = My_Route_ArrayStatic(array('about', 'abt'), $defaults);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...