2015-03-31 119 views
2

我正在使用CakePHP 1.3,并且在前缀路由方面有一些麻烦。CakePHP与前缀路由的相对链接

我配置了这样的路线:

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){...} 

前缀行动应该只是改变了一些东西,然后像正常的“上市”的方法操作。直到这里它工作正常。

但是,如果我创建相关链接(与HTML帮助)路由器:: url()使用'modular_listing'作为行动,不适合我的路线。它应该是'列出'而不是'modular_listing'。 控制器参数与“列表”作为操作是正确的,但路由器参数仍然显示为“modular_listing”。

所以相关链接:

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

将结束在:

/dsc_dates/modular_listing/parameter 

我怎样才能得到正确的联系,使路由器使用“上市”作为行动?

更新: 这是不是一个替代方案添加'控制器'和'行动'的链接世代的url数组。事实上,我在自动生成paginator相关链接时遇到了问题。

回答

1

我不能告诉,如果你想生成的HTML的“链接()的路线与领先的控制器或没有,所以我做了两个:

控制器(注意渲染器):

// 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 broken index method

HTH :)