Параметр Zend URL - Скрыть ключ и показать значение - PullRequest
4 голосов
/ 06 декабря 2011

при использовании Zend по умолчанию URL-адрес маршрутизации выглядит следующим образом:

www.domain.com/controller/action/key1/value1/key2/value2/key3/value3

Каждый ключ и значение хранятся в виде пары в массиве, возвращаемом getParams(); В этом примере:

array("key1" => "value1", "key2" => "value2", "key3" => "value3")

Я хочу, чтобы URL-адреса параметров выглядели так:

www.domain.com/controller/action/value1/value2/value3

Параметры должны быть сопоставлены в массиве, как это. Ключ должен зависеть только от позиции значения в URL.

array(0 => "value1", 1 => "value2", 2 => "value3")

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 26 октября 2012

У меня было такое же намерение, потому что я хочу, чтобы мой URL выглядел примерно так:

http://wwww.mypr.com/tours/Europe/spain/magicalJourney

Я помню, я также могу загрузить все из файла .ini, так что я использую это на своей загрузочной

public function _initRouter() {
    $frontController = Zend_Controller_Front::getInstance();
    $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini');
    $router = $frontController->getRouter();
    $router->addConfig($config, 'routes');
}    

Тогда у меня было это в моем route.ini

routes.tours.route = /tours/:group/:destination/:tour
routes.tours.defaults.module = default
routes.tours.defaults.controller = tours
routes.tours.defaults.action = handler
routes.tours.defaults.group = null
routes.tours.defaults.destination = null
routes.tours.defaults.tour = null

Когда вы запускаете $this->_request->getParams() в вашем контроллере, это выдаст что-то вроде:

Array ( [group] => Europe [destination] => Spain [tour] => MagicalJourney [module] => default [controller] => tours [action] => handler )

На самом деле это работает довольно хорошо:)

1 голос
/ 06 декабря 2011

Вам нужно немного прочитать о ZF Routes .Но по сути, вам нужно добавить что-то подобное в ваш Bootstrap.php:

protected function _initRoutes()
{
    $this->bootstrap('frontController');
    $frontController = $this->getResource('frontController');
    $router = $frontController->getRouter();

    $router->addRoute(
        'name_for_the_route',
        new Zend_Controller_Router_Route('controller/action/:key1/:key2/:key3', array('module' => 'default', 'controller' => 'theController', 'action' => 'theAction', 'key1' => NULL, 'key2' => NULL, 'key3' => NULL))
    );
}

Значения NULL предоставляют значения по умолчанию.

Затем в вашем контроллере вы сделаете что-то вроде этого:

$key1 = $this->_request->getParam('key1');
$key2 = $this->_request->getParam('key2');
$key3 = $this->_request->getParam('key3');

или используйте метод getParams, который вы упомянули ранее.

Вы также можете использовать функцию PHP array_values ​​() для создания численно индексированного массива, например:

$numericArray = array_values($this->_request->getParams());

Это очень хорошая идея, чтобы привыкнуть использовать маршруты, поскольку они обеспечивают абстракцию между тем, что такое URI, и тем, какие контроллеры / действия вызываются.По сути, вы можете достичь с помощью маршрутов объектно-ориентированного кода, который все еще имеет смысл для программиста, и в то же время URI, который имеет смысл для пользователя.

...