CakePHP具有前缀路由的相对链接


CakePHP relative links with prefix routing

我使用的是CakePHP 1.3,前缀路由有一些问题。

我配置了这样的路线:

   Router::connect(
       '/listing/*',
       array(
           'controller' => 'dsc_dates',
           'action' => 'listing',
        )
   );
   Router::connect(
       '/modular/listing/*',
       array(
           'controller' => 'dsc_dates',
           'action' => 'listing',
           'prefix' => 'modular'
       )
   );

在我的控制器中有两个功能:

function modular_listing($order = null,$orderDirection = null, $items=null, $location_id=null) {
   $this->layout='module';
   $this->setAction('listing',$order, $orderDirection, $items, $location_id);
}
function listing($order = null,$orderDirection = null, $items=null, $location_id=null){...}

前缀操作应该只是更改一些内容,然后像正常的"listing"方法一样操作。在这里之前,它运行良好。

但是,如果我(使用HTMLHelper)创建相对链接,Router::url()将使用"modular_listing"作为操作,这不适合我的路由。它应该是"listing"而不是"modular_listing"。控制器参数是正确的,将"listing"作为操作,但路由器参数仍然显示"modular_listing"。

所以相对链接:

$this->Html->link('example',array('parameter'));

将以结束

/dsc_dates/modular_listing/parameter

如何获得正确的链接,以便路由器使用"列表"作为操作?

更新:不能将"controller"answers"action"添加到链接生成的url数组中。事实上,我对分页器自动生成的相对链接有问题。

我不知道你是否想要生成的Html->link()与领先的控制器路由,所以我两者都做了:

控制器(注意渲染器):

// DscDatesController.php
public function listing($param = null) {
    $this->set('param', $param);
    $this->render('listing');
}
public function modular_listing($param = null) {
    // 
    $this->setAction('listing', $param);
} 

路线:

// routes.php
Router::connect(
   // notice no leading DS
   'listing/*',
    array(
       'controller' => 'DscDates',
       'action' => 'listing'
     )
);
Router::connect(
   '/modular/listing/*',
   array(
       'controller' => 'DscDates',
       'action' => 'listing'
   )
);

视图:

// DscDates/listing.ctp
<?php
  // generates /dsc_dates/listing/:param
  echo $this->Html->link(
    'example',
    array('controller'=>'dsc_dates', 'action'=>'listing', $param));
  // generates /listing/:param
  echo $this->Html->link(
    'example',
    array('action'=>'listing', $param));

关于通配符、DS和路由顺序:CakePHP破坏索引方法

HTH:)