Zend URL参数 - 隐藏键和显示值

时间:2011-12-06 15:08:42

标签: php zend-framework url parameters routing

使用Zend的默认路由,网址如下:

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

每个键和值都作为一对存储在由getParams();返回的数组中。在此示例中:

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

我希望参数网址如下所示:

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

参数应该映射到这样的数组中。密钥应仅取决于值在URL中的位置。

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

我该怎么做?

2 个答案:

答案 0 :(得分:2)

我有同样的意图,因为我希望我的网址看起来像这样:

  

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

我记得我也可以从.ini文件加载所有东西,所以我在我的Bootstrap上使用它

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');
}    

然后我在我的routes.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 :(得分:1)

您需要在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。