Я использую 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){...}
Действие префикса должно просто изменить некоторые вещи и затем работать как обычный метод «перечисления». Пока здесь все работает нормально.
Но если я создаю относительные ссылки (с помощью HTML Helper), Router :: url () использует ‘modular_listing’ как действие, которое не вписывается в мои маршруты. Это должен быть «листинг» вместо «modular_listing».
Параметры контроллера верны, в качестве действия указано «list», но в параметрах маршрутизатора все еще указано «modular_listing».
Итак, относительные ссылки:
$this->Html->link('example',array('parameter'));
в конечном итоге в:
/dsc_dates/modular_listing/parameter
Как я могу получить правильные ссылки, чтобы маршрутизатор использовал «листинг» в качестве действия?
ОБНОВИТЬ:
Это не альтернатива для добавления ‘controller’ и ‘action’ в массив url генерации ссылки. На самом деле у меня проблемы с автоматически сгенерированными относительными ссылками из paginator.
Я не мог сказать, хотите ли вы сгенерированные маршруты 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 🙂
Других решений пока нет …