2015-03-31 115 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 :)