带前缀路由的 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'方法一样运行。到这里为止一切正常。
但是如果我创建相对 links(使用 HTML Helper)Router::url() 使用 'modular_listing' 作为不适合我的路线的动作。它应该是 'listing' 而不是 'modular_listing'。
控制器参数与 'listing' 作为动作是正确的,但路由器参数仍然显示 'modular_listing'.
所以相对 links:
$this->Html->link('example',array('parameter'));
最终将在:
/dsc_dates/modular_listing/parameter
如何获得正确的 links 以便路由器使用 'listing' 作为操作?
更新:
将 'controller' 和 'action' 添加到 link 代的 url 数组不是替代方法。事实上,我对分页器自动生成的相对 links 有疑问。
我不知道你是否想要生成的 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 broken index method
HTH:)
我使用的是 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'方法一样运行。到这里为止一切正常。
但是如果我创建相对 links(使用 HTML Helper)Router::url() 使用 'modular_listing' 作为不适合我的路线的动作。它应该是 'listing' 而不是 'modular_listing'。 控制器参数与 'listing' 作为动作是正确的,但路由器参数仍然显示 'modular_listing'.
所以相对 links:
$this->Html->link('example',array('parameter'));
最终将在:
/dsc_dates/modular_listing/parameter
如何获得正确的 links 以便路由器使用 'listing' 作为操作?
更新: 将 'controller' 和 'action' 添加到 link 代的 url 数组不是替代方法。事实上,我对分页器自动生成的相对 links 有疑问。
我不知道你是否想要生成的 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 broken index method
HTH:)