CakePHP относительные ссылки с префиксной маршрутизацией

Я использую 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.

3

Решение

Я не мог сказать, хотите ли вы сгенерированные маршруты 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 🙂

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]